CONSTRUCŢIILE DE BAZĂ ALE LIMBAJULUI C
1.3.1. Caractere
Limbajul C foloseste setul de caractere al codului ASCII care se codifica prin numere întregi din intervalul [0,127], adica 128 de coduri. Un astfel de întreg se pastreaza pe un BYTE (OCTET) adica pe 8 biti.
Multimea caracterelor se împarte în trei grupe:
- caractere
negrafice (coduri cuprinse între 00=NUL si 31) si 127=
- spatiu (codul 32);
- caractere grafice (coduri cuprinse între 33 si 126).
Caracterele grafice se împart la rândul lor în:
litere mari (coduri între 65 si 90);
litere mici (coduri între 97 si 122);
cifre (coduri între 48 si 59);
caractere speciale (celelalte coduri).
Caracterele negrafice au diferite functii. Astfel codul 10 semnifica LF (Line Feed), adica deplaseaza cursorul pe linia urmatoare în coloana 1, iar codul 13 semnifica CR (Carriage Return) adica deplaseaza cursorul în coloana 1 aceeaş 454h71e ;i linie. În limbajul C combinatia celor doua caractere se noteaza prin:
\n
si are semnificatia trecerii cursorului la linie noua si coloana 1 (newline).
Tabulatorul orizontal (deplasarea cursorului peste un anumit numar de pozitii) se precizeaza prin notatia:
\t
Sa mai precizam ca urmatoarele 3 caractere: spatiu, newline si tabulator orizontal se mai numesc spatii albe (white spaces).
1.3.2. Nume
În limbajul C, un nume este o succesiune de litere si eventual cifre, care începe cu o litera. Ca lungime un nume poate fi oricât de lung dar numai primele 32 de caractere se iau în considerare. Folosind notatia BNF (vezi anexa) un nume se poate defini recursiv, ca mai jos:
<nume> ::= <litera> | <nume><litera> | <nume><cifra>
<litera> ::= A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Z|
a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|z|_
<cifra> ::= 0|1|2|3|4|5|6|7|8|9|
Numele se folosesc pentru denumirea variabilelor, tablourilor, functiilor, etc.
Exemple:
A, _start, a_, matrice, matrice_patratica.
Dam si câteva contraxemple:
&B - contine caracterul &;
x+y - contine caracterul +;
1.3.3. Cuvinte cheie
Un cuvânt cheie este un cuvânt împrumutat din limba engleza, care are un înteles predefinit. Aceste cuvinte se scriu cu litere mici. Un cuvânt cheie nu poate avea alta utilizare într-un program C decât cea care i-a fost predefinita. Fiind o succesiune de litere, un cuvânt cheie este un nume. Lista cuvintelor cheie se da în anexa de la sfârsitul cartii. Sensul fiecarui cuvânt cheie va rezulta la definirea constructiei în care se utilizeaza.
Exemple:
for, do, if, while, else, break, return, int, long, double, static, extern.
1.3.4. Tipuri de baza
În limbajul C distingem câteva tipuri predefinte de date care se mai numesc tipuri de baza. În general un tip de data are trei atribute bine conturate:
multimea valorilor;
reprezentarea (interna si externa)
comportamentul (adica operatiile ce se pot face cu acel tip).
În tabelul de mai jos dam cuvântul cheie, multimea valorilor, reprezentarea interna.
Reprezentarea interna
Cuvânt cheie Multimea valorilor Lungime (biti) Formatul intern
int întregii din [-215; 215-1] 16 reprezentare binara
short întregii din [-215; 215-1] 16 reprezentare binara
long întregii din [-231; 231 - 1] 32 reprezentare binara
unsigned întregii din [0; 216-1] 16 reprezentare binara
char 8 cod ASCII
float [-3.4*10-38; 3.4*1038] 32 virgula flotanta simpla precizie
double [-1.7*10-308; 1.7*10308] 64 virgula flotanta dubla precizie
Facem precizarea ca se poate folosi si combinatia unsigned long pentru întregii fara semn în dubla precizie.
Cu tipurile de baza se pot defini si tipuri utilizator folosind instructiunea struct.
1.3.5. Constante
O
O
O
O constanta întreaga hexazecimala este un sir de cifre hexazecimale prefixat cu 0x sau 0X.
Exemple:
Reprezentare Interpretare
întreg zecimal reprezentat în binar pe 16 biti
întreg zecimal reprezentat în binar pe 16 biti
12345L întreg zecimal reprezentat în binar pe 32 biti
întreg octal reprezentat în binar pe 16 biti (o cifra octala pe 3 biti)
0xabcd întreg hexa reprezentat în binar pe 16 biti (o cifra pe 4 biti)
12345678 întreg zecimal reprezentat pe 32 de biti
Constanta flotanta
O constanta flotanta este un numar rational care se compune din urmatoarele elemente:
un semn (+ sau -) care poate lipsi pentru numerele pozitive;
o parte întreaga care poate fi si vida;
o parte fractionara care poate fi si vida;
un exponent care poate fi si vid.
Prezenta
partii fractionare este suficienta pentru ca numarul
respectiv sa reprezinte o
Partea întreaga reprezinta o succesiune de cifre zecimale. Partea fractionara se compune din caracterul punct urmat de o succesiune de cifre zecimale, care poate fi si vida. Exponentul se compune din litera e sau E urmata de un + sau -, optional, si un sir de cifre zecimale.
Constantele flotante se pastreaza în format flotant dubla precizie.
Exemple:
3.14; 0.314e1; 3.1415926; 2.71828; 2.; 271828E-5.
O
Exemple:
'A' 65
'B' 66
'a' 97
48
58
77
Anumite caractere negrafice au notatii speciale la scrierea carora se utilizeaza caracterul backslash (\). Dam în continuare un tabel cu cele mai folosite caractere negrafice:
Caracter Reprezentare ca si constanta caracter Valoare cod ASCII
Backspace '\b' 8
Retur de car '\r' 13
Newline '\n' 10
Apostrof '\'' 39
Backslash '\\' 92
Tabulator vertical '\v' 11
Salt pagina imprimanta '\f' 12
Carcterul NUL '\0' 0
Constanta sir de caractere
O constanta sir de caractere este o succesiune de zero sau mai multe caractere delimitate prin ghilimele. Ghilimelele nu fac parte din sirul de caractere.
Exemple:
"123"; "Limbajul C"; "sir de caractere"; "sir\""; ""(sirul vid).
Constanta sir de caractere se reprezinta în memoria calculatorului printr-o succesiune de octeti în care se pastreaza codurile ASCII ale caracterelor sirului, iar ultimul octet contine caracterul NUL care marcheaza sfârsitul sirului de caractere.
Dupa cum se observa din exemplele date putem sa folosim si conventia cu backslash.
De retinut ca 'X' si "X" reprezinta constructii diferite.
1.3.6. Variabile simple
Prin variabila întelegem o data a carei valoare se poate schimba în timpul executiei programului care o contine. Unei variabile i se ataseaza un nume prin intermediul caruia o putem referi sau modifica. Totodata valorile pe care le poate lua o variabila trebuie sa apartina aceluiasi tip. Corespondenta dintre numele si tipul unei variabile se realizeaza printr-o constructie speciala numita declaratie.
Dupa modul de grupare datele sunt:
date izolate denumite si variabile simple;
date grupate:
- multimi ordonate de date de acelasi tip la care ne referim cu indici,
- structuri în care date de tipuri diferite se grupeaza.
Declaratia de variabila simpla are formatul general:
tip lista_de_nume;
unde lista_de_nume este formata fie dintr-un singur nume fie din mai multe, separate prin virgule.
În limbajul C trebuie declarate toate variabilele înainte de a fi utilizate.
Exemple:
int a,b,c; // a, b, c sunt variabile de tip int reprezentate in binar pe 2 octeti;
float x,y,z; // x, y, z sunt variabile de tip float in format flotant simpla precizie pe 32 de biti;
char car; // car este o variabila de tip char pe 1 octeti poate contine coduri ASCII;
long i,j,k; // i, j, k sunt variabile de tip long in format binar pe 32 de biti.
Tablouri
Un tablou ca orice variabila simpla trebuie declarat înainte de a fi utilizat. Daca referirea la elementele tabloului se face cu un singur indice se spune ca tabloul este unidimensional (se mai numeste vector); daca referirea se face cu doi indici tabloul se numeste bidimensional(matrice); iar cu n indici tabloul este n-dimensional.
Declaratia unui tablou în forma cea mai simpla este:
tip nume[l1][l2]...[ln];
unde:
l1, l2, ... ln sunt expresii constante care au valori întregi ce pot fi evaluate de compilator la întâlnirea lor.
Evident ca se pot declara mai multe tablouri deodata si atunci numele de tablouri se pot însirui într-o lista, fiecare separat prin virgula.
Exemple:
int t[5]; // s-a declarat un tablou unidimensional de 5 componente;
float a[5][3]; // s-a declarat un tablou bidimensional de 5*3=15 componente;
La elementele unui tablou ne referim prin variabile cu indici. O variabila cu indici se compune din numele tabloului urmat de unul sau mai multi indici, fiecare indice fiind inclus în paranteze drepte. Numarul indicilor defineste dimensiunea tabloului. Indicii sunt expresii care au valori întregi. Limita inferioara a indicilor este zero. Astfel daca t este tabloul de tip int în exemplul de mai sus, elementele lui sunt:
t[0], t[1], t[2], t[3], t[4].
În cazul matricii a declarate mai sus elementele ei vor fi:
prima linie: a[0][0], a[0][1], a[0][2];
a doua linie: a[1][0], a[1][1], a[1][2];
a cincea linie: a[4][0], a[4][1], a[4][2];
Deci pentru dimensiunea k indicele variaza între 0 si lk-1.
Repartizarea memoriei pentru un tablou se face astfel: pentru fiecare element al tabloului se repartizeaza o zona de memorie necesara în conformitate cu tipul tabloului respectiv (pentru tipul int câte 2 octeti, pentru tipul float câte 4 octeti, etc). Numele unui tablou este un pointer, el poate fi utilizat în diferite constructii si el are ca valoare adresa primului sau element.
În desenul urmator se indica repartizarea memoriei pentru tabloul t din exemplul de mai înainte:
t
adresa lui
t[0]
t[0] t[1] t[2] t[3] t[4]
Comentariu
În limbajul C un comentariu se scrie între /* si */ pe oricâte rânduri. între /* si */ se poate scrie o succesiune arbitrara de caractere, care însa nu poate sa contina secventa de terminare (adica */). Comentariul poate fi inserat într-un program în orice pozitie în care este legal sa apara un caracter alb. El constituie o explicatie pentru programator sau pentru utilizator. Compilatorul nu interpreteaza comentariul în nici un mod. Comentariul se recomanda a fi inserat în punctele în care programatorul poate lamuri prin explicatii, anumite aspecte ale procesului de calcul sau ale datelor utilizate. În mediile BORLAND C exista si o alta conventie de a marca un comentariu la nivelul unui rând cu ajutorul a doua caractere slash (//), conventie pe care am folosit-o de altfel în exemplele anterioare.
|