Documente Academic
Documente Profesional
Documente Cultură
Instructiunile de control ale unui limbaj specifica ordinea in care sunt efectuate
operatiile. In acest modul ele sunt prezentate pe parcursul a trei lectii.
De multe ori dorim ca cele doua alternative ale instructiunii if sa execute mai
mult de o instructiune. Pentru aceasta se foloseste instructiunea compusa (sau
instructiunea bloc). Instructiunea compusa este o lista de instructiuni inclusa intre { si
}. Ea este tratata ca o singura instructiune in C si poate fi folosita oriunde o singura
instructiune poate fi folosita. De exemplu, codul de mai sus poate fi scris si :
if(x>= 0)
{ printf("x este pozitiv\n");
abs = x;
}
else
{ printf("x este negativ\n");
abs = -x;
}
printf("|x| = %f", abs);
Exercitiu:
1) Ce se intampla daca este omis al doilea set de acolade, iar x = -7?
Dar daca x=7?
2) Aceleasi intrebari ca mai sus daca este omis primul set de acolade.
In exemplul
if (i > 0)
if(x < 0)
printf("%f ", x + i);
else
printf("%f ", x - i);
else se asociaza cu al doilea if si deci
i) daca i = 2 si x = 3 se va afisa 1
ii) daca i = 2 si x = -5 se va afisa -3
iii) daca i = -2 nu se afiseaza nimic indiferent de valoarea lui x
Daca dorim schimbarea ordinii, adica else sa se asocieze cu primul if atunci se
folosesc acoladele:
if (i > 0)
{
if(x < 0)
printf("%f ", x + i);
}
else
printf("%f ", x - i);
si deci
i) daca i = 2 si x = 3 nu se afiseaza nimic
ii) daca i = 2 si x = -5 se va afisa -3
iii) daca i = -2 si x = 7 se afiseaza 9
iv) daca i = -2 si x = -10 se afiseaza -8
Desi instructiunea if ofera numai doua alternative, o succesiume
de instructiuni if se poate folosi pentru a alege una din mai multe
alternative. Sintaxa acestei secvente de instructiuni este:
if(expresie_1)
instructiune_1
else if(expresie_2)
instructiune_2
.............
else if(expresie_n)
instructiune_n
else instructiune
Expresiile sunt evaluate in ordine expresie_1, expresie_2, ... pana cand se gaseste una
adevarata si se executa instructiunea corespunzatoare acesteia. Daca nici o expresie nu
este adevarata se executa instructiune.
Exemplu:
if(n < 0)
printf("numar negativ");
else if(n > 100)
printf("numar mai mare decat 100");
else printf("0 <= numar <= 100");
Expresia expresie_intreaga trebuie sa fie de tip int sau sa poata fi convertita la tipul
int. Se evalueaza expresia si daca se gaseste o constanta egala cu valoarea expresiei
atunci se executa secventa de instructiuni asociata constantei pana cand se intalneste o
instructiune break. Daca nici o constanta nu este egala cu valoarea expresiei se
executa secventa_instr_default.
main()
{
double x, y;
char op;
scanf("%lf %c %lf", &x, &op, &y);
switch(op)
{
case '+': printf("%f\n", x + y);
break;
case '-': printf("%f\n", x - y);
break;
case '*': printf("%f\n", x * y);
break;
case '/': if(y != 0)
printf("%f\n", x/y);
else
printf("Impartire la zero\n");
break;
default: printf("Operator incorect\n");
}
}
Este permis ca doua sau mai multe etichete case sa fie puse pentru aceeasi
secventa de instructiuni.
Exemplu:
switch(c)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5': case '6': case '7': case '8':
case '9': printf("%c este cifra", c);
break;
case ' ':
case '\n':
case '\t': printf("%c este whitespace", c);
break;
default: printf("%c nu este nici cifra, nici whitespace", c);
}
Lectia 2
2.3 Instructiunea repetitiva while
while.C
#include <stdio.h>
main( )
{
int i = 1;
double numar;
while(i <= 10)
{
printf("Introduceti un numar:");
scanf("%lf", &numar);
printf("Ati introdus %f\n", numar);
i++;
}
}
Observatie: Daca valoarea expresiei este mereu adevarata atunci se intra intr-un ciclu
infinit iar executia programului nu se mai opreste (decat daca o oprim printr-o oprire
fortata).
Exemplu:
int n = 10;
while (n >= 5)
printf("%d ", n);
va tipari 10 la infinit. Chiar si:
int n = 10;
while (n >= 5)
{
printf("%d ", n);
n = n + 5;
}
va tipari 10 15 20 .... la infinit. Pe cand
int n = 10;
while (n >= 5)
{
printf("%d ", n);
n = 5;
}
va tipari 10 5 si se va opri.
Exercitii: 1) Scrieti un program care calculeaza suma 1 + 2 + ... + n unde n>=0 este
introdus de la tastatura.
2) Scrieti un program care calculeaza n!, adica 1 * 2 * 3 * ... * n unde n>0 este
introdus de la tastatura.
do
nu uitati ;
instructiune
while(expresie);
Instructiunea (simpla sau compusa) este executata intai apoi expresia este evaluata.
Daca expresia este falsa atunci instructiunea do-while se termina. Daca este adevarata
atunci instructiunea se executa si expresia este reevaluata. Daca expresia este falsa se
termina instructiunea do-while, daca este adevarata se reevalueaza expresia, iteratia
continuand pana cand expresia devine falsa.
Acelasi program care afiseaza 10 numere introduse de utilizator se poate scrie:
dowhile.C
#include <stdio.h>
main( )
{
int i = 0;
double numar;
do
{
printf("Introduceti un numar:");
scanf("%lf", &numar);
printf("Ati introdus %f\n",numar);
i++;
}
while(i < 10);
}
Exemplu:
int n = 3;
do
printf("%d", n);
while(n > 0);
va tipari 3 la infinit.
Lectia 3
3.1 Instructiunea for
Exemplu:
int n, sum = 0;
for(n = 1; n <= 10; n ++)
sum += n;
calculeaza suma 1 + 2 + ... + n si este echivalenta cu blocul de instructiuni:
int sum = 0;
int n = 1;
while (n <= 10)
{
sum += n;
n ++;
}
Exemplu:
int contor = 1, numar;
printf("Introduceti cinci numere negative \n");
while (contor <= 5)
{
printf("numar = ");
scanf("%d", &numar);
if(numar > 0) break;
contor ++;
printf("%d\n",numar);
}
if(contor <= 5)
printf("EROARE");
i. char c;
ii. for (c = 'A'; c < 'Z' ; c++)
iii. if (c == 'C')
iv. puts("limbajul C");
v. else printf("%c", c);
b. int x = 10;
do
{
printf("%d\n", x);
x = x - 3;
}while (x > 0);
c. int x = -42;
do
{
printf("%d\n", x);
x = x - 3;
}while (x > 0);
b. int n;
for (n = 10; n > 0; n = n - 2)
{
printf("n = ");
printf("%d\n", n);
}
c. double d;
for (d = 2; d > 0; d = d - 0.5)
printf("%.2f ", d);
10. Ce afiseaza urmatoarea instructiune for? Identificati legatura dintre valoarea
lui n si valoarea variabilei log.
int n = 1024;
int log = 0;
int i;
for (i = 1; i < n; i = i * 2)
log ++;
printf("%d %d\n", log);
11. Scrieti un program care program care verifica daca un numar intreg pozitiv
mai mare decat 1 este prim. (n este prim daca nu se imparte exact la nici un
numar intreg pozitiv diferit de 1 si n).
12. Scrieti un program care tipareste cifrele unui intreg pozitiv dat in ordine
inversa. Exemplu: daca numarul este 3497 atunci se va afisa 7943.
13. Scrieti un program care program care verifica daca un an este bisect. (Un an
bisect este un an care este divizibil cu 4 dar nu cu 100, exceptie facand anii
divizibili cu 400 care sunt bisecti).
15. Scrieti un program care va tipari al n-lea element al sirului lui Fibonacci:
f n = f n - 1 + f n - 2 daca n > 2 si f 1 = f 2 = 1 iar n este introdus de la tastatura.
Bibliografie recomandata: