Sunteți pe pagina 1din 12

Clasa a IX-a

Structuri de control

Cap.5 Structuri de control n limbajul C


Prin structuri de control nelegem instruciunile limbajului i funciile specifice menite s controleze modul de execuie al programelor. Limbajul C a fost prevzut cu instruciuni menite s permit realizarea simpl a structurilor proprii programrii structurate. Structura secvenial se realizeaz cu ajutorul instruciunii compuse structura alternativ cu ajutorul instruciunii if structura repetitiv condiionat anterior prin intermediul instruciunilor while i for structura selectiv cu ajutorul instruciunii switch iar structura repetitiv condiionat posterior cu ajutorul instruciunii do-while. Limbajul C are i alte instruciuni care reprezint elemente de baz n construirea structurilor amintite mai sus. !stfel de instruciuni sunt " instruciunea expresie i instruciunea vid. !lte instruciuni prezente n limbaj asigur o flexibilitate mai mare n programare. !cestea sunt instruciunile" return break continue i goto .

5.

!nstruc"iunea vid

Se reduce la punct i virgul ##$. %a nu are nici un efect. &nstruciunea vid se utilizeaz n construcii care cer prezena unei instruciuni dar nu trebuie s se execute nimic n punctul respectiv. !stfel de situaii apar frecvent n cadrul structurii alternative i repetitive aa cum se va vedea n continuare.

5.$ !nstruc"iunea expresie


Se obine scriind punct i virgul dup o expresie. 'eci instruciunea expresie are sintaxa " expresie # (n cazul n care expresia din compunerea unei instruciuni expresie este o expresie de atribuire se spune c instruciunea respectiv este o instruciune de atribuire. )n alt caz frecvent utilizat este acela c*nd expresia este un operand ce reprezint apelul unei funcii. (n acest caz instruciunea expresie este o instruciune de apel a funciei respective. Exemplul 1: int x; x=10; %ste o instruciune de atribuire variabilei x i se atribuie valoarea +,. Exemplul 2: double y; y=y+4; sau y+=4; %ste o instruciune de atribuire care mrete valoarea lui % cu -. Exemplul 3: cout<<char(c-'A'+'a'); // transform litera mic n litera mare coresp. i o afieaz Exemplul 4: double a; a++; %ste o instruciune expresie care mrete valoarea lui a cu unu. Exemplul 5: double a; ++a; !re acelai efect ca i instruciunea expresie din exemplul precedent. Observa ie " .u orice expresie urmat de punct i virgul formeaz o instruciune expresie efectiv. 'e exemplu construcia a# dei este o instruciune expresie ea nu are nici un efect. Exemplul ! : S se scrie un program care citete valorile variabilelor a& b& c& d& x de tip double i afieaz valoarea expresiei 'a(x$)b(x)c*+'a(x$)b(x)d* dac numitorul este diferit de , i , n caz contrar. #include<iostrea !h" #oid ain() $ double a%b%c%d%x; double y%&%u; cout<<'a='; cin""a; cout<<'b='; cin""b; cout<<'c='; cin""c; cout<<'d='; cin""d; cout<<'x='; cin""x; y=a(x(x; &=b(x; u=y(x+&+d; cout<<'ex)='; u*cout<<(y+&+c)+u,cout<<u<<endl; -

Clasa a IX-a

Structuri de control

5., !nstruc"iunea compus


&nstruciunea compus este o succesiune de instruciuni incluse ntre acolade succesiune care poate fi precedat i de declaraii " declara"ii instruc"iuni . 'ac declaraiile sunt prezente atunci ele definesc variabile care sunt definite at*t timp c*t controlul programului se afl la o instruciune din compunerea instruciunii compuse. Exemplu " Presupunem c ntr/un anumit punct al programului este necesar s se permute valorile variabilelor ntregi a i b. !ceasta se poate realiza astfel " $ int t; t=a;a=b;b=t; 0ariabila t este definit din momentul n care controlul programului ajunge la prima instruciune din instruciunea compus #t/a#$. 'up execuia ultimei instruciuni a instruciunii compuse variabila t nu mai este definit #nu mai ocup memorie$. &nstruciunea compus se utilizeaz unde este necesar prezena unei instruciuni dar procesul de calcul din punctul respectiv este mai complex i se exprim prin mai multe instruciuni. (n acest caz instruciunile respective se includ ntre acolade pentru a forma o instruciune compus. !cest procedeu de a forma o instruciune compus din mai multe instruciuni se utilizeaz frecvent n construirea structurilor alternative i ciclice.

5.0 !nstruc"iunea if
!re urmtoarele formate " format1 " if'expresie* instruc"iune# format2" if'expresie* instruc"iune # else instruc"iune$# La nt*lnirea instruciunii if nt*i se evalueaz expresia din paranteze. !poi n cazul formatului + dac expresia are valoarea diferit de zero #adic true$ se execut instruc"iune altfel se trece n secven la instruciunea urmtoare instruciunii if. (n cazul formatului 1 dac expresia are o valoare diferit de zero atunci se execut instruc"iune i apoi se trece n secven la instruciunea aflat dup instruc"iune$ altfel #condiia este zero adic false$ se execut instruc"iune$. (n mod normal n ambele formate dup execuia instruciunii if se ajunge la instruciunea urmtoare ei. Cu toate acestea este posibil i o alt situaie c*nd instruciunile din compunerea lui if definesc ele nsele un alt mod de continuare a execuiei programului. 'eoarece o instruciune compus este considerat ca fiind un caz particular de instruciune rezult c instruciunile din compunerea lui if pot fi instruciuni compuse. 'e asemenea instruciunile respective pot fi c2iar instruciuni if. (n acest caz se spune c instruciunile if sunt imbricate. Exemplul 1: Se d funcia " %/,x$)$x- 1 pentru x21 i %/5x) 1 pentru x3/1. S se scrie un program care citete valoarea lui x i afieaz valoarea lui %. #include<iostrea !h" #oid ain() $ .loat x%y; cin""x; i.(x"0) y=/(x(x+0(x-10; else y=1(x+10; cout<<2x=2<<x<<'3t'<<'y='<<y<<endl; Exemplul 2: S se scrie un program care citete valoarea lui x calculeaz i afieaz valoarea lui % definit ca mai jos " %/0x,)5x$-$x) & pentru x31 %/ 11 & pentru x/1 %/$x$)4x& pentru x21 #include<iostrea !h" #oid ain() $ .loat x%y%a; cout<<'x=';

Clasa a IX-a

Structuri de control

Exemplul 3: S se scrie un program care citete valorile variabilelor reale a i b calculeaz rdcina ecuaiei " ax)b/1 i afieaz rezultatul. #include<iostrea !h" #oid ain() $ double a%b; cout<<'a='; cin""a; cout<<'b='; cin""b; i.(a) cout<<2x='<<-b+a<<endl; else i.(4b) cout<<2ecuatie nedeter inata3n2; else cout<<2ecuatia nu are solutie3n2; Programul de mai sus conine o instruciune if imbricat. Pentru a mri claritatea programelor se obinuiete s se decaleze spre dreapta #cu un tabulator$ instruciunile din compunerea instruciunii if. (n acest program s/a realizat test relativ la valorile tastate pentru a i b. Exemplul 4: S se scrie un program care citete coeficienii a&b&c&d&e&f ai unui sistem de dou ecuaii lineare cu dou necunoscute determin i afieaz soluia acestuia atunci c*nd are o soluie unic. #include<iostrea !h" #oid ain() $ double a%b%c%d%e%.%x%y%det1%det0%det; cout<<'a='; cin""a; cout<<'b='; cin""b; cout<<'c='; cin""c; cout<<'d='; cin""d; cout<<'e='; cin""e; cout<<'.='; cin"".; i.(4(det=a(e-b(d)) cout<<2siste ul nu este deter inat3n2; else $ det1=c(e-b(.; det0=a(.-c(d; x=det1+det; y=det0+det; cout<<2x='<<x<<'3ty='<<y<<endl; -

cin""x; a=x(x; i.(x<0)y=4(x(a+1(a-0(x+1; else i.(4x) y=100; else y=0(a+5(x-1; cout<<2x=2<<x<<'3ty='<<y<<endl;

5.5 5unc"ia standard exit


3uncia exit are prototipul " void exit'int cod*# i el se afl n fiierele 2eader stdlib.h i process.h. La apelul acestei funcii au loc urmtoarele aciuni" se videaz zonele tampon #bufferele$ ale fiierele desc2ise n scriere se nc2id toate fiierele desc2ise se ntrerupe execuia programului Parametrul acestei funcii definete starea programului la momentul apelului. 0aloarea , definete o terminare normal a execuiei programului iar o valoare diferit de , semnaleaz prezena unei erori #terminarea anormal a execuiei programului$. (n concluzie putem apela funcia exit pentru a termina execuia unui program indiferent de faptul c acesta se termin normal sau din cauza unei erori. Exemplu " S se scrie un program care citete valorile variabilelor a&b&c calculeaz i afieaz rdcinile ecuaiei de gradul 1 " ax$)bx)c/1. #include<iostrea !h" #include< ath!h"

Clasa a IX-a

Structuri de control

#include<stdlib!h" #oid ain() $ double a%b%c%d%delta; cout<<2coe.icientul lui x )atrat , 2; cin""a; cout<<2coe.icientul lui x , 2; cin""b; cout<<2ter enul liber , 2; cin""c; i.(4a 66 4b 66 4c) $ cout<<2ecuatie nedeter inata3n2; exit(0); /* terminare fr erori*/ i.(4a664b) $ cout<<2ecuatia nu are solutie3n2; exit(0); i.(4a) $ cout<<2ecuatie de 7radul 13n2; cout<<2x=2<<-c+b<<endl; exit(0); delta=b(b-4(a(c; d=0(a; i.(delta"0) $ cout<<2ecuatia are doua radacini reale si distincte3n2; delta=s8rt(delta); cout<<2x1='<<(-b+delta)+d<<'3tx0=2<<(-b-delta)+d)<<endl; exit(0); i.(4delta) $ cout<<2ecuatia are radacina dubla3n2; cout<<2x=2<<-b+d<<endl; exit(0); cout<<2radacini co )lexe3n2; delta=s8rt(-delta)+d; d=-b+d; cout<<'x1='<<d<<'+i'<<delta<<endl; cout<<'x0='<<d<<'-i'<<delta<<endl; -

5.6 !nstruc"iunea while


!re sintaxa " while'expresie* instruc"iune# Prima parte din acest format constituie antetul instruciunii while iar instruc"iune este corpul ei. La nt*lnirea acestei instruciuni nt*i se evalueaz expresia din paranteze. 'ac ea are valoarea true #este diferit de ,$ atunci se execut instruc"iune. !poi se revine la punctul n care se evalueaz din nou valoarea expresiei din paranteze. (n felul acesta corpul ciclului se execut at*t timp c*t expresia din antetul ei este diferit de ,. (n momentul n care expresie are valoarea , se trece la instruciunea urmtoare instruciunii while. Corpul instruciunii while poate s nu se execute niciodat. (ntr/adevr dac expresie are valoarea , de la nceput atunci se trece la instruciunea urmtoare instruciunii while fr a executa niciodat corpul instruciunii respective. Corpul instruciunii while este o singur instruciune care poate fi compus. (n felul acesta avem posibilitatea s executm repetat mai multe instruciuni grupate ntr/o instruciune compus. Corpul instruciunii while poate fi o alt instruciune while sau s fie o instruciune compus care s conin instruciunea while. (n acest caz se spune c instruciunile while respective sunt imbricate. &nstruciunile din corpul unei instruciuni while pot s defineasc un alt mod de execuie a instruciunii while dec*t cel indicat mai sus. !stfel se poate realiza terminarea execuiei instruciunii while fr a se mai ajunge la evaluarea expresiei din antetul ei. 'e exemplu dac n corpul unei instruciuni while se apeleaz funcia exit atunci se va termina execuia ciclului while deoarece se ntrerupe c2iar execuia programului. 'espre instruciunea while se spune c este o instruciune ciclic condiionat anterior.

Clasa a IX-a

Structuri de control

Exemplul 1: S se scrie un program care calculeaz i afieaz valoarea polinomului p'x*/,x$-7x- 1 pentru x/ &$& 8.& 1. #include<iostrea !h" #oid ain() $ int x; x=1; 9hile(x<=10) $ cout<<2x='<<x<<'3t)(x)='<</(x(x-:(x-10<<endl; x++; Exemplul 2: S se scrie un program care citete un ntreg n 91&,1: calculeaz i afieaz pe n;. !vem" n; / ($(,(8..(n pentru n 21 i 1;/ prin definiie. #include<iostrea !h" #include<stdlib!h" #oid ain() $ int n%i; unsi7ned lon7 .; //n! este o valoare foarte mare de aceea folosim long int cout<<2n=2; cin""n; i.(n<0 ;; n"/0) $ cout<<2n nu a)artine inter#alului <0%/0=3n2; exit(1); .=1; i=0; 9hile(i<=n) .(=i++; cout<<2n4=2<<.<<endl; -

5.7 !nstruc"iunea for


&nstruciunea for ca i instruciunea while se utilizeaz pentru a realiza o structur repetitiv condiionat anterior. !re sintaxa " for'exp # exp$ # exp,* 56 antet 65 instruc"iune# 56 corpul ciclului65 unde exp exp$ i exp, sunt expresii. %xpresia exp se numete partea de ini"iali<are a ciclului for iar exp, este partea de reini"iali<are a lui. %xpresia exp$ este condiia de terminare a ciclului for i ea joac acelai rol cu expresia din ciclul while. &nstruciunea for se execut astfel " Se execut secvena de iniializare definit de exp Se evalueaz exp$. 'ac are o valoare diferit de , #este true$ atunci se execut instruciunea care formeaz corpul ciclului. !ltfel #expresia are valoarea , adic false$ se termin execuia instruciunii for i se trece la instruciunea urmtoare. 'up executarea corpului ciclului se execut secvena de reiniializare definit de exp,. !poi se reia execuia de la pasul 1 . Ca i n cazul instruciunii while instruciunea din corpul ciclului for nu se execut niciodat dac exp$ are valoarea , c2iar de la nceput. %xpresiile din antetul lui for pot fi i vide. Caracterele punct i virgul vor fi ntotdeauna prezente. (n general instruciunea for poate fi scris cu ajutorul unei secvene n care se utilizeaz instruciunea while astfel " exp # while'exp$* - instruc"iune# exp,# . !ceast ec2ivalare nu are loc ntr/un singur caz i anume atunci c*nd n corpul instruciunii se utilizeaz instruciunea continue. 7eciproc orice instruciune while poate fi scris cu ajutorul unei instruciuni for n care exp i exp, sunt vide. !stfel instruciunea while'exp* instruc"iune# este ec2ivalent cu instruciunea for'# exp #* instruc"iune# . 8 instruciune for de forma for'# #* instruc"iune# este valid i este ec2ivalent cu instruciunea " while' * instruc"iune#. )n astfel de ciclu se poate termina prin alte mijloace dec*t cel obinuit cum ar fi instruciunea de revenire

Clasa a IX-a

Structuri de control

dintr/o funcie un salt la o etic2et etc. 'in cele de mai sus rezult ec2ivalena celor dou cicluri while i for. Se recomand folosirea instruciunii for n ciclurile n care sunt prezente prile de iniializare i reiniializare aa numitele cicluri cu pas. Exemplul 1" S se scrie un program care citete ntregul n din intervalul 91&,1: calculeaz i afieaz pe n; . #include<iostrea !h" #include<stdlib!h" #oid ain() $ int n%i; unsi7ned lon7 .; //n! este o valoare foarte mare de aceea folosim long int cout<<2n=2; cin""n; i.(n<0 ;; n"/0) $ cout<<2n nu a)artine inter#alului <0%/0=3n2; exit(1); .or(.=1%i=0;i<=n;i++) .(=i; cout<<2n4=2<<.<<endl; Exemplul 2: )rmtorul program continu s cicleze p*n c*nd este tastat litera =. (n loc s verifice variabila de control a ciclului instruciunea for verific dac de la tastatur a fost introdus caracterul =. #include<iostrea !h" #oid ain() $ int i; char ch; ch=>a>; .or(i=1;ch4=>8>;i++) $ cout<<')as,'<<i<<endl; cin""ch; (n acest caz testul de condiie care controleaz ciclul nu are nimic n comun cu variabila de control a ciclului. 0ariabila ch a primit o valoare iniial pentru a ne asigura c ea nu conine accidental c2iar litera = n momentul n care programul ncepe execuia.

5.4 !nstruc"iunea do-while


7ealizeaz structura ciclic condiionat posterior. !ceast instruciune poate fi realizat cu ajutorul celorlalte instruciuni definite p*n n prezent. Cu toate acestea prezena ei n limbaj mrete flexibilitatea n programare. Sintaxa ei este " do instruc"iune 56 corpul ciclului 65 while'expresie*# &nstruciunea se execut n felul urmtor " se execut instruc"iune se evalueaz expresie: dac aceasta are o valoare diferit de , #true$ atunci se revine la execuia instruciunii altfel #expresia are valoarea ,$ se trece n secven la instruciunea urmtoare instruciunii do-while. Se observ c n cazul acestei instruciuni nt*i se execut instruc"iune i apoi se testeaz condiia de repetare a execuiei ei. &nstruciunea do-while este ec2ivalent cu secvena " instructiune# while'expresie* instruc"iune# (n cazul instruciunii do-while corpul ciclului se execut cel puin o dat spre deosebire de cazul instruciunii while i for c*nd este posibil s nu execute niciodat. Exemplul 1: S se scrie un program care afieaz factorii primi ai unui numr natural introdus de la tastatur. #include<iostrea !h" #oid ain() $ unsi7ned n%d=0%e; cout<<2?ntroduceti nu arul , 2; cin""n; cout<<2@esc! in .actori )ri i este ,3n2; do $ e=0; //puterea factorului d 9hile(4(nAd)) $ n=n+d; e++;

Clasa a IX-a

Structuri de control

<

Exemplul 2: Ciclul do este folositor n special c*nd programul ateapt s se produc un anumit eveniment. 'e exemplu urmtorul program ateapt ca utilizatorul s tasteze litera =. Programul conine o singur apelare a funciei getche'*. #include<iostrea !h" #oid ain() $ char ch; do$ cin""ch; - 9hile(ch4=>8>); cout<<'3n a 7asit )e 8'; -

. i.(e) cout<<d<<'B'<<e<<'3t'); //afiseaza factorul i puterea lui d=d+((d==0) *1,0); //dac d=2,se trece la d=3, altfel se trece la //urmtorul factor impar cu d+2 -9hile(n"1);

5.> !nstruc"iunea continue


!ceast instruciune se poate utiliza numai n corpul unui ciclu. %a permite abandonarea iteraiei curente. Sintaxa ei este " continue#. %fectul instruciunii este urmtorul " a) n corpul instruciunilor while i do-while La nt*lnirea instruciunii continue se abandoneaz iteraia curent i se trece la evaluarea expresiei care stabilete continuarea sau terminarea ciclului respectiv #expresia inclus ntre paranteze rotunde i care urmeaz dup cuv*ntul c2eie while$. b) n corpul instruciunii for La nt*lnirea instruciunii continue se abandoneaz iteraia curent i se trece la execuia pasului de reiniializare. &nstruciunea continue nu este obligatorie. Prezena ei mrete flexibilitatea n scrierea programelor C. %a conduce adesea la diminuarea nivelurilor de imbricare ale instruciunilor if utilizate n corpul ciclurilor. Exemplul 1: &nstruciunea continue este opus instruciunii break. %a foreaz ca urmtoarea iteraie a ciclului s aib loc trec*nd peste instruciunile dintre ea i testul de condiie. 'e exemplu urmtorul program nu va afia nimic niciodat" #include<iostrea !h" #oid ain() $ int x; .or(x=0;x<100;x++) $ continue; cout<<x; &nstruciunea continue este folosit rareori nu pentru c folosirea ei nu ar fi o practic bun ci pentru c aplicaiile n care ar putea fi utilizat sunt mai rare. Exemplul 2: 8 bun utilizare a lui continue este aceea de a porni din nou o secven de instruciuni atunci c*nd apare o eroare. 'e exemplu programul urmtor calculeaz suma total a numerelor introduse de utilizator. (nainte de a aduna o valoare la suma total el verific dac numrul a fost introdus corect. 'ac numrul nu a fost introdus corect pornete din nou ciclul folosind instruciunea continue. #include<iostrea !h" #oid ain() $ int i% total; char ch; total=0; do$ cout<<'nu arul ur ator(0 )entru sto)), C; cin""i; cout<<'Dste '<<i<<' corect * (E+F) C; cin""ch; cout<<endl;

Clasa a IX-a

Structuri de control i.(ch==>F>) continue; //numr incorect,se reia citirea total+=i; //numr corect,se adaug la sum -9hile(i); //citirea se nc eie la i=! cout<<'Gotalul este,'<<total<<endl;

>

5. 1 !nstruc"iunea break
%ste nrudit cu instruciunea continue. %a are formatul " break# Poate fi utilizat n corpul unui ciclu. (n acest caz la nt*lnirea instruciunii break se termin execuia ciclului n al crui corp este inclus i execuia continu cu instruciunea urmtoare instruciunii ciclice respective. !ceast instruciune la fel ca i instruciunea continue mrete flexibilitatea la scrierea programelor n limbajele C i C== . Exemplul1: S se scrie un program care citete dou numere naturale i pozitive calculeaz i afieaz cel mai mare divizor comun al lor. #include<iostrea !h" #oid ain() $ lon7 %n; lon7 a%b; lon7 r; do $ cout<<2)ri ul nu ar=2;cin"" ; i.( "0) breaH; //valoarea citit este corect,ieim din ciclul de //citire cout<<2nu s-a tastat un intre7 )o&iti#3n2; //valoare incorect, se reia citirea - 9hile(1); do $ cout<<2al doilea nu ar=2;cin""n; i.(n"0) breaH; //valoarea citit este corect,ieim din ciclul de //citire cout<<2nu s-a tastat un intre7 )o&iti#3n2; //valoare incorect, se reia citirea - 9hile(1); a= ; b=n; do // algoritmul lui "uclid $ r=aAb; i.(r) $ a=b; b=r;-9hile(r); cout<<'c dc )entru '<< <<' si '<<n<<' este '<<b<<endl;

Exemplul 2: &nstruciunea break permite ieirea dintr/un ciclu din oricare punct din interiorul su. C*nd instruciunea break este nt*lnit n interiorul unui ciclu acesta se va termina imediat iar controlul va trece la instruciunea ce urmeaz dup ciclu. 'e exemplu programul urmtor afieaz numai numerele de la + la +,. #include<iostrea !h" #oid ain() $ int i; .or(i=1;i<100;i++) $ cout<<i; i.(i==10) breaH; ++o)rirea .ortaIJ a ciclului la i=10 Exemplul 3: &nstruciunea break poate fi folosit cu oricare din cele trei cicluri ale limbajului. (ntr/un ciclu pot exista oric*te instruciuni break. (n general se recomand ca instruciunea break s fie utilizat pentru scopuri speciale i nu ca ieire normal din ciclu. &nstruciunea break este utilizat n cicluri n care o condiie special poate cauza oprirea imediat a ciclului. Spre exemplu n programul urmtor apsarea unei taste poate opri execuia programului"

Clasa a IX-a

Structuri de control

#include<iostrea !h" #oid ain() $ int i; char ch; .or(i=1;i<10000;i++) i.(4(iAK)) $ cout<<i<<' Lai doriti * (E+F), C; cin""ch; i.(ch==>F>) breaH; //oprirea ciclului la cererea utilizatorului cout<<endl; -

5.

!nstruc"iunea switch

Permite realizarea structurii selective. !ceasta este o generalizare a structurii alternative i a fost introdus de ?oare. %a poate fi realizat prin instruciuni if imbricate. )tilizarea instruciunii switch face ca programul s fie mai clar dec*t dac se utilizeaz varianta cu instruciuni if imbricate. Structura selectiv n forma n care a fost ea acceptat de ctre adepii programrii structurate se realizeaz n limbajul C cu ajutorul urmtorui format al instruciunii switch " switch'expresie* - case c ? sir@ break# case c$? sir@$ break# 888. case cn? sir@n break# default? sir . unde " c &c$&8&cn sunt constante integrale sir@ &sir@$&8..sir@n&sir sunt succesiuni de instruciuni &nstruciunea switch cu formatul de mai sus se execut astfel " Se evalueaz expresia dintre parantezele rotunde Se compar pe r*nd valoarea expresiei cu valorile constantelor c &c$&8&cn. 'ac valoarea expresiei coincide cu una din constante s zicem cu ci atunci se execut secvena sir@i apoi se trece la instruciunea urmtoare instruciunii switch adic la instruciunea aflat dup acolada nc2is care termin instruciunea. 'ac valoarea respectiv nu coincide cu nici una din constantele c &c$&8.cn atunci se execut succesiunea de instruciuni sir din default i apoi se trece la instruciunea urmtoare instruciunii switch. @enionm c este posibil s nu se ajung la instruciunea urmtoare instruciunii switch n cazul n care succesiunea de instruciuni selectat pentru execuie # sir@i sau sir$ va defini ea nsi un alt mod de continuare a execuiei programului #de exemplu execuia instruciunii de revenire dintr/o funcie saltul la o instruciune etic2etat etc.$. Succesiunile sir@ &sir@$&8..&sir@n se numesc alternativele instruciunii switch. !lternativa sir este opional deci ntr/o instruciune switch secvena default ? sir poate fi absent. (n acest caz dac valoarea expresiei nu coincide cu valoarea nici uneia dintre constantele c &c$&.. ..cn atunci instruciunea switch nu are nici un efect i se trece la execuia instruciunii urmtoare. &nstruciunea switch de mai sus este ec2ivalent cu urmtoarea instruciune if imbricat " if'expresie//c * sir@ else if'expresie//c$* sir@$ else if'expresie//c,* sir@, else if

Clasa a IX-a 8888..

Structuri de control

+,

else if'expresie//cn* sir@n else sir# &nstruciunea break de la sf*ritul fiecrei alternative permite ca la nt*lnirea ei s se treac la execuia instruciunii urmtoare instruciunii switch. Se obinuiete s se spun c instruciunea break permite ieirea din instruciunea switch. &nstruciunea break poate fi utilizat numai n corpurile ciclurilor i n alternativele instruciunii switch. Prezena ei la sf*ritul fiecrei alternative nu este obligatorie. (n cazul n care instruciunea break este absent la sf*ritul unei alternative dup execuia succesiunii de instruciuni din compunerea alternativei respective se trece la execuia succesiunii de instruciuni din alternativa urmtoare a aceleai instruciuni switch. !dic dac o instruciune switch are formatul " switch'expresie* - case c ? sir@ case c$? sir@$ . atunci ea este ec2ivalent cu urmtoarea secven " if'expresie//c * - sir@ sir@$ .else if'expresie//c$* sir@$# Exemplul 1: )rmtorul program recunoate numerele + 1 4 i - i afieaz numele cifrei introduse. #include<iostrea !h" #oid ain() $ int i; cout<<'?ntroduceti un intre7 intre 1 si 4 , C; cin""i; s9itch(i) $ case 1 , cout<<'unu'; breaH; case 0 , cout<<'doi'; breaH; case / , cout<<'trei'; breaH; case 4 , cout<<')atru'; breaH; de.ault, cout<<'nu ar necunoscut'; Exemplul 2: &nstruciunile switch sunt deseori folosite pentru a procesa comenzi meniu. 'e exemplu programul urmtor" Ainclude3iostream.h2 #oid ain() $ .loat a%b; char ch; cout<<'@oriti ,3n'; cout<<'Adunare%Mcadere%Lulti)licare% ? )artire*3n'; /* validarea op#iunii introduse$se repeta ciclul de citire a optiunii pana cand utlizatorul va introduce un raspuns valid */ do$ cout<<'?ntroduceti )ri a litera , C; cin""ch; cout<<endl; -9hile(ch4=>A> 66 ch4=>M> 66 ch4=>L> 66 ch4=>?>); cout<<'?ntroduceti )ri ul nu ar , C; cin""a;

Clasa a IX-a

Structuri de control cout<<'?ntroduceti al doilea nu ar , C; cin""b; //procesarea comenzii de meniu s9itch(ch) $ case NA>, cout<<a+b; breaH; case NM>, cout<<a-b; breaH; case NL>, cout<<a(b; breaH; case N?>, i.(b) cout<<a+b; breaH; -

++

Exemplul 3: &nstruciunile asociate unui case pot s lipseasc. !ceasta permite ca dou sau mai multe case s execute aceleai instruciuni fr s fie nevoie de duplicarea lor. &at un program care clasific literele n vocale i consoane" #include<iostrea !h" #oid ain() $ char ch; cout<<'?ntroduceti o litera , C; cin""ch; s9itch(ch) $ case Na>, case Ne>, case Ni>, case No>, case Nu>, cout<<'3n este o #ocala'; breaH; de.ault , cout<<'3n este o consoana'; -

5. $ Beader-ul ct%pe.h
?eader/ul ct%pe.h este specializat pentru prelucrarea datelor de tip caracter. %l conine numai funcii i macrouri #secvene de cod asemntoare funciilor la apelul crora se face substituia numelui funciei cu codul asociat$ de verificare i prelucrare a caracterelor. !stfel pentru clasificarea caracterelor avem urmtoarele macrodefiniii " Cacro de verificare isalnum'c* isalpha'c* isdigit'c* iscntrl'c* isascii'c* isprint'c* isgraph'c* islower'c* isupper'c* ispunct'c* isspace'c* isxdigit'c* 5unc"ii conversie caractere int toupper'int ch* Daloarea cEnd caracterul este ? o liter sau cifr o liter o cifr n baza +, un caracter de control un caracter valid !SC&& un caracter tipribil un caracter tipribil mai puin spaiul o liter mic o liter mare un caracter de punctuaie spaiu tab C7 L3 tab vertical form/feed o cifr n baza +; 5ace conversia unui caracter ? n liter mare. Spre deosebire de macroul @toupper care modific orice caracter dac caracterul ch nu este liter mic funcia l ntoarce nemodificat n liter mic. Spre deosebire de macroul @tolower care modific orice caracter funcia ntoarce caracter nemodificat dac nu este liter mare.

int tolower'int ch*

Clasa a IX-a

Structuri de control

+1

5. , 5unc"ii matematice u<uale


3unciile matematice sunt definite n 2eader/ul math.h. 'e obicei marea lor majoritate sunt definite pentru valori reale de tip double put*nd fi convertite fr probleme n alte tipuri. Sintaxa func"iei int abs'int x*# long int labs'long int x*# double fabs'double x*# double s=rt'double x*# double pow'double x& double %*# double pow 1'int p*# double exp'double x*# double log'double x*# double log 1'double x*# double ldexp'double x& int exp*# double fmod'double x& double %*# double pol%'double x& int n& double coef9:*# double floor'double x*# double ceil'double x*# Daloarea returnat @acrouri care ntorc modulul unui numr ntreg de format normal ntreg de format lung i real de tip double. Calculeaz rdcina ptrat 3uncia putere x%. (n cazul n care x este , i % este negativ sau dac x este negativ i % nu este ntreg se semnaleaz eroare. 3uncia putere c*nd baza este +,. 3uncia ex . 3uncia logaritm natural ln'x* . Logaritmul n baza +,. Calculeaz x($exp . Calculeaz x modulo % . %valueaz o funcie polinomial unde " x B valoarea argumentului funciei n B gradul funciei polinomiale coef B tabloul de coeficieni ai funciei polinomiale coef91: este termenul liber i coef9n: este termenul de rang maxim 7otunjire inferioar. (ntoarce cel mai mare numr ntreg mai mic sau egal cu x. 7otunjire superioar. (ntoarce cel mai mic ntreg mai mare sau egal cu x.

3unciile trigonometrice au argumente de tip real care trebuie specificate n radiani. Cele mai utilizate funcii implementate sunt " Sintaxa func"iei Fumele func"iei Daloarea returnat double sin'double x*# Sinus 7eal ntre B+ i + double cos'double x*# Cosinus 7eal ntre B+ i + double tan'double x*# Cangent 7eal double asin'double x*# !rc sinus 7eal ntre /51 i 51 double acos'double x*# !rc cosinus 7eal ntre , i double atan>double x*# !rc tangent 7eal ntre /51 i 51 double atan$'double %& double x*# !rc tangenta lui %+x 7eal ntre , i double sinh'double x*# Sinusul 2iperbolic 7eal double cosh'double x*# Cosinusul 2iperbolic 7eal double tanh'double x*# Cangenta 2iperbolic real

S-ar putea să vă placă și