INSTRUCŢIUNILE LIMBAJULUI C (2) Instrucţiuni repetitive Instrucţiunea while Instrucţiunea while are formatul: while(expresie) Expresie DA Instrucţiune NU Instrucţiunea while produce în primul rând evaluarea pentru expresia din paranteze. Dacă valoarea obţinută este adevărat (este diferită de zero), atunci se execută prelucrarea dată de instrucţiune, după care se revine la evaluarea expresiei din paranteze. Dacă la evaluarea expresiei se obţine valoarea zero (false), atunci se trece la execuţia instrucţiunii care urmează după instrucţiune. Instrucţiunea while se mai numeşte instrucţiune cu test iniţial şi poate să nu se execute niciodată, dacă la prima evaluare a expresiei rezultatul este zero, iar în caz contrar ea 1
se poate executa de 1, 2, ori până când rezultatul evaluării este zero. instrucţiune este o instrucţiune simplă sau compusă. Corpul instrucţiunii while poate fi o altă instrucţiune while sau să fie o instrucţiune compusă care să conţină instrucţiuni while. In acest caz se spune ca instrucţiunile while respective sunt imbricate. Instrucţiunea while este o instrucţiune ciclică şi defineşte o structură repetitivă condiţionată anterior. Exemple : 1. Să se scrie un program care determină şi afişează suma primelor 10 numere naturale. int i=1, suma=0; while (i<=10) suma = suma + i; i = i + 1; printf("suma primelor 10 numere este %d\n",suma); 2. Calculul puterilor lui 2 2
int i = 0, putere = 1; while (++i <= 10) printf("%6d", putere *=2); printf("\n"); Rezultatul afişat de acest program este: 2 4 8 16 32 64 128 256 512 1024 Instrucţiunea for Instrucţiunea for, ca şi instrucţiunea while, se utilizează pentru a realiza o structură repetitivă condiţionată anterior. Formatul ei este: for(expresiel;expresie2;expresie3) unde: expresie1, expresie2 şi expresie3 - sunt expresii; iar instrucţiune poate fi formată din una sau mai multe instrucţiuni, care se execută repetat. 3
Expresie1 Expresie3 Expresie2 NU DA Instrucţiune Expresia expresie1 se numeşte partea de iniţializare a ciclului for, iar expresie3 este partea de reiniţializare a ciclului. Expresia expresie2 este condiţia de continuare a ciclului for şi ea joacă acelaşi rol cu expresia din ciclul while. Instrucţiunea for se execută astfel: 1. Se execută secvenţa de iniţializare definită de expresiel. 2. Se evaluează expresia expresie2. Dacă expresie2 are o valoare diferită de zero (este adevărată), atunci se execută instrucţiunea care formează corpul ciclului. Altfel (expresia are valoarea zero adică fals) se termină execuţia instrucţiunii for şi se trece la instrucţiunea următoare. 3. După executarea corpului ciclului se execută secvenţa de reiniţializare definită de expresie3 şi se reia execuţia de la pasul 2. Instrucţiunea din corpul ciclului for poate să nu se execută niciodată, dacă expresie2 are valoarea zero chiar de la început. Expresiile din antetul lui for pot fi şi vide. Caracterele punct şi virgulă sunt obligatorii. 4
Instrucţiunea for: for(expr1;expr2;expr3) este echivalentă cu următoarea secvenţă care utilizează instrucţiunea while: expr1; while(expr2) instrucţiune expr3; Obs. Această echivalare nu are loc într-un singur caz şi anume atunci când, în corpul instrucţiunii se utilizează instrucţiunea continue. Reciproc, orice instrucţiune while poate fi scrisă cu ajutorul unei instrucţiuni for în care expr1 şi expr3 sunt vide. Astfel, instrucţiunea while de mai jos: while(expr) este echivalentă cu instrucţiunea for: for(;expr;) O instrucţiune for de forma for(;;) instrucţiune ; este validă şi ea este echivalentă cu instrucţiunea while următoare: while(1) instrucţiune ; Un astfel de ciclu se poate termina prin alte mijloace decât cele obişnuite, cum ar fi instrucţiunea de revenire dintr-o funcţie, un salt la o etichetă. 5
Exemple: 1. Să se determine şi să se afişeze toate numerele prime cuprinse între două numere date, citite de la tastatură. int min,max,i,j,ind; printf("val min="); scanf("%d",&min); printf("val max="); scanf("%d",&max); while(min>max) printf("val min="); scanf("%d",&min); printf("val max="); scanf("%d",&max); for(i=min;i<=max;i++) ind=0; for(j=2;j<i;j++) if (i%j==0) ind=1; if (ind==0) printf("%d\t",i); printf("\n"); 2. Să se scrie un program care citeşte întregul n, calculează şi afişează pe n!. 6
int n,i; double f; printf( valoarea lui n: ); scanf( %d,&n) ; for( f=1.0, i=2; i <= n; i++) f*=i; printf( n =%d\tn!= %g\n, n, f); Folosind instrucţiunea while, acest program devine:. f=1.0; i=2; while (i <= n) f*=i; i++; printf( n =%d\tn!= %g\n, n, f); Instrucţiunea do-while Instrucţiunea do-while realizează structura ciclică condiţionată posterior. Ea are formatul: do while(expresie); 7
Instrucţiune Expresie DA NU Instrucţiunea do-while se execută în felul următor: 1. Se execută instrucţiune. 2. Se evaluează expresie; dacă aceasta are o valoare diferită de zero, atunci se revine la punctul 1, pentru a executa din nou altfel (expresia are valoarea zero) se trece în secvenţă, adică la execuţia instrucţiunii următoare instrucţiunii do-while. Această instrucțiune se mai numeşte şi instrucţiune repetitivă cu test final. Instrucţiunea do-while este echivalentă cu secvenţa: while(expresie) În cazul instrucţiunii do-while corpul ciclului se execută cel puţin o dată, spre deosebire de cazul instrucţiunilor while şi for, când este posibil să nu se execute niciodată. Exemplu: Să se scrie un program care calculează şi afişează suma unor numere întregi diferite de 0. Introducerea datelor se face pâna la tastarea caracterului 0. 8
int i=0, suma=0; do suma += i; printf("numar= ");scanf("%d", &i); while (i!= 0); printf("suma = %d\n", suma); Bibliografie: V. Iordan- Algoritmi si programare in C, Ed.Eurostampa, 2007 9