130 likes | 403 Views
Programare in limbajul C – Cursul 5 Instrucţiuni repetitive Prof. univ. dr. Constantin Popescu. Agenda. Instructiunea while Instructiunea for Instructiunea do-while Instructiunile break si continue. Instructiunea while (1). Sintaxa instructiunii while este:
E N D
Programare in limbajul C – Cursul 5Instrucţiuni repetitiveProf. univ. dr. Constantin Popescu
Agenda • Instructiunea while • Instructiunea for • Instructiunea do-while • Instructiunile break si continue
Instructiunea while (1) • Sintaxa instructiunii while este: while (expresie) instructiune • Efectul instructiunii while este: • Se evalueaza expresie • Daca expresie este falsa, while nu se executa (se trece la 5) • Daca expresie este adevarata (true), se executa instructiune • Se trece la pasul 1 • Se executa urmatoarea instructiune • Exemplu: tipărirea unui anumit număr de linii goale while(n > 0) { printf("\n"); n = n - 1; }
Instructiunea while (2) • Exemplul de mai jos dublează numărul 2 (2, 4, 8, 16, …) şi tipăreşte numărul rezultat atâta timp cât numerele sunt mai mici decât 1000: #include <stdio.h> int main() { int x = 2; while(x < 1000) { printf("%d\n", x); x = x * 2; } return 0; }
Instructiunea for (1) • Sintaxa instructiunii for este: for(expresie1 ; expresie2; expresie3) instructiune • expresie1, expresie2 siexpresie3 sunt expresii C. • Efectul instructiunii for este : • Se evalueazaexpresie1. In general este o instructiune de asiganre. • Se evalueazaexpresie2. In general este o expresie relationala. • Daca expresie2 este falsa, nu se executa for (se trece la 6.) • Daca expresie2 este adevarata, se executa instructiune • Se executa expresie3si se trece la pasul2. • Se executa urmatoarea instructiune
Instructiunea for (2) • O modalitate de a scrie o buclă infinită în C este: for(;;) • Observatie: • for ( ; expresie ; ) instructiune; este echivalent cu while (expresie ) instructiune; • for (exp1; exp2; exp3) instructiune; este echivalent cu exp1; while(exp2) {instructiune; exp3; }
Exemple: #include <stdio.h> int main () { int count,x,y; int ctd; for (count =1; count <=20; count++) printf ("%d\n", count); for (count = 100; count >0; count--) { x*=count; printf("count=%d x=%d\n", count,x); } for (count=0; count<1000; count += 5) y=y+count; /* initializare in afara lui for */ count = 1; for ( ; count < 1000; count++) printf("%d ", count); /* numai expresie2 in for */ count=1; ctd=1; for ( ; ctd; ) { printf("%d ", count); count++; ctd=count<1000; } for (x=0, y=100; x<y; x++, y--) { printf("%d %d\n", x,y); } return 0; } Instructiunea for (3)
Instructiunea for (4) • Instructiuni for imbricate: • De exemplu: #include <stdio.h> int main( ) { int linii=10, coloane=20; int r, c; for ( r=linii ; r>0 ; r--) { for (c = coloane; c>0; c--) printf ("X"); printf ("\n"); } return 0; }
Instructiunea do ... while (1) • Sintaxa instructiunii do-while este: do instructiunewhile (expresie); • Este asemanatoare cu instructiunea repeat until: • Intotdeauna se executa instructiune. • Efectul instructiunii do...while: • Se executa instructiune • Se evalueaza expresie • Daca expresie este true se trece la pasul 1 • Se executa urmatoarea instructiune
#include <stdio.h> int get_menu_choice (void); main() { int choice; do { choice = get_menu_choice (); printf ("You chose %d\n",choice); } while(choice!=4); return 0; } /* functia get_menu_choice */ int get_menu_choice (void) { int selection = 0; do { printf ("\n"); printf ("\n1 - Add a Record "); printf ("\n2 - Change a Record "); printf ("\n3 - Delete a Record "); printf ("\n4 - Quit "); printf ("\n\nEnter a selection: "); scanf ("%d", &selection); } while ( selection<1 || selection>4); return selection; } Instructiunea do ... while (2)
Instructiunile break si continue • Instructiunea break produce imediat iesirea din ciclu (bucla). • Este utila pentru iesirea din bucla in anumite conditii necontrolate de bucla. • De exemplu: for (x=0; x<10000; x++) { if ( x*x % 5==1) break; ... } • Executia buclei se termina daca x*x % 5 == 1 • Instructiunea continue produce imediat executarea urmatoarei iteratii a buclei: • De exemplu: for (x=0; x<10000; x++) { if (x*x % 5 == 1) continue; printf( "%d ", 1/ (x*x % 5 – 1) ); } • Nu se executa bucla atunci cind x*x % 5 == 1 (se evita impartirea la 0)
Iată un program pentru tipărirea numerelor prime de la 1 la 100: #include <stdio.h> #include <math.h> int main(){ int i, j; printf("%d\n", 2); for(i = 3; i <= 100; i = i + 1){ for(j = 2; j < i; j = j + 1){ if(i % j == 0) break; if(j > sqrt(i)) { printf("%d\n", i); break; } } } return 0; } Exemplu de utilizare for si break