7

6
Instrucţiuni I Într-un program scris în limbajul C instrucţiunile se execută secvenţial, în afară de cazul în care se indică altfel. Instrucţiunile pot fi scrise cîte una pe o linie pentru o lizibilitate mai bună, dar nu este obligatoriu. Instrucţiunea expresie Cele mai multe instrucţiuni sînt instrucţiuni expresie. O expresie devine instrucţiune dacă ea este urmată de punct şi virgulă. Format: expresie; De obicei instrucţiunile expresie sînt atribuiri sau apeluri de funcţie; de exemplu: x = 0; printf(...); În limbajul C ; este un terminator de instrucţiune şi este obligatoriu. Instrucţiunea compusă sau blocul Instrucţiunea compusă este o grupare de declaraţii şi instrucţiuni închise între acolade. Ele au fost introduse cu scopul de a folosi mai multe instrucţiuni acolo unde sintaxa cere o instrucţiune. Instrucţiunea compusă sau blocul sînt echivalente sintactic cu o singură instrucţiune. Format: Instrucţiune-compusă: { listă-declaratoriopt listă-instrucţiuniopt } Listă-declaratori: declaraţie declaraţie listă-declaratori Listă-instrucţiuni: instrucţiune instrucţiune listă-instrucţiuni Dacă anumiţi identificatori din lista-declaratori au fost declaraţi anterior, atunci declaraţia exterioară este salvată pe durata blocului, după care îşi reia sensul său. Orice iniţializare pentru variabile auto şi register se efectuează la fiecare intrare în bloc. Iniţializările pentru variabilele static se execută numai o singură dată cînd programul începe să se execute. Un bloc se termină cu o acoladă dreaptă care nu este urmată niciodată de punct şi virgulă. Exemplu: main() { double x;

description

de nota 10

Transcript of 7

Page 1: 7

Instrucţiuni I

Într-un program scris în limbajul C instrucţiunile se execută secvenţial, în afară de cazul în care se indică altfel.Instrucţiunile pot fi scrise cîte una pe o linie pentru o lizibilitate mai bună, dar nu este obligatoriu.

Instrucţiunea expresie

Cele mai multe instrucţiuni sînt instrucţiuni expresie. O expresie devine instrucţiune dacă ea este urmată de punct şi virgulă.

Format:expresie;

De obicei instrucţiunile expresie sînt atribuiri sau apeluri de funcţie; de exemplu:x = 0;printf(...);

În limbajul C ; este un terminator de instrucţiune şi este obligatoriu.

Instrucţiunea compusă sau blocul

Instrucţiunea compusă este o grupare de declaraţii şi instrucţiuni închise între acolade. Ele au fost introduse cu scopul de a folosi mai multe instrucţiuni acolo unde sintaxa cere o instrucţiune. Instrucţiunea compusă sau blocul sînt echivalente sintactic cu o singură instrucţiune.

Format:Instrucţiune-compusă:

{ listă-declaratoriopt listă-instrucţiuniopt }Listă-declaratori:

declaraţiedeclaraţie listă-declaratori

Listă-instrucţiuni:instrucţiuneinstrucţiune listă-instrucţiuni

Dacă anumiţi identificatori din lista-declaratori au fost declaraţi anterior, atunci declaraţia exterioară este salvată pe durata blocului, după care îşi reia sensul său.

Orice iniţializare pentru variabile auto şi register se efectuează la fiecare intrare în bloc. Iniţializările pentru variabilele static se execută numai o singură dată cînd programul începe să se execute.

Un bloc se termină cu o acoladă dreaptă care nu este urmată niciodată de punct şi virgulă.Exemplu:

main(){

double x;int flag=0;printf("Introduceti un numar ");scanf("%lf",&x);if(x > 0){

int flag = 1;printf("flag = %d, x = %3.2lf\n",flag,x);

}else{

int flag = -1;printf("flag = %d, x = %3.2lf\n",flag,x);

}printf("flag = %d, x = %3.2lf\n",flag,x);

}

Page 2: 7

Există 3 variabile denumite la fel flag, prima fiind declarată la începutul programului şi celelalte două fiind declarate în cadrul instrucţiunii if else. Schimbarea variabilei flag din cadrul instrucţiunii bloc nu are nici un efect asupra variabilei flag declarată la începutul programului. Între {} variabila flag declarată la începutul programului devine invizibilă din moment ce fac o nouă declaraţie. Spaţiul în care o variabilă este accesibilă se numeşte domeniu al acelei variabile.

Instrucţiunea condiţională

Sintaxa instrucţiunii condiţionale admite două formate:if (expresie)

instrucţiune-1if (expresie)

instrucţiune-1else instrucţiune-2

Instrucţiunea condiţională se foloseşte pentru a lua decizii. În ambele cazuri se evaluează expresia şi dacă ea este „adevărată” (deci diferită de zero) se execută instrucţiune-1. Dacă expresia este „falsă” (are valoarea zero) şi instrucţiunea if are şi un bloc else atunci se execută instrucţiune-2.

Una şi numai una dintre cele două instrucţiuni se execută. Deoarece un if testează pur şi simplu valoarea numerică a unei expresii, se admite o prescurtare şi anume:

if (expresie)în loc de:

if (expresie != 0)Deoarece partea else a unei instrucţiuni if este opţională, există o ambiguitate cînd un else este omis dintr-o secvenţă de if

imbricată. Aceasta se rezolvă asociind else cu ultimul if care nu are else.Exemplu:if (n>0) if (a>b) z = a; else z = b;Partea else aparţine if-ului din interior. Dacă nu dorim acest lucru atunci folosim acoladele pentru a forţa asocierea:

if (n>0) { if (a>b) z = a; }else z = b;Exemplu:

main(){ int p,q,r; printf("Introduceti trei numere "); scanf("%d%d%d",&p,&q,&r); if(( p<q && q<r ) || ( p>q && q>r)) printf("%d este intre %d si %d\n",q,p,r); else printf("%d nu este intre %d si %d\n", q,p,r);}

Parantezele nu ar mai fi necesare deoarece && are o precedeneţă mai mare decât cea a operatorului ||.Instrucţiunea condiţională admite şi construcţia else-if de forma:

if (expresie-1)instrucţiune-1

else if (expresie-2)instrucţiune-2else if (expresie-3)

instrucţiune-3else

instrucţiune-4

Page 3: 7

Această secvenţă de if se foloseşte frecvent în programe, ca mod de a exprima o decizie multiplă.Expresiile se evaluează în ordinea în care apar; dacă se întîlneşte o expresie adevărată, atunci se execută instrucţiunea

asociată cu ea şi astfel se termină întregul lanţ.Oricare instrucţiune poate fi o instrucţiune simplă sau un grup de instrucţiuni între acolade.

` Instrucţiunea după ultimul else se execută în cazul în care nici o expresie nu a fost adevărată.Dacă în acest caz nu există nici o acţiune explicită de făcut, atunci partea

else instrucţiune-4poate să lipsească.

main(){ int n1,n2; int val; char op; printf("Introduceti o expresie simpla "); scanf("%d%c%d",&n1,&op,&n2); if(op == '+') val = n1 + n2; else if(op == '-') val = n1 - n2; else if(op == '/') val = n1 / n2; else if(op == '*') val = n1 * n2; else { printf("operatorul %c nu este recunoscut\n",op); exit(1); } printf("\n%d%c%d = %d\n",n1,op,n2,val);}

Instrucţiunea while

Format:while (expresie)

instrucţiune

Instrucţiunea se execută repetat atîta timp cît valoarea expresiei este diferită de zero. Testul are loc înaintea fiecărei execuţii a instrucţiunii. Prin urmare ciclul este următorul: se testează condiţia din paranteze dacă ea este adevărată, deci expresia din paranteze are o valoare diferită de zero, se execută corpul instrucţiunii while, se verifică din nou condiţia, dacă ea este adevărată se execută din nou corpul instrucţiunii. Cînd condiţia devine falsă, adică valoarea expresiei din paranteze este zero, se face un salt la instrucţiunea de după corpul instrucţiunii while, deci instrucţiunea while se termină.

main(){ int i=1,j; while(i <= 12) /* deplasare in josul paginii */ { j = 1; while(j <= 12) /* deplasare in "lateral" */ { printf(" %3d",i*j); j++; } printf("\n"); i++; }}

Exemplul de mai sus prezinta o tabla a inmulţirii numerelor până la 12 şi utilizează două instrucţiuni while una în interiorul celeilalte sau nested loops.

Page 4: 7

Exemplificarea instrucţiunilor break (parăsire imediată a blocului repetitiv) şi continue (salt la următorul pas din loop fără a mai executa instrucţiunile ce urmau):

main(){ int max; int sum=0,count=0; int i=0; printf("Introduceti un numar "); scanf("%d",&max); while(1) { i++; if(i == max) break; if(i%4 == 0) continue; count++; sum += i; } printf("Sunt %d numere naturale care nu se divid cu 4" " care sunt mai mici decat %d\nSuma lor este %d\n", count,max,sum);}

Instrucţiunea do

Format:do instrucţiune while

(expresie);

Instrucţiunea se execută repetat pînă cînd valoarea expresiei devine zero. Testul are loc după fiecare execuţie a instrucţiunii. Faptul că ciclul do execută cel puţin odată corpul instrucţiunii până a evalua condiţia îl face perfect pentru verificarea intrării unui meniu:

#include <stdio.h>int main(){ float a,b; char ch; printf("Doriti:\n"); printf("Adunare Scadere Multiplicare Impartire ?\n"); do {

printf("Introduceti prima litera : ");scanf("%c",&ch);printf("\n");

} while(ch!='A' && ch!='S' && ch!='M' && ch!='I'); printf("Introduceti primul numar : "); scanf("%f",&a); printf("Introduceti al doilea numar : "); scanf("%f",&b); if(ch=='A') printf("%3.2f\n",a+b); else if (ch == 'S') printf("%3.2f\n",a-b); else if (ch == 'M') printf("%3.2f\n",a*b); else if (ch == 'I')

if (b==0) printf("Diviziune cu zero");else printf("%3.2f\n",a/b);

}