:: = 0|1|2|3|4|5|6|7|8|9|
Numele se folosesc pentru denumirea variabilelor, tablourilor, funcţiilor, etc.
Exemple:
A, _start, a_, matrice, matrice_patratica.
Dăm şi câteva contraxemple:
&B - conţine caracterul &;
x+y - conţine caracterul +;
1.3.3. Cuvinte cheie
Un cuvânt cheie este un cuvânt împrumutat din limba engleză, care are un înţeles predefinit. Aceste cuvinte se scriu cu litere mici. Un cuvânt cheie nu poate avea altă utilizare într-un program C decât cea care i-a fost predefinită. Fiind o succesiune de litere, un cuvânt cheie este un nume. Lista cuvintelor cheie se dă în anexa de la sfârşitul cărţii. Sensul fiecărui cuvânt cheie va rezulta la definirea construcţiei în care se utilizează.
Exemple:
for, do, if, while, else, break, return, int, long, double, static, extern.
1.3.4. Tipuri de bază
În limbajul C distingem câteva tipuri predefinte de date care se mai numesc tipuri de bază. În general un tip de dată are trei atribute bine conturate:
-
mulţimea valorilor;
-
reprezentarea (internă şi externă);
-
comportamentul (adică operaţiile ce se pot face cu acel tip).
În tabelul de mai jos dăm cuvântul cheie, mulţimea valorilor, reprezentarea internă.
Reprezentarea internă
Cuvânt cheie Mulţimea valorilor Lungime (biţi) Formatul intern
int întregii din [-215; 215-1] 16 reprezentare binară
short întregii din [-215; 215-1] 16 reprezentare binară
long întregii din [-231; 231 - 1] 32 reprezentare binară
unsigned întregii din [0; 216-1] 16 reprezentare binară
char 8 cod ASCII
float [-3.4*10-38; 3.4*1038] 32 virgulă flotantă simplă precizie
double [-1.7*10-308; 1.7*10308] 64 virgulă flotantă dublă precizie
Facem precizarea că se poate folosi şi combinaţia unsigned long pentru întregii fără semn în dublă precizie.
Cu tipurile de bază se pot defini şi tipuri utilizator folosind instrucţiunea struct.
1.3.5. Constante
O constantă are un tip şi o valoare. Atât tipul cât şi valoarea unei constante se definesc prin caracterele care compun constanta respectivă.
Constantă întreagă zecimală
O constantă întreagă este un şir de cifre care eventual este prefixat de un semn (+ sau -) şi postfixat de litera L sau l. O constantă întreagă se reprezintă în binar pe 16 sau 32 de biţi. Sufixul L sau l forţează reprezentarea pe 32 de biţi.
Constantă întreagă octală
O constantă întreagă octală este un şir de cifre octale (cifre cuprinse între 0 şi 7) precedat de un zero nesemnificativ.
Constantă întreagă hexazecimală
O constantă întreagă hexazecimală este un şir de cifre hexazecimale prefixat cu 0x sau 0X.
Exemple:
Reprezentare Interpretare
12345 întreg zecimal reprezentat în binar pe 16 biţi
-12345 întreg zecimal reprezentat în binar pe 16 biţi
12345L întreg zecimal reprezentat în binar pe 32 biţi
012345 întreg octal reprezentat în binar pe 16 biţi (o cifră octală pe 3 biţi)
0xabcd întreg hexa reprezentat în binar pe 16 biţi (o cifră pe 4 biţi)
12345678 întreg zecimal reprezentat pe 32 de biţi
Constantă flotantă
O constantă flotantă este un număr raţional care se compune din următoarele elemente:
-
un semn (+ sau -) care poate lipsi pentru numerele pozitive;
-
o parte întreagă care poate fi şi vidă;
-
o parte fracţionară care poate fi şi vidă;
-
un exponent care poate fi şi vid.
Prezenţa părţii fracţionare este suficientă pentru ca numărul respectiv să reprezinte o constantă flotantă. Absenţa părţii fracţionare implică prezenţa părţii întregi şi a exponentului.
Partea întreagă reprezintă o succesiune de cifre zecimale. Partea fracţionară se compune din caracterul punct urmat de o succesiune de cifre zecimale, care poate fi şi vidă. Exponentul se compune din litera e sau E urmată de un + sau -, opţional, şi un şir de cifre zecimale.
Constantele flotante se păstrează în format flotant dublă precizie.
Exemple:
3.14; 0.314e1; 3.1415926; 2.71828; 2.; 271828E-5.
Constantă caracter
O constantă caracter reprezintă un caracter şi are ca valoare codul ASCII al caracterului respectiv. O constantă caracter grafic se poate scrie incluzând caracterul respectiv între caractere apostrof.
Exemple:
Constantă caracter valoare cod ASCII
‘A’ 65
‘B’ 66
‘a’ 97
‘0’ 48
‘9’ 58
‘*’ 77
Anumite caractere negrafice au notaţii speciale la scrierea cărora se utilizează caracterul backslash (\). Dăm în continuare un tabel cu cele mai folosite caractere negrafice:
Caracter Reprezentare ca şi constantă caracter Valoare cod ASCII
Backspace ‘\b’ 8
Retur de car ‘\r’ 13
Newline ‘\n’ 10
Apostrof ‘\’’ 39
Backslash ‘\\’ 92
Tabulator vertical ‘\v’ 11
Salt pagină imprimantă ‘\f’ 12
Carcterul NUL ‘\0’ 0
Constantă şir de caractere
O constantă şir de caractere este o succesiune de zero sau mai multe caractere delimitate prin ghilimele. Ghilimelele nu fac parte din şirul de caractere.
Exemple:
“123”; “Limbajul C”; “sir de caractere”; “sir\””; “”(şirul vid).
Constanta şir de caractere se reprezintă în memoria calculatorului printr-o succesiune de octeţi în care se păstrează codurile ASCII ale caracterelor şirului, iar ultimul octet conţine caracterul NUL care marchează sfârşitul şirului de caractere.
După cum se observă din exemplele date putem să folosim şi convenţia cu backslash.
De reţinut că ‘X’ şi “X” reprezintă construcţii diferite.
1.3.6. Variabile simple
Prin variabilă înţelegem o dată a cărei valoare se poate schimba în timpul execuţiei programului care o conţine. Unei variabile i se ataşează un nume prin intermediul căruia o putem referi sau modifica. Totodată valorile pe care le poate lua o variabilă trebuie să aparţină aceluiaşi tip. Corespondenţa dintre numele şi tipul unei variabile se realizează printr-o construcţie specială numită declaraţie.
După modul de grupare datele sunt:
-
date izolate denumite şi variabile simple;
-
date grupate:
- mulţimi ordonate de date de acelaşi tip la care ne referim cu indici,
- structuri în care date de tipuri diferite se grupează.
Declaraţia de variabilă simplă are formatul general:
tip listă_de_nume;
unde listă_de_nume este formată 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 octeţi;
float x,y,z; // x, y, z sunt variabile de tip float in format flotant simpla precizie pe 32 de biţi;
char car; // car este o variabila de tip char pe 1 octet, poate conţine coduri ASCII;
long i,j,k; // i, j, k sunt variabile de tip long in format binar pe 32 de biţi.
Un tablou ca orice variabilă simplă trebuie declarat înainte de a fi utilizat. Dacă referirea la elementele tabloului se face cu un singur indice se spune că tabloul este unidimensional (se mai numeşte vector); dacă referirea se face cu doi indici tabloul se numeşte bidimensional (matrice); iar cu n indici tabloul este n-dimensional.
Declaraţia unui tablou în forma cea mai simplă 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 că se pot declara mai multe tablouri deodată şi atunci numele de tablouri se pot înşirui într-o listă, fiecare separat prin virgulă.
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 variabilă cu indici se compune din numele tabloului urmat de unul sau mai mulţi indici, fiecare indice fiind inclus în paranteze drepte. Numărul indicilor defineşte dimensiunea tabloului. Indicii sunt expresii care au valori întregi. Limita inferioară a indicilor este zero. Astfel dacă 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 variază între 0 şi lk-1.
Repartizarea memoriei pentru un tablou se face astfel: pentru fiecare element al tabloului se repartizează o zonă de memorie necesară în conformitate cu tipul tabloului respectiv (pentru tipul int câte 2 octeţi, pentru tipul float câte 4 octeţi, etc). Numele unui tablou este un pointer, el poate fi utilizat în diferite construcţii şi el are ca valoare adresa primului său element.
În desenul următor se indică 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]
1.3.8. Comentariu
În limbajul C un comentariu se scrie între /* şi */ pe oricâte rânduri. între /* şi */ se poate scrie o succesiune arbitrară de caractere, care însă nu poate să conţină secvenţa de terminare (adică */). Comentariul poate fi inserat într-un program în orice poziţie în care este legal să apară un caracter alb. El constituie o explicaţie pentru programator sau pentru utilizator. Compilatorul nu interpretează comentariul în nici un mod. Comentariul se recomandă a fi inserat în punctele în care programatorul poate lămuri prin explicaţii, anumite aspecte ale procesului de calcul sau ale datelor utilizate. În mediile BORLAND C există şi o altă convenţie de a marca un comentariu la nivelul unui rând cu ajutorul a două caractere slash (//), convenţie pe care am folosit-o de altfel în exemplele anterioare.