4. Bibliografie 1. Costea Damian, Iniţiere în limbajul C, Editura Teora, Bucureşti, 1996. 2. Catrina Octavian, Cojocaru Iuliana, Calculatoare Personale. Turbo C++, Editura Teora, Bucureşti, 1993. 3. Păun Viorel, Algoritmică şi Programarea Calculatoarelor, Limbajul C++, Editura Universităţii din Piteşti, 2003 4. Negrescu Liviu, Limbajul C şi C++, Editura Albastră, Cluj Napoca, 2002. 5. Barbu Gh., Păun Viorel, Calculatoare Personale şi Programarea în limbajul C/C++.
Limbajul C
Crearea limbajului C a început prin anii ‘ 70 de către Dennis Ritchie pe baza unor preocupări anterioare ale altor specialşti.
În anul 1978, Brian Kernigan şi Denis Ritchie de la Bell Laboratories, New Jersey-SUA, publică “The C Programming Language” în care este descrisă o variantă clasică a limbajului C, folosind un sistem de operare UNIX.
În anul 1983, un comitet ANSI ( American National Standard Institute) a îceput redactarea limbajului C standard, finalizat în anul 1990.
Firma Borland a elaborat diverse versiuni Turbo C, Turbo C++ etc.
Limbajul C a avut un succes deosebit în rândul programatorilor.
Numărul mare de aplicaţii realizate în limbajul C confirmă faptul că la ora actuală este cel mai răspândit limbaj de programare.
Limbajul C s-a născut ca o alternativă pentru limbajele de asamblare, fiind utilizat pentru scrierea unor sisteme de operare, compilatoare, editoare de texte etc, dar, în acelaşi timp este un limbaj de nivel înalt, folosit pentru aplicaţii din cele mai diverse domenii.
În condiţiile perfecţionării tehnicii de programare pe obiecte ( Object Oriented Programming ), pe baza limbajului C, la sfârşitul anilor ‘80 a fost creat C++, ca o dezvoltare a acestuia.
Primul plus simbolizează completările aduse limbajului C, dăndu-i mai multă flexibilitate, eficienţă şi rigurozitate.
Al doilea plus se referă la acea dezvoltare care pune la dispoziţia programatorului tehnica programării orientată pe obiecte.
Al doilea plus se referă la acea dezvoltare care pune la dispoziţia programatorului tehnica programării orientată pe obiecte.
Programarea orientată spre obiecte se bazează pe noţiunea de obiect, care reprezintă un ansamblu format dintr-o structură de date şi metode ( funcţii ) de operare cu aceste date.
Limbajul C este conceput pe principiul programării structurate.
Iniţial, limbjul C a fost utilizat pentru a substitui limbajul de asamblare în aplicaţii mai ample, de la sisteme de operare şi compilatoare până la cele mai diverse aplicaţii.
De exemplu, sistemul de operare UNIX este scris aproape în totalitate în C.
Caracterul sau universal constă în îmbinarea elementelor de limbaj de nivel înalt, cu o serie de operaţii tipice limbajelor de asamblare.
Setul de instrucţiuni şi de date este similar cu cel din limbajul PASCAL.
Prin comparaţie, setul de instrucţiuni C este mult mai complet decât cel al limbajului Pascal.
Posibilităţile de lucru cu adrese de date şi de funcţii ( pointeri ), inclusiv efectuarea de operaţii aritmetice şi comparaţii, posibilitatea de a efectua operaţii la nivel de bit, apropie limbajul C de limbajele de asamblare. Acestea oferă posibilitatea utilizatorului să lucreze cu elementele hardware ale calculatorului.
Prezentarea limbajului C
Program : text ce specifică acţiuni care vor fi executate de un procesor.
Limbajul de programare are vocabular şi reguli de sintaxă.
- Vocabularul este format din unităţi lexicale : cele mai simple elemente cu semnificaţie lingvistică.
- Sintaxa : ansamblu de reguli pe baza cărora se combină elementele vocabularului( unităţile lexicale ) pentru a obţine fraze corecte ( instrucţiuni, secvenţe de instrucţiuni, declarare de variabile etc ).
Elementele vocabularului sunt alcătuite din caractere.
Orice caracter este reprezentat în calculator în codul ASCII ( American Standard Code for Information Interchange ), printr-un număr natural unic, cuprins între 0 şi 255 .
Caracterele sunt simboluri grupate în litere, cifre şi semne speciale, astfel :
- literele mari ale alfabetului englez cu codurile [65,90] A,B,...,X,Y,Z
- literele mici ale alfabetului englez cu codurile [97,122] a,b,...,x,y,z
- cifrele bazei zece, care au codurile in [ 48,57] 0,1,2,...,9
Unităţile lexicale ale limbajului C sunt : identificatori, cuvinte cheie, semne de punctuaţie şi semne speciale, comentarii, constante, operatori.
Identificator : succesiune de litere, cifre, liniute de subliniere, primul caracter din secvenţă fiind obligatoriu o literă sau o liniuţă de subliniere. Lungimea maximă a unui identificator poate fi de 32 caractere sau mai mare - depinde de calculator.
Identificator : succesiune de litere, cifre, liniute de subliniere, primul caracter din secvenţă fiind obligatoriu o literă sau o liniuţă de subliniere. Lungimea maximă a unui identificator poate fi de 32 caractere sau mai mare - depinde de calculator.
Identificatorii sunt nume date de utilizator constantelor, variabilelor, tipurilor de date, funcţiilor etc.
Identificatorii trebuie să difere de cuvintele cheie. În limbajul C se face deosebire între literele mari şi literele mici ale alfabetului. Ca identificatori se preferă folosirea unor nume care să sugereze semnificaţia mărimilor pe care le desemnează, contribuind la creşterea clarităţii programului.
Exemple : a, x1, program_1, t72, y34hv1, _ut2, 3ab, x..y, m&n .
Cuvinte cheie ( keywords ) cuvinte rezervate care au semnificaţia predefinită, fiind utilizate pentru declaraţii de tipuri de date, instrucţiuni etc. În general, nu se redefinesc pentru a li se da o altă utilizare.
Exemple : auto, break, char, do, else, for, goto, int, long, main, printf, return, short, typedef, union, while etc.
Constante : construcţii ale căror valori nu se schimbă in timpul execuţiei unui program. Ele pot fi numere, caractere, şiruri de caractere.
Comentariile : explicaţii in limbaj obişnuit, contribuind la mărirea clarităţii programului. Comentariile sunt semnificative numai pentru utilizator, fiind ignorate de compilator. Un comentariu începe cu / * si se termină cu */ .
Tipuri de date, constante, variabile
Tipul unei date determină :
- spaţiul de memorie ocupat
- modul de reprezentare internă
- domeniul de valori
- timpul de viaţă asociat datei
- operatori utilizaţi şi restricţii în folosirea acestora
Limbajul C lucrează cu valori care pot fi stocate în constante sau variabile.
Constantele stochează valori nemodificabile pe parcursul execuţiei programului.
Variabilele sunt mărimi care îşi modifică valoarea în timpul execuţiei programului.
Fiecărei variabile i se asociază un nume ( un identificator ) prin intermediul căruia putem referi sau modifica valoarea variabilei respective, şi un tip.
Corespondenţa între numele şi tipul variabilei se realizează printr-o declaraţie. Toate variabilele utilizate într-un program trebuie declarate înaintea utilizării lor.
O declaraţie de variabilă are următoarea sintaxă :
< tip > < lista de variabile >
unde lista conţine unul sau mai multe nume de variabile despărţite prin virgule.
Tipurile de date utilizate de limbajul C se clasifică astfel
Tipurile de date utilizate de limbajul C se clasifică astfel
Tipurile fundamentale se mai numesc scalare, predefinite, simple sau de bază.
Tipuri fundamentale :
Tipuri fundamentale :
Tipul caracter, desemnat prin cuvântul cheie char, i se alocă o zonă de memorie de un octet.
Exemplu : char c1, c_2, litera;
Tipul întreg, desemnat prin cuvântul cheie short, ceea ce înseamnă o reprezentare în memorie pe 2 octeţi sau int, ceea ce înseamnă o reprezentare în memorie pe 4 octeţi.
Exemplu : short n;
int k, l;
Tipul real, desemnat prin cuvântul cheie float, alocă o zonă de memorie de 4 octeţi.
Exemplu : float x1, y;
Tipul real dublă precizie, desemnat prin cuvântul cheie double i se alocă 8 octeţi sau cuvântul cheie long double şi i se alocă 10 octeţi.
Exemplu : double t;
long double u, v;
Observaţie. Domeniul de valori poate fi modificat utilizând modificatorii de tip, astfel :
signed, unsined, short ş long se pot aplica tipului int ; signed si unsigned se pot aplica tipului char.
Tipuri derivate
Tipul tablou, reprezintă un tip stucturat de date ce ocupă o zonă continuă de memorie. Se utilizează pentru declararea variabilelor cu indici.
tip nume [dim1][dim2]…[dimn];
unde tip este unul fundamental, nume este un identificator care defineşte numele tabloului, iar dim1, dim2, …, dimn sunt numere întregi pozitive care exprimă dimensiunea tabloului.
Exemplu : int v [10];
float a[10][10];
Tipul pointer se utilizează pentru a păstra adresa unei date în loc de a memora data însăşi.
Exemplu : tip *p;
Declaraţia int *x defineşte un pointer la o variabilă de tip întreg.
Structura conţine o mulţime de componente ( câmpuri ) de acelaşi tip sau de tipuri diferite, care se utilizează împreună. Structura are un nume, iar fiecare componentă are, de asemenea, un nume.
struct nume
{
tip_1 comp_1;
tip_2 comp_2;
…………………
tip_n comp_n;
}
Exemplu:
struct student
{
int nota1, nota2;
float media;
}
Tipul enumerare se utilizează pentru a descrie o listă de valori întregi.
enum nume{ id_1, id_2, …,id_n };
Identificatorilor id_1, id_2, …, id_n compilatorul C le atribuie valori ]ncep\nd cu 0, 1, …, n-1.