Sunteți pe pagina 1din 16

Tema 1. Limbajul de program are C. Noiuni elementare 1.0. Scurt istoric 1.1. Structura unui program C 1.2.

Preprocesare 1.3. Date constante i date variabile 1.4. Tipuri de date de baz n C: char, int, float, double, void 1.5. Modificatori de tip: signed, unsigned, short, long, const 1.6. Secvene escape 1.7. Constante 1.8. Variabile 1.9. Declaraia i iniializarea variabilelor simple 1.10. Tablouri de date 1.11. Declaraia i iniializarea tablourilor de date 1.12. Comentarii

1.0. Scurt istoric Apariia limbajului C a fost precedat i anunat de diverse ncercri de a construi un limbaj care s corespund cerinelor aprute o dat cu dezvoltarea calculatoarelor: portabilitate, uurin n folosire, libertate de exprimare, tex t surs compact etc. Motorul cercetrilor a fost dezvoltarea unui nou sistem de operare: UNIX. Evoluia limbajului i a sistemului de operare a avut loc n paralel, fiecare impulsionnd dezvoltarea celuilalt. Se consider c C a fost creat special pentru sistemele de operare din familia UNIX. De fapt C este un rezultat al experienei acumulate n aceste cercetri, chiar dac este considerat un limbaj de autor. n 1969 a fost lansat limbajul BCPL (Basic Combined Programming Language), conceput la Universitatea Cambridge. Era un limbaj dependent de structura mainii pe care era folosit i nu avea conceptul de tip de dat datele se reprezentau binar, pe cuvinte de memorie. n 1970 a aprut o form mai avansat, limbajul B, utilizat sub sistemul de operare al calculatoarelor DEC PDP. Nu mele limbajului este o prescurtare a acronimului BCPL. n 1978 Dennis Ritchie i Brian Kernighan i -au finalizat cercetrile publicnd The C Programming Language (Limbajul de programare C), care este limbajul cunoscut astzi. Limbajul a fost denumit astfel pentru c C este litera care urmeaz dup B. Lucrarea lui Kernighan i Ritchie este considerat momentul oficial al apariiei limbajului C. n perioada urmtoare, pornind de la specificaiile limbajului, s -au creat numeroase compilatoare C, fiecare adu cnd propriile diferene fa de limbajul iniial, ajungndu -se la variante foarte mult diferite unele fa de altele. n acest fel s -a pus n pericol ideea iniial de portabilitate. Ca urmare, n 1988 Comitetul pentru limbajul C al Institutului Naional de Standardizare al SUA (ANSI) a impus un standard cunoscut drept ANSI C. Acesta este implementat n toate versiunile de compilatoare ulterioare. Odat cu acest standard legtu ra implicit cu sistemul UNIX a disprut, limbajul fiind disponibil pe orice pla tform. Avantajele limbajului C: 1. Limbaj de programare de scop general - permite dezvoltarea de aplicaii diverse: soft tiinific, soft pentru gestiunea bazelor de date, editoare de tex te, jocuri, etc. - nu este specializat pe un domeniu particular de a plicaii;

- ofer un control modern al funciilor i al structurilor de date i posed un set bogat de operatori; 2. Permite o foarte bun portabilitate a programelor - programele scrise n C pot fi transferate uor de la un calculator la altul; 3. Permite programarea structurat (modular); 4. Permite scrierea softului de baz (programare de sistem); 5. Ofer posibilitatea lucrului pe bii i a calculului adreselor. 1.1. Structura unui progr am C Un program C const din una sau mai multe funcii. O funcie are numele prestabilit, main(). Prezena ei este obligatorie pentr u orice program. Cu funcia main() ncepe execuia oricrui program C. Pe lng funcii, un program mai poate conine directive pentru preprocesor i declaraii de variabile. Preprocesorul este un program special, care prelucreaz programul nainte de compilare. Un program poate fi scris n orice editor de texte. Programul trebuie salvat ntr -un fiier cu extensia .c, care se numete fiier surs. Pentru a executa un program C, el trebuie s treac trei etape: compilarea, editarea legturilor i execuia. Rezultatul compilrii este un fiier obiect, cu extensia .obj. Editorul de legturi va genera un fiier cu extensia .exe, programul executabil. Exist mai multe IDE (mediu integrat de dezvoltare), care au integrate n sine i editor de programe C i compilator C i editor de legturi. Ne vom folosi, pentru nceput, de IDE Borland C++ 3.1 ( BC31 ). Exemplu de program C: #include <stdio.h> #include <conio.h> main() { clrscr(); printf(Salut, lume!\n); printf(In C rezultatul impartirii a 2 intregi este un intreg:\n); printf(13/5=%d,13/5); getch(); return 0; } Linia #include <stdio.h> include n program fiierul stdio.h din biblioteca standard INCLUDE. Linia #include <conio.h> include n program fiierul conio.h din biblioteca standard INCLUDE. Programul const dintr -o singur funcie, funcia principal main(). Dup numele funciei, n acolade, urmeaz corpul funcie. n corp sunt scrise toate instruciunile , pe care trebuie s le execute funcia. clrscr() este o funcie standard care cur (terge) ecranul. Ea este descris n fiierul inclus conio.h. printf() este o funcie care extrage informaii la ecran. Ea este descris n fiierul stdio.h. getch() este o funcie standard care introduce un caracter de la tastatur. Ea este descris n fiierul conio.h. return 0 este o instruciune care returneaz valoarea 0 i iese din funcia main(). Prin aceasta se termin execuia programu lui. n rezultatul execuiei acestui program, pe ecran vom obine informaia:

Salut, lume! In C rezultatul impartirii a 2 intregi este un intreg: 13/5=2

1.2. Preprocesare Un program C, nainte de compilare este prelucrat de preprocesor. Acesta este un program special care prelucreaz programul, l pregtete pentru compilare. Preprocesorul are un ir de instruciuni care se numesc directive. O directiv definete careva aciuni asupra programului. D irectivele se scriu n program cte una pe linie. Fiecare directiv ncepe cu simbolul #, dup care urmeaz numele directivei. Dup numele directivei pot urma parametrii ei. De exemplu: #include <stdio.h>, #define a 10, #undef a .a. Directiva #include Aceast directiv include un fiier n program. Fiierul este inclus n acel punct al programului, unde este sc ris directiva. Numele fiierului inclus se arat dup numele directivei: #include <conio.h>. Cu #include se pot aduga la program att fiiere cu e xtensia .h, ct i fiiere cu extensia .c. Dac numele fiierului este scris n paranteze unghiulare: <math.h>, atunci fiierul este cutat n biblioteca INCLUDE. Fiierul, ce trebuie inclus, poate fi indicat i n ghilimele: sortare.c sau f: \antet1.h, acestea sunt fiiere ale programatorului i nu fiiere de bibliotec. Fiierul sortare.c este cutat n directorul curent, de unde a fost startat programul. Fiierul f:\antet1.h este cutat pe calea indicat n ghilimele. De obicei, directivele #include se scriu la nceputul programului, dar pot fi plasate i pe parcursul programului, printre fu ncii. Directiva #define Directiva #define se folosete mai des pentru a face substituii n program. De ex emplu, directiva #define a 3.14 va substitu i orice nume a din program cu irul de caractere 3.14, iar #define MAX (x <y)?(x):(y) va nlocui numele MAX cu irul (x<y)?(x):(y). Substituia se face din punctul programului unde a fost scris directiva: #define a 3.14 i pn la sfritul programului sau pn la ntlnirea directivei respective #undef a.

1.3 . Date constante i date variabile Orice program prelucreaz careva date. Sunt date constante i date variabile. O dat este constant, dac valoarea ei nu poate fi modificat pe tot parcursul execuiei programului. Orice constant are valoare i tip. i valoarea i tipul sunt definite prin modul de reprezentare (s criere) a constantei n program i nu mai pot fi schimbate pe tot timpul execuiei programului. Exemple de constante: 2010, -3.14, S, ASEM, \n, 8. O dat, valoarea creia poate fi schimbat n timpul execuiei programului, este o dat variabil. Ea se numete variabil. Variabila este un nume asociat cu o locaie de memorie unde pot fi scrise valori de un tip anumit. Valoarea unei variabile poate fi modifica t, dar tipul ei nu poate fi schimbat. O variabil se introduce n program prin declaraia ei .

1.4 . Tipuri de date de baz n C

Datele prelucrate de program au tip i valoare. Un tip de date precizeaz un set de valori, o mulime de operaii ce pot fi e fectuate cu aceste valori, ct memorie este alocat pentru o valoare de acest tip i cum este reprezentat ea n memoria calculatorului. Tipurile de date de baz n C sunt: char, int, float, double, void. Tipul char Tipul char se folosete pentru reprezentarea caracterelor. Un caracter este alocat pe un octet prin codul su ASCII. Codurile ASCII sunt numer ele ntregi de la 0 pn la 127. Cu toate acestea, diapazonul de valori pentru tipul char sunt toate numerele ntregi de la -128 pn la 127. Deoarece valorile de tip char sunt numere ntregi, cu ele pot fi efectuate toate operaiile ce pot fi apli cate la numerele ntr egi. Tipul int Tipul int este folosit pentru pstrarea numerelor ntregi. O valoare de tipul int este pstrat pe un cuvnt calculator. La u n calculator pe 16 bii, o valoare int este pstrat pe 2 octei, iar la un calculator pe 32 bi i, o valoare int este pstrat pe 4 octei. IDE Borland C++ 3.1 aloc 2 octei pentru valori de tipul int. Numerele int sunt reprezentate n memoria calculatorului n complement fa de 2. Diapazonul de valori int sunt numerele ntr egi de la 32768 pn la +32767. Bitul cel mai semnificativ este rezervat pentru semnul numrului. Operaiile cu numere int sunt operaiile obinuite cu numere ntregi: +, -,*,/,%. Operaia % este restul mpririi a dou valori ntregi, se numete operaia modulo. mprirea a dou numere ntr egi este numr ntreg, partea fracionar se pierde, nu se face rotunjirea rezultatului. Tipul float Tipul float se folosete pentru pstrarea numerelor reale, n virgula mobil, cu precizie simpl, ordinar, pn la 6 cifre c orecte. O -38 valoa re float se pstreaz pe 4 octei. Diapazonul de valori pentru tipul float sunt valoarea 0 i valorile cu modulul cuprins nt re 3.4*10 i 3.4*10
+38

.
y

Operaiile pentru valorile float sunt cele obinuite: +, - ,*,/. n C nu exist operaia ridicrii la putere ( x ). Pentru aceasta este o funcie special ( pow(x,y) ). Tipul double Tipul double de asemenea se folosete pentru pstrarea numerelor reale, n virgula mobil, dar cu o precizie mai mare, preciz ie dubl, pn la 15 cifre corecte. O valoare double s e pstreaz pe 8 octei. Diapazonul de valori pentru tipul float sunt valoarea 0 i valorile cu -308 +308 modulul cuprins ntre 1.7*10 i 1.7*10 . Tipul void Tipul void este un tip fr tip. El semnific lipsa tipului. Domeniul de valori pentru tipul void este mulimea vid. Acest tip se folosete pentru a indica lipsa parametrilor la o funcie ( ...f(void) ... ), pentru a indica la o funcie c ea nu returneaz nici -un rezultat ( void f(...) ), pentru a declara pointeri generici ( void *p ), adic adrese de memorie pentru care nu se tie tipul valorilor ce vor fi pstrate acolo.

1.5. Modificatori de tip n C sunt modificatori de tip care permit modificarea unor proprieti ale unui tip deja existent. Aceti modificatori sunt: signe d (cu semn), unsigned (fr semn), short (scurt), long (lung), const .

Modificatorul signed poate fi aplicat la un tip integral, adic tip de numere ntregi, inclusiv char. El determin n mod explicit, c valorile re prezentate sunt tratate ca valori cu semn, adic pozitive sau nega tive. Bitul cel mai semnificativ este alocat pentru semnul numrului. Astfel, obinem tipurile signed char i signed int. De obicei, tipul char, ca i tipul int, sunt tipuri cu semn, chiar dac nu e scris modificatorul signed. Modificatorul unsigned trateaz valorile ntregi ca fiind fr semn. Nu se mai aloc un bit pent r u semn. Toi biii sunt alocai pentru cifrele valorii ntregi respective. Astfel, obinem tipurile unsigned char i unsigned int. De obicei, pentru tipul unsigned int se scrie unsigned, adic se omite cuvntul int. Modificatorul short La tipurile int i unsigned se poate aplica modificatorul short. El deter min faptul, ca pentru valori de aceste tipuri se aloc 2 octei independent de lungimea cuvntului calculator. n aa mod, obinem tipurile short int i short unsigned. De obicei, short int se prescurteaz la short. Modificatorul long Aplicat la tipurile int i unsigned, modificatorul long determin faptul, ca pentru valori de aceste tipuri se aloc 4 octei independent de lungimea cuvntului calculator. n aa mod, obinem tipurile long int i long unsigned. De obicei, long int se prescurteaz la long. Modificatorul long poate fi aplicat i la tipul double. Astfel, obinem tipul long double. El reprezint aceleai numere real e, dar cu o precizie mai mare, precizie quadrupl, pn la 19 cifre corecte. O valoare long double este alocat pe 10 octei. Diapazonul de valori -4392 +4392 pentru modulul unei valori long double este 0 i numerele de la 3.4*10 pn la 3.4*10 . Modificatorul const Va loarea unei date variabile poate fi modificat n timpul execuiei programului. O dat variabil se introduce n program prin declaraia ei. Dac la declaraie aplicat modificatorul const, atunci acesta interzice modificarea valorii, adic aceast dat va fi o constant: Construcia int x=3; declar pe x ca o dat variabil cu valoarea iniial 3. Aceast valoare iniial 3 poate fi schimbat ulterior. Construcia const int y=4; declar pe y ca o dat variabil cu valoarea iniial 4, dar aceast valoare 4 nu mai poate fi schimbat pe tot timpul execuiei programului. Acest fapt a fost determinat de modificatorul const din declaraia lui y.

1.6 . Secvene escape Un caracter imprimabil poate fi reprezentat n program prin scrierea caracterului respectiv ntre apostrofuri: a, W, ;, * etc . Excepie fac caracterele cu semnificaie special n C. Acestea sunt: caracterele apostrof, cod ASCII 39, ghilimele, cod ASCII 34 i b ackslach, cod ASCII 92. Ele se scriu cu un backslash n fa: \, \ , \\. Reprezentarea caracterelor cu folosirea caracterului backslash, se numete secven escape. Secvenele escape se folosesc, n primul rnd, pentru reprezentare caracterelor ne imprimabile, caractere de control ce au codul ASCII ntre 0 i 31. Exemple: \n este caracterul newline, trecere la nceputul unei linii noi, codul 10, \t este caracterul tabulator orizontal, codul 9, \0 este caracterul nul, codul 0 .a.m.d.

Caracterele codului ASCII extins (coduri 128-255) se pot reprezenta numai prin secvene escape n felul urmtor: \ddd , unde ddd este codul ASCII al caracterului respectiv n sistemul de numeraie octal. Aceast construcie poate fi folosit pentru a reprezen ta orice caracter al setului ASCII. Orice caracter al setului ASCII poate fi reprezentat i prin secvena escape de forma \xhh , unde hh este codul ASCII n hexazecimal al caracterului respectiv.

1.7. Const ante Constanta este o dat constant. Valoarea ei nu poate fi modificat. Sunt constante numerice, alfanumerice i constante ir d e caractere. Orice constant are valoare i tip. i valoarea i tipul unei constante sunt deter minate de modul cum a fost scris ea n pro gram i nu mai pot fi schimbate. O constant numeric exprim o valoare numeric. Tipul acestei valori depinde de modul cum a fost scris valoarea. O constant ntreag, exprimat prin cifre, este de tipul int, dac ea este din domeniul de valori al tipului int i este de tipul long int, dac ea este din domeniul tipului long int, dar nu ncape n domeniul int. Astfel, constant ele 123, +45, -67 vor fi de tipul int, iar 123456789 va fi de tipul long int. n scrierea unei constante numerice pot fi n calitate de sufix o liter l sau L, o liter u sau U sau combinaia acestor lit ere l sau L i u sau U (mari sau mici, n orice ordin e). Litera l sau L determin tipul long, iar litera u sau U determin tipul unsigned. Astfel, constanta 3u este de tipul unsigned int, 3L este de tipul long int, 3ul este de tipul unsigned long int .a.m.d. Constanta ntreag, ce ncepe cu o cifr diferit de 0, este o constant ze cimal . Dac o constant ntreag ncepe cu 0x sau 0X, atunci ea este hexazecim al. Constanta ntreag ce ncepe cu 0 i nu este hexazecimal, este o constant octal. Astfel, constanta 123 este zecimal, 0123 este octal, iar 0x123 este hexazecimal. O constant numeric, ce nu este ntreag, cum sunt 12.34, 0.123456, -4.6 , este de tipul double. Dac o astfel de constant are sufixul f sau F, atunci ea va fi de tipul float: 12.34f, 0.12343456F, +4.6 f. Constantele reale cu sufixul l sau L vor avea tipul long double: 3.141592653l. Constantele reale pot fi reprezentate i n mod tiinific: 1.234e+1, 1.234E+1, 0.1e -7 etc. Ele vor fi de tipul double. O constant caracter reprezint un caracter. n C o constant caracter are tipul int . Ea se introduce n program prin scrierea caracterului imprimabil ntre apostrofuri: a, W, %, ; etc. Excepie fac caracterele cu semnificaie special apostrof cod 39, ghilimele cod 3 4, backslash, cod 92. Acestea se scriu precedate de un backslach n apostrofuri: \, \, \\ . Prin secvene escape se scriu i caracterele ne imprimabile, caractere de control, speciale, cu codurile de la 0 la 31. O constant caracter poate fi reprezentat n program prin secvena escape format din codul ASCII octal sau hexazecimal. Con stantele \110, \x41, A toate r eprezint litera A. O constant ir de caractere este un ir format din 0 sau mai multe caractere scrise n ghilimele : Limbajul de programare C. irule este pstrat n memorie ntr -un set de octei consecutivi. Fiecare caracter este pstrat pe un octet. Dup ultimul caracter al irului, pe un octet este scris automat caracterul nul, codul 0. Acest caracter semnific sfritul irului. O constant ir de caractere poate conine secvene escape: ASEM \nCSIE\tInformatica. Caracterul ghilimele i backslach se scriu ntr-o constant ir de caractere cu un backslash n fa: Cartea se numete \ Limbajul C\, Constanta \\0 reprezint caracterul nul.

O dat variabil devine dat constant, dac n declaraia datei variabile este folosit modificatorul const. Astf el, construcia int r=1234; definete variabila r de tip int i i atribuie valoarea iniial 1234. Aceast valoare poate fi schimbat ulterior. Iar cons trucia const int z=11; definete variabila z de tip int, i atribuie valoarea 11 i aceast valoare nu mai poate fi schimbat. O constant poate fi introdus n program cu un nume simbolic, prin directiva #define. Astfel, construcia #define pi 3.14159 2653 atribuie numele simbolic pi constantei 3.141592653. pi este o constant simbolic. La preprocesare, numele pi din program va fi substituit cu valoarea respectiv.

1.8. Variabile Variabila este o locaie de memorie la care se face referina printr -un identificator, nume. Ea pstreaz valoarea unei date ce poate fi modificat, adic a unei date variabile. Numele variabilei poate fi format din litere, cifre i caracterul _ (underline, subliniere). Primul caracter trebuie s fie o liter. C face o deosebire strict ntre literele mici i literele mari. Astfel, numele Abc i abc sunt nume diferite. Lungimea unui nume de variabil teoretic este nelimitat, dar n compilatoarele concrete este setat o lungime concret. Astfel, n BC 31 implicit sunt luate n seam primele 32 de caractere. Deosebim variabile simple i variabile compuse (structurate). Dac o dat nu Are legturi cu alte date, atunci ea se numete izolat. Numele unei date izolate reprezint o variabil simpl. Dac datele se grupeaz ntr -un anumit mod, atunci numele acestui grup de date reprezint o variabil compus sau structurat. Astfel sunt tablourile de date: vectori, matrice, structuri. Unei variabile i corespunde un tip de date. El determin tipul datelor ce vor fi pstrate n locaia de memorie referit de variabila respectiv. Dac tipul unei constante este determinat automat de compilator din reprezentarea constantei, pentru o variabil trebuie explicit de artat tipul ei. Acest lucru se face la declaraia variabilei. Anume prin declaraia variabilei se stabilete corespondena dintre numele variabilei i tipul ei. n C nu exist declaraii implicite. Orice variabil ce va fi folosit n program trebuie s fie declarat.

1.9 . Declar aia i iniializarea variabilelor simple Declaraia unei variabile simple specific tipul variabilei i numele ei. Orice declaraie se termin cu punct i vi rgul: int x; n rezultatul declaraiei se aloc n memorie un numr de octei necesari pentru a pstra o valoare de tipul specificat al variabilei. Locaia rezervat va fi ulterior referit prin numele variabilei i n ea va fi stocat o valoare de tipul respectiv. Se pot declara mai multe variabile concomitent: int x, y, z; O variabil nu poate fi declarat de mai multe ori. O variabil se poate iniializa la declaraie: int x=2010, y; Variabila x este iniializat cu valoarea 2010, iar variabila y rmne neiniializat, adic valoarea ei rmne nedeterminat pn la prima atribuire.

1.10. Tablouri de date Un tablou de date (array, masiv) este un set ordonat de date de acelai tip la care ne putem referi prin indeci. Setul respe ctiv de date are un tip comun i un nume comun pentru toate elementele. Fiecare element i are locul su bine stabilit n tablou i poate fi determinat prin unul sau mai muli indeci.

Dac locul fiecrui element n tablou este stabilit printr -un indice, atunci tabloul se numete unidimensional sau vector . Tabloul, n care locul fiecrui element este stabilit prin doi indeci, se numete bidimensional sau matrice . Dac locul fiecrui element n tablou este stabilit prin n indeci, atunci tabloul se numete n-dimensional . Tabloul este un mod de grupare a datelor de acelai tip ntr -o entitate. Un alt mod de grupare a datelor este structura. O structur este un set de date cu nume comun, dar elementele pot fi de tipuri diferite. Un tablou de date, ca i o structur, este o variabil compus (structurat). Ca i o variabil simpl, orice variabil tablou de date trebuie declarat pentru a o putea folosi n program.

1.11 . Declaraia i iniializarea tablourilor de date Declaraia unui tablou este analogic declaraiei unei variabile si mple. Se scrie tipul comun tuturor elementelor tabloului, numele tabloului i n paranteze ptrate pentru fiecare indice n parte se arat numrul de elemente dup fiecare dimensiune. Numr u l de elemente din parantezele ptrate, trebuie s fie o constant numeric sau o expresie constant, adic o expresie, valoarea creia poate fi determinat la compilarea programului. Astfel, declaraia int x[10]; declar vectorul cu numele x ce const din 10 elemente de tipul int. Aceasta nseamn c indicele ce determin poziia elementelor, poate avea valorile 0, 1, 2, ..., 9 . Pentru orice indice, cea mai mic valoare admis este 0. Pentru a accesa un element al vectorului, se scrie numele vectorului, dup care, n paranteze ptrate, se scrie indexul elementului. Astfel, x[0] este primul element, x*1+ este al doilea element .a.m.d. x*9+ este ultimul, al zecelea element. n rezultatul declaraiei, vor fi alocate 10 locaii consecutive pentru pstrarea valorilor acestor 10 elemente. Fiecare locaie const din numrul necesar de octei pentru a pstra o valoare de tipul tabloului, aici tipul int. n cazul nostru, vor fi alocai 2*10=20 octei. n C numele tabloului este un simbol (o variabil de tip pointer), care are ca valoare adresa primului element din tablou. La declar aia unui vector, pot fi iniializate toate sau unele elemente ale tabloului: int x[5]={1,2,1,-2,0}; Aici sunt iniializate toate cele 5 elemente ale vectorului x. Nu se pot scrie mai multe valori de iniializare dect numrul de elemente indicat n parantezele ptrate. double a[]={1.1 , 2.2, -3 .14}; Aici vectorul a are 3 elemente i toate sunt iniializate. n cazul cnd numrul de elemente n declaraie nu este indicat, numrul lor se determin dup numrul valorilor de iniializare. float b[5]={-1, -1.7 , 34}; Aici sunt iniializate numai primele 3 elemente ale vectorului. Celelalte rmn neiniializate, adic valoarea lor este nedeter minat pn la prima atribuire. O matrice se declar n felul urmtor: long a[2][3]; aici matricea a are 2 linii i 3 coloan e. Elementele unui tablou multidimensional sunt pstrate n memorie n ordine lexi cografic: cel mai repede i schimb valoarea indexul cel mai din dreapta. Pentru matrice, elementele sunt pstrate dup linii. n exemplul nostru, elementele sunt: a*0+*0+, a[0][1], a[0][2], a[1][0], a[1][1], a[1][2]. Matricea poate fi iniializat complet sau parial la declaraia ei: short a[2][2]={1 ,2,2,1}; Aici matricea a este iniializat complet. Ea poate fi iniializat i altfel, pe linii: short b[2][2]={ {1,2 }, {-1,-2} }; n cazul int c[2][3]={ 1,2,3}; sunt iniializate numai 3 elemente din cele 6 ale matricei c. int m[2][2][3][2]; este declaraia unui tablou 4 -dimensional. El const din 2*2*3*2=24 elemente de tip int i va fi pstrat n memorie pe 24*2=48 octei.

n mod analogic sunt declarate i iniializate tablourile, elementele crora sunt caractere. n C nu exist tipul de date ir de caractere. De aceea, un ir de caractere se reprezint ca un vector, elementele cruia sunt caractere. Astfel, char s[5 ]={ A, S, E, M, \ 0 }; declar vectorul s, care reprezint irul ASEM. n tabloul s, dup ultima liter a irului ASEM este inclus caracterul nul, care semnific sfritul irului, el nu intr n componena irului ASEM. Pentru orice ir de caractere, pstrat n memorie, dup ultimul caracter al irului trebuie s fie scris n memorie caracterul nul, care semnific sfritul irului respectiv. Pentru a simplifica iniializarea unui ir de caractere la declaraia lui, C permite construcii de felul: cha r u*5+=CSIE; Aici, caracterul nul va fi scris automat la sfritul irului. Important este faptul, ca pentru un ir format din n caractere, s fie alocai cel puin n+1 octei n memorie, pentru a putea scrie toate caracterele irului i, pe un octet suplimentar, caracterul nul, ce semnalizeaz sfritul irului.

1.12. Comentarii Comentariul este o remarc, un text explicativ la program. Comentariului ncepe cu caracterele /* i se termin cu */ . Un comentariu poate fi extins pe una sau mai multe linii: /* Acesta este un comentariu stil C estins pe o linie */ /* Aici avem un comentariu stil C extins pe 2 linii */

Un comentariu poate fi plasat n program oriunde, unde poate fi plasat un spaiu. La compilare comentariile sunt ignorate de compilator, sun t tratate ca un spaiu. Unele compilatoare C, inclusiv BC31, permit folosirea comentariilor stil C++. Un comentariu stil C++ este comentariu de o linie. El ncepe cu // i continu pn la sfritul liniei curente: int x=123; // x este o variabil de tipul int, iniializat la declaraie cu valoarea 123.

Anexa 1. Tipuri de date n C

Tabelul urmtor conine tipuri de date C i caracteristica lor. Tip Dimensiune n octei Ce reprezint Domeniu de valori Mod de reprezentare Codul ASCII al caracterului. Poate fi prelucrat ca un character sau ca ntreg cu semn. Codul ASCII al caracterului. Poate fi prelucrat ca un 9

char signed char

caractere

[-128, +127]

unsigned char

caractere

[0, +255]

character sau ca ntreg fr semn. short short int signed short signed short int unsigned short unsigned short int int signed int unsigned unsigned int long long int signed long signed long int unsigned long unsigned long int float

numere ntregi

[-32768, +32767]

Complement fa de 2

numere ntregi

[0, +65535]

ntreg fr semn

numere ntregi

[-32768, +32767]

Complement fa de 2

numere ntregi

[0, +65535]

ntreg fr semn

numere ntregi

[-2147483648, +2147483647]

Complement fa de 2

numere ntregi

[0, +4294967295]

ntreg fr semn

numere flotante numere flotante numere flotante

0, [10-39 , 10+39]

Virgul mobil precizie simpl Virgul mobil precizie dubl Virgul mobil precizie quadrupl

double

0, [10-308 , 10+308 ]

long double

10

0, [10-4392 , 10+4392 ]

Anexa 2. Se cvene escape Constant caracter \0 Valoare (Cod ASCII) 0 Denumire caracter NUL Utilizare semnalizeaz sfritul unui ir de caractere

\a

BEL

activare sunet

\b

BS

revenire cu un spaiu

10

\t

HT

tabulator orizontal

\n

10

newline

poziioneaz cursorul la nceputul liniei urmtoare

\v

11

VT

tabulator vertical

\f

12

FF

salt de pagin la imprimant

\r

13

CR

poziioneaz cursorul la nceputul liniei curente

34

ghilimea

include caracterul ghilimele n iruri de caractere

39

apostrof

include caracterul apostrof n iruri de caractere

\\

92

backslash

include caracterul backslach n iruri de caractere

Anexa 3. Codul ASCII standard i extins Codul ASCII (A merican Standard Code for Information Interchange) este un cod standard de reprezentare a caracterelor ca valori ntregi pe 7 bii. Acest cod a fost introdus pentru a se obine o compatibilitate ntre diferitele tipuri de echipamente folosite la procesarea datelor. Codul ASCII standard const din 128 de numer e ntregi (reprezentate pe 7 bii, cu valori ntre 0 i 127) atribuite unor caractere, numer e, semne de punctuaie, i celor mai uzuale caractere speciale. Codul ASCII extins const de asemenea din 128 numere ntr egi, cu valori ntre 128 i 255 (pentru reprezentarea lor folosindu -se toi cei 8 bii ai unui octet), care reprezint caractere suplimentare matematice, grafice, caractere speciale sau caractere din diverse limbi. n figurile urmtoare sunt date codurile ASCII (standard i extins) i caracterele corespunztoare. Caractere ASCII imprim abile Numerele de la 32 126 sunt asociate caracterelor pe care le gsii pe tastatur i care apar atunci cnd vizualizai sau imprimai un document. Numrul 127 reprezint comanda DELETE.

Zecimal Caracter 32 33 34 spaiu ! "

Zecimal Caracter 56 57 58 8 9 :

Zecimal Caracter 80 81 82 P Q R

Zecimal Caracter 104 105 106 h i j

11

35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55

# $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7

59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79

; < = > ? @ A B C D E F G H I J K L M N O

83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103

S T U V w X Y Z [ \ ] ^ _ ` a b c d e f g

107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127

k l m n o p q r s t u v w x y z { | } ~ DEL

Caracterele ASCII ne-imprim abile de control

12

Numerele de la 0 la 31 din tabela ASCII sunt atribuite caracterelor de control care se utilizeaz pentru a controla dispozitive periferice cum ar fi imprimantele. De exemplu, 12 reprezint funcia salt de pagin/pagin nou. Aceast comand indic unei imprimante s sar la nceputul paginii urmtoare. Zecimal Caracter Zecimal Caracter

nul

16

comutare a legturii de date

nceput de antet

17

caracter de control al dispozitivului 1

nceput de text

18

caracter de control al dispozitivului 2

sfrit de text

19

caracter de control al dispozitivului 3

sfrit de transmisie

20

caracter de control al dispozitivului 4

interogare

21

confirmare negativ

confirmare

22

pauz de sincronizare

semnal sonor

23

sfrit de bloc de transmisie

pas napoi

24

invalidare

tabulator orizontal

25

sfrit de suport

10

salt de linie/linie nou

26

caracter de substituie

11

tabulator vertical

27

caracter de evitare

12

salt de pagin/pagin nou

28

separator de fiier

13

retur de car

29

separator de grupuri

14

deselectare alternativ

30

separator de nregistrri

13

15

selectare alternativ

31

separator uniti

Caracterele ASCII imprim abile extinse Caracterele ASCII extinse corespund necesitilor de a avea mai multe caractere. Codul ASCII extins cuprinde cele 128 de caractere cuprinse n ASCII i adaug nc 128 de caractere suplimentare, totaliz nd 256. Chiar i cu aceste caractere suplimentare, multe limbi conin simboluri care nu pot fi condensate n 256 de caractere. De aceea, exist variante de ASCII care cuprind caractere i simboluri regionale. Zecimal Caracter Zecimal Caracter Zecimal Caracter Zecimal Caracter

128

160

192

224

129

161

193

225

130

162

194

226

131

163

195

227

132

164

196

228

133

165

197

229

134

166

198

230

135

167

199

231

136

168

200

232

137

169

201

233

138

170

202

234

139

171

203

235

14

140

172

204

236

141

173

205

237

142

174

206

238

143

175

207

239

144

176

208

240

145

177

209

241

146

178

210

242

147

179

211

243

148

180

212

244

149

181

213

245

150

182

214

246

151

183

215

247

152

184

216

248

153

185

217

249

154

186

218

250

155

187

219

251

156

188

220

252

15

157

189

221

253

158

190

222

254

159

191

223

255

Dincolo de ASCII O alt tabel de caractere, mai nou, este denumit Unicode (Unicode: Un standard de codare a caracterelor dezvoltat de Unicode Consortium. Utiliznd mai mult de un octet pentru reprezentarea fiecrui caracter, Unicode permite ca practic toate limbile s crise din lume s fie reprezentate utiliznd un set unic de caractere.). Deoarece Unicode este o tabel mult mai mare, ea poate reprezenta 65.536 de caractere n loc de cele 128 ale ASCII sau cele 256 ale ASCII extins. Aceast capacitate mai mare permite ca majoritatea c aracterelor diverselor limbi s fie cuprinse ntr -un singur set de caractere.

16