INSTRUCŢIUNEA WHILE
La scrierea programelor apare necesitatea ca o secventa de instructiuni sa se execute de mai multe ori. Atunci când testul pentru repetarea secventei se face înainte de executia propriu-zisa o secventa de instructiuni se poate utiliza instructiunea while, tocmai de aceea numita si instructiunea repe 949f55j titiva ( de buclare) cu test initial.
Din punct de vdere sintactic formatul instructiunii este:
while (expresie)
instructiune
unde instructiune constituie corpul buclei while si este de obicei un bloc, dar poate fi o singura instructiune sau chiar nimic (instructiune vida), iar expresie este o expresie de tip scalar (aritmetic sau pointer).
Coprul buclei while se executa cât timp (while - cât timp ) expresia este diferita de zero (adevarata) si deci el poate sa nu se execute niciodata daca la prima evaluare expresia este nula. De asemenea, while poate defini si o bucla infinita, de exemplu:
while (1)
instructiune
urmând ca iesirea din ciclare sa se faca din corpul instructiunii folosind: break, return sau exit ( ).
Urmariti programul de mai jos care detrmina c.m.m.d.c. a doua numere întregi prin algoritmul lui Euclid.
Exemplu 3.5.1.
# include "stdio.h"
main ( )
int m,n,r;
while (1)
printf (" C.M.D.C. între : ");
scanf ("% d, % d", &m, &n);
printf ("este");
if (m = = 0 n = = 0 ) break;
while (r = m%n)
m = ;
n = r;
printf ("%d \n",n);
Prima instructiune while defineste o bucla infinita, iesirea din bucla facându-se cu break-ul de la instructiunea if (vezi instructiunea break la 3.8) atunci când cel putin unul din cele doua numere introduse prin apelul functiei scanf este nul, acesta oferindu-ne posibilitatea determinarii c.m.m.d.c. a oricâtor perechi de întregi.
Al doilea while este inclus în primul si corpul acestuia executa cât timp restul împartirii lui m la n este diferit de zero, adica cât timp evaluând expresia r= m%n obtinem o valoare nenula.
Programul care urmeaza descompune un numar natural (unsigned long) în factori primi. Pentru fiecare factor prim gasit se afiseaza pe câte o linie pe ecran, factorul prim respectiv si exponentul la care apare el în descompunerea în factori primi.
Exemplu 3.5.2.
# include "stdio.h"
main ( )
unsigned long n, i, j;
printf ("În Desc. lui în factori primi \n");
printf ("n="); scanf ("% 1d", &n);
i = 2;
while (n >1)
j = 0;
while (n% i = = 0)
j + +;
n = n/i;
if (j)
printf("%1u **%1u \n", i, j );
i + +;
Prima bucla while se executa cât timp n>1 si în cadrul acesteia se verifica daca i este divizor a lui n, iar în caz afirmativ j se incrementeaza cu 1 ori de câte ori înca mai este divizor a lui n/i, operatie efectuata în a doua bucla while inclusa în prima.
|