Implemantari C Structura unui program C n n














- Slides: 14
Implemantari C++
Structura unui program C++ n n n 1. directive de copilare 2. functia principala main() 3. declaratii de variabile 4. instructiuni Exemplu: #include<iostream. h> main() { int a; a=3; cout<<a*a; }
1. Tipuri de date • char reprezinta caractere ASCII; retine 8 biti (1 octet) • int reprezinta numereıntregiın intervalul [32767, 32767]; // retine 16 biti • long int reprezinta numere ıntregi dın intervalul [-2147483647, 2147483647]; retine 32 biti. • float reprezinta numereın virgula mobila, cu o precizie de cel putin 7 zecimale exacte; retine 32 biti. • double reprezinta numereın virgula mobila, cu o precizie de cel putin 15 zecimale exacte; retinen 64 biti.
Operatori Asociativitate () ++ (postfix) -- (postfix) de la stanga la dreapta + (unar) - (unar) ++ (prefix) -- (prefix) de la dreapta la stanga */% de la stanga la dreapta +- de la stanga la dreapta < <= > >= de la stanga la dreapta == != de la stanga la dreapta && de la stanga la dreapta || de la stanga la dreapta ? : de la dreapta la stanga = += -= *= /= etc de la dreapta la stanga , (operatorul virgula) de la stanga la dreapta Operatorul ! este unar, spre deosebire de toti operatori (relationali, de egalitate si logici) care sunt binari. In C/C++ reprezinta "false" orice expresie egala cu zero, si "true" orice expresie diferita de zero.
3. Evaluare rapida (short-circuit) Pentru expresiile ce contin && sau ||, evaluarea are loc cand s-a stabilit deja valoarea expresiei, eventual fara parcurgerea intregii expresii. -presupunem ca "expr 1" se evalueaza la 0 (false). Atunci expresia expr 1 && expr 2 se va evalua la 0, fara a se mai face evaluarea expresiei "expr 2". -daca "expr 1" se evalueaza la 1 (true), atunci expresia expr 1 || expr 2 se va evalua la true fara a se mai evalua expresia "expr 2". Uneori se mai spune ca operatorii && si || sunt “lazy “
4. Instructiunea compusa O instructiune compusa este un sir de declaratii si instructiuni delimitate de acolade. Ceea ce acoladele delimiteaza se numeste "bloc". O instructiune compusa este ea insasi o instructiune. Exemplu: { a = 1; { b = 2; c = 3; } }
5. Instructiunile "if" si "if-else“ Forma generala a instructiunii "if" este: if (expresie)instructiune if (expresie) instructiune 1 else instructiune 2 Semantica intuitiva este de asemenea clara. Daca valoarea expresie este diferita de zero, atunci se executa instructiune 1 si "se sare" peste instructiune 2. Daca valoarea expresiei este zero, atunci "se sare" instructiune 1, si se executa instructiune 2.
6. Instructiunea "while“ "While", "for" si "do" sunt cele trei instructiuni repetitive din limbajul C. Consideram urmatorul format general al instructiunii "while" (iteratia sau bucla "while"). while (expresie) instructiune_urmatoare Mai intai se evalueaza expresie. Daca aceasta nu este zero (deci este "true"), atunci se executa instructiunea, si control trece la inceputul buclei "while". Astfel, corpul buclei se executa de cate ori expresie se evalueaza la "true". Terminarea buclei are loc cand expresie ia valoarea zero (adica "false"). In acest punct, controlul se paseaza catre "instructiune_urmatoare".
7. Instructiunea "for“ Se foloseste pentru descrierea structurilor iterative (repetitive) cu nr cunoscut de pasi. for (expresie 1; expresie 2; expresie 3) instructiune_urmatoare este semantic echivalenta cu: expresie 1; while (expresie 2) { instructiune; expresie 3; } instructiune_urmatoare; Deci, se va evalua expresie 1. Apoi, se evalueaza expresie 2. Daca aceasta nu este zero ("true"), atunci se executa instructiune, se evalueaza expresie 3, si controlul buclei se "paseaza" la inceputul buclei (cu deosebirea ca nu se mai evalueaza expresie 1). De obicei, expresie 2 este o expresie logica care controleaza bucla. Acest proces continua pana cand expresie 2 este 0 (false), punct in care se plaseaza controlul catre instructiune_urmatoare
8. Operatorul ", " are cea mai mica prioritate dintre toti operatorii din C. Este un operator binar ce are ca operanzi drept expresii si se asociaza de la stanga la dreapta. Intr-o expresie de forma: expresie 1 , expresie 2 se evalueaza mai intai expresie 1, apoi expresie 2. Expresia ", " intoarce valoarea si tipul operandului din dreapta. Exemplu: Presupunem ca a, b sunt de tip int. Atunci expresia ", " a = 0, b = 1 intoarce valoarea 1 de tipul int. Operatorul ", " este deseori folosit in instructiunea "for". Exemplu: Exemplul de mai jos calculeaza factorialul numarului n (reluare). for (factorial = 1, i = 1; i <= n; i++) factorial *= i; Exemplu: Revenim asupra unui exemplu precedent (suma primelor N numere naturale) for (suma = 0, i = 1; i <= n; ++i) suma += i; se poate scrie, echivalent, in: for (suma = 0, i = 1; i <= n; suma += i, ++i);
9. Instructiunea "do“ Instructiunea "do" poate fi considerata o varianta a instructiunii "while". Deosebirea consta in faptul ca pentru instructiunea "while" testul se face la inceputul ciclului, iar pentru "do" la sfarsit. Consideram constructia de forma: do instructiune while (expresie); instructiune_urmatoare La inceput se executa instructiune, apoi se evalueaza expresie. Daca valoarea lui expresie este diferita de 0 ("true"), atunci controlul se paseaza la inceputul instructiunii "do", si procesul se repeta. Daca expresie se evalueaza la 0 (false), atunci controlul se paseaza la instructiune_urmatoare. Exemplu: Suma unor numere intregi diferite de 0 suma = i = 0; do { suma += i; cin>>i; } while (i > 0);
10 Operatorul conditional Operatorul "? : " este mai putin obisnuit deoarece este ternar (cu trei argumente). Forma generala este: expresie 1 ? expresie 2 : expresie 3 Mai intai, se evalueaza expresie 1. Daca aceasta este diferita de 0 (true), atunci se evalueaza expresie 2, si aceasta va fi valoarea returnata de intreaga expresie conditionala. Daca expresie 1 este 0 (false), atunci se evalueaza expresie 3, si aceasta va fi valoarea intregii expresii conditionale. Exemplu: Instructiunea if (y < z) x = y; else x = z; este echivalenta cu x = (y < z) ? y : z; Operatorul ? : are aceeasi prioritate cu operatorul de asignare si se asociaza de la dreapta la stanga.
Stilul de redactare al programelor Un stil bun de scriere a codului este esential pentru arta programarii. Aceasta faciliteaza citirea, scrierea si intretinerea programelor. Un stil bun foloseste: 1. spatii goale si comentarii, astfel incat codul este usor de citit si de inteles; 2. utilizarea indentarii este cruciala, care indica cu precizie structurile de contr De exemplu, in constructia while (expresie) instructiune indentarea instructiunii indica ca executia acesteia este sub controlul iteratiei w 3. alegerea de nume sugestive pentru variabile; 4. corespondenta dintre acolade. De exemplu, urmatorul program este scris in s "Bell Labs industrial programming style" (#, {, }, m pe prima coloana). main() { } Observatii: 1. Programatorii incepatori uneori cred ca vor "sparge" piata cu stilul lor propriu redactare a programelor. Atentie ! Utilizati strategia care este deja in uz.
1. 9 Erori de programare frecvente 1. neinchiderea sirului cu ghilimele: cand compilatorul intalneste ghilimeaua stanga, atunci incepe sa colecteze toate caracterele care urmeaza spre a forma un sir de caractere, pana intalneste ghilimeaua dreapta. Daca aceasta nu exista, atunci compilatorul da mesajul de eroare, de tipul: Unterminated string or character constant 2. scrierea gresita a numelui variabilelor; 3. nedeclararea lor. In general, compilatorul da un mesaj de eroare potrivit, alteori din cauza interpretarii separate, nu.














