Cuprins
- Cap 1 INTRODUCERE ÎN LIMBAJUL C 4
- 1.1 Scurt istoric 4
- 1.2 Forma unui program C 8
- 1.3 Compilarea unui program C 9
- Cap 2 Tipuri, operatori, expresii 11
- 2.1. Tipuri simple 11
- 2.2. Literali 12
- 2.3. Declararea unei variabile şi a unei constante 13
- 2.4. Operatori 14
- 2.4.1. Operatori aritmetici 15
- 2.4.2. Operatorii relaţionali (de comparaţie) 15
- 2.4.3. Operatori logici 16
- 2.4.4. Operatori la nivel de bit 16
- 2.4.5. Operatorul de asignare 17
- 2.4.6. Operatorul condiţional 17
- 2.4.7. Operatorul virgulă 18
- 2.4.8. Precedenţa operatorilor 18
- Cap 3 FUNCTII 20
- 3.1. Definirea unei funcţii 20
- 3.2. Returnarea unui apel 21
- 3.3. Funcţii cu un număr variabil de parametri 21
- 3.4. Sfârşitul execuţiei unui program 21
- 3.5. Apelul şi transmiterea parametrilor 22
- 3.6. Funcţia principală main 23
- Cap 4 FUNCŢII DE INTRARE IEŞIRE 25
- 4.1.Fluxuri şi fişiere 25
- Semnificaţia 27
- 4.2. Funcţii de intrare/ieşire pentru caractere 28
- 4.3. Scrierea cu format 29
- 4.5. Citirea cu format 33
- Cap 5 INSTRUCŢIUNI DE CONTROL 36
- 5.1. Instrucţiunea if 37
- 5.3. Instrucţiunea while 39
- 5.4. Instruc]iunea do ... while 40
- 5.5. Instrucţiunea for 40
- 5.6. Instrucţiunea break 42
- 5.7. Instrucţiunea continue 43
- 5.8. Instrucţiunea go to 43
- 5.9. Exerciţii 44
- 1. Calculul factorialului. 44
- 2. Conversie 44
- 3. Numărarea biţilor 1 într-un număr 44
- 4. Prezentare de date 44
- 5.10. Soluţii la exerciţii 44
- 1. Calculul factorialului 44
- 2. Conversie 45
- 3. Numărarea biţilor 1 într-un număr 46
- 4. Prezentare de date 46
- Cap 6 TABLOURI ŞI POINTERI 48
- 6.1. Pointeri 48
- 6.2. Tablouri cu o dimensiune 49
- 6.2.1. Referenţierea unui element al tabloului 49
- 6.2.2. Iniţializarea unui tablou 49
- 6.3. Relaţia între pointeri şi tablouri 51
- 6.4. Operaţii aritmetice cu pointeri 51
- 6.5. Şiruri de caractere 52
- 6.6. Tablouri cu mai multe dimensiuni 52
- 6.7. Tablouri de pointeri 54
- 6.8. Pointeri şi alocarea memoriei 55
- 6.9. Operatorul “sizeof” 55
- 6.10. Pointeri către funcţii 56
- 6.11. Exerciţii 57
- 6.12. Soluţii 58
- Cap 7 CONSTRUIREA DE NOI TIPURI 60
- 7.1. Redenumirea unui tip 60
- 7.2. Tipul structură 61
- 7.3. Accesul şi iniţializarea câmpurilor unei structuri 62
- 7.4. Structuri autoreferenţiate 62
- 7.5. Tipul enumerare 64
- 7.6. Uniuni 64
- 7.7. Exerciţii 66
- 7.8. Soluţii 66
- Cap 8 GESTIUNEA MEMORIEI 71
- 8.1. Precizarea unui mecanism de memorare 71
- 8.2. Gestiunea automată a memoriei 72
- 8.3. Gestionarea “register” a memoriei 72
- 8.4. Gestionarea statică a memoriei 73
- 8.5. Variabile globale 73
- 8.6. Declararea variabilelor externe 73
- 8.7. Gestiunea dinamică a memoriei 74
- 8.8. Exerciţii 74
- 8.9. Soluţii 75
- Cap 9 CONVERSIA DE TIP 78
- 9.1. Mecanisme de conversie 78
- 9.1.1 Conversia la asignare 79
- 9.1.2 Evaluarea expresiilor aritmetice 79
- 9.1.3. Evaluarea expresiilor logice 80
- 9.1.4 Conversii explicite 80
- 9.1.5 Conversie de pointeri. Pointerul universal 81
- Cap 10 PREPROCESORUL 82
- 10.1 Directive preprocesor 82
- 10.1.1 Constante simbolice. Directiva #define 83
- 10.1.2 Includerea fişierelor 83
- 10.1.3 Compilare condiţionată 84
- 10.1.4 Directiva #error 84
- 10.2 Macroinstruţiuni 85
- 10.2.1 Macroinstrucţiuni predefinite 85
- 10.2.2 Macroinstrucţiuni tip funcţie 85
- Cap 11 EXERCIŢII 87
- BIBLIOGRAFIE 89
- ANEXA 90
- Biblioteca standard C 90
- Codul ASCII 93
Extras din curs
Cap 1 INTRODUCERE ÎN LIMBAJUL C
1.1 Scurt istoric
1.2 Forma unui program C
1.3 Compilarea unui program C
1.1 Scurt istoric
Strămoşii limbajului C sunt limbajele de programare CPL, BCPL, B şi Algol 68. CPL a fost dezvoltat la Universităţile Cambridge şi London în anii 1960-1963. BCPL a fost proiectat de Martin Richards în 1967 şi face parte din categoria “low-level languages”, sau “systems programming languages”. În anii ’60, la Bell Laboratories în USA, Ken Thomson a început proiectarea sistemului de operare Unix. Primul limbaj de nivel înalt implementat sub acest sistem de operare a fost limbajul B, un limbaj bazat pe BCPL care a fost proiectat de asemenea de către Ken Thompson în 1970. Asemănarea cu BCPL a fost mai degrabă semantică; sintaxa este total diferită. Proiectarea limbajului B a fost influienţată de limitele maşinii pe care a fost implementat: un PDP-7 cu capacitatea 4K ( cuvinte de 18 biţi).
Limbajele BCPL şi B sunt limbaje de nivel scăzut faţă de limbajul Pascal şi nici unul din ele nu este tipizat: toate datele sunt considerate cuvinte maşină încât, exemple simple de programe duc la complicaţii nebănuite. În una din implementările BCPL-ului, operanzii flotanţi din expresii trebuiau precedaţi de punct; restul operanzilor erau consideraţi întregi.
Problemele create în jurul limbajelor BCPL şi B au dus la dezvoltarea unui nou limbaj, bazat pe B, care la început s-a numit NB dar numele său a fost stabilit C. Numele “C”, considerat la început a proveni de la Cambridge, este oficial din “Combined” dar neoficial se consideră a fi iniţiala pronumelui lui Cristopher Strachey, cel care a condus echipa ce a proiectat CPL-ul. Limbajul a fost proiectat şi implementat de către Dennis Ritchie la Bell Laboratories în 1972. În mare parte ( construcţiile for şi switch, tratarea pointerilor etc.) limbajul a fost influienţat şi de Algol 68. Genealogia limbajului C este prezentată în Figura 1.1.
Ritchie a lucrat pe un calculator DEC PDP-11 sub sistemul de operare Unix. Din acest motiv varianta clasică a limbajului C a fost asociată sistemului de operare Unix - versiunea 5 şi multă vreme a constituit un standard (neoficial de altfel) al limbajului şKeR 78ţ.
Odată cu creştere popularităţii calculatoarelor personale, au apărut numeroase alte implementări ale limbajului C şi astfel a crescut şi popularitatea acestuia. Un fapt cu totul inedit a fost acela că, mare parte din implementările C -ului s-au dovedit de un mare grad de compatibilitate: un program scris pentru una din variante putea fi compilat cu succes folosind o altă variantă. Se înţelege că au existat şi neconcordanţe în multitudinea de “dialecte” ale limbajului. Pentru eliminarea acestora în 1983 a fost creată o comisie care să stabilească un standard al acestui limbaj. Standardul ANSI ( American National Standard Institute) a fost redactat abia în decembrie 1989 şi a fost pus la dispoziţia celor interesaţi la începutul lui 1990. Firma Borland a folosit acest standard în faza de proiect şi a realizat implementările Turbo C care se bucură de un succes remarcabil. De altfel, în prezent , toate compilatoarele C sunt compatibile cu standardul ANSI C; unele din acestea au adăugate o serie de facilităţi sau extensii proprii care nu împiedică compilarea unui program standard.
•FORTRAN I (1957)
•FORTRAN II (1958)
•ALGOL 60 (1960)
•CPL (1963)
•ALGOL 68 (1968)
•BCPL (1967)
•B (1970)
•C (1972)
•C++ (1984)
Figura 1.1.
Limbajul C este privit ca un limbaj de nivel mediu întrucât combină cele mai reuşite elemente ale limbajelor de nivel înalt ( Pas-cal, Fortran, Algol, Modula, Ada) cu gradul de control şi flexibilitatea oferite de către limbajul de asamblare. C permite manevrarea biţilor, a octeţilor şi a adreselor de memorie, adică a elementelor de bază în funcţionarea unui calculator. În ciuda acestui fapt , programele scrise în C au un grad mare de portabilitate: uşurinţa de a adapta programele scrise pentru o anumită categorie de calculatoare sau sisteme de operare la alte calculatoare sau sisteme de operare.
Limbajul C are structuri de control adecvate precum şi facilităţi de structurare a datelor care îl fac să fie folosit într-o diversitate de domenii. Are de asemenea o mulţime bogată de operatori care-i dau un înalt grad de expresivitate. Unul din motivele pentru care limbajul C este în acelaşi timp agreat de mare parte din programatori şi dezagreat de altă mare parte din programatori, este lipsa totală a verificării tipului (type checking). De exemplu, o variabilă de un tip scalar oarecare poate apare în aceeaşi expresie cu o variabilă de un alt tip scalar. Cei care agrează limbajul C îi apreciază flexibilitatea sa, cei care nu-l agrează îl consideră un limbaj lipsit de siguranţă.
Ceea ce este sigur, este că datorită faptului că face parte din sistemul de operare Unix, limbajul a căpătat o mare popularitate în lumea academică şi nu numai. Compilatoarele oferite împreună cu sistemul Unix sunt relativ ieftine (uneori chiar gratuite) şi pot fi folosite pe o diversitate de maşini.
O nouă versiune a limbajului C, numită C++, a apărut în 1984. Originea acestui limbaj şSTR 94ţ trebuie căutată în proiectul care a început în Aprilie 1979 la “Computing Research Center of Bell Laboratories” în Murray Hill, New Jersey, USA, proiect ce trebuia să realizeze distribuirea nucleului UNIX într-o reţea de computere conectate LAN. Pentru realizarea acestui proiect, Bjarne Stroustrup a realizat în Octombrie 1979 un preprocesor, numit Cpre, care a adăugat la limbajul C conceptul de clasă folosit pentru prima dată de limbajul Simula ( dezvoltat în anii 1962-1967 de norvegienii Kristen Nyagaard şi Ole-Johan Dahl). În martie 1980 preprocesorul îmbunătăţit era implementat pe 16 sisteme iar limbajul acceptat de acesta a fost numit “C cu Clase”. Motivele pentru care a fost ales limbajul C (în faţa altor limbaje ale vremii: Modula-2, Ada, Smalltalk, Mesa, Clu) pentru acest proiect sunt expuse chiar de creatorul noului limbaj:
Preview document
Conținut arhivă zip
- Programare II - Limbajul C.doc