This is an old revision of the document!
Responsabili:
În urma parcurgerii acestui laborator studentul va fi capabil să:
if…else
este cea mai simplă instrucţiune condiţională. Poate fi folosită în mai multe forme:
if (condiţie) { // instrucţiuni //... }
if (condiţie) { //instrucţiuni //... } else { //alte instrucţiuni //... }
if (condiţie1) { ... } else if (condiţie2) { ... } ... else if (condiţieN) { ... }
Instrucţiunea evaluează expresia condiţie
şi execută instrucţiunile dintre acolade doar dacă rezultatul este nenul. În varianta cu else
, pentru rezultat nul este executat blocul de instrucţiuni aflat după else
.
În al treilea caz, sunt evaluate pe rând condiţiile şi este executat blocul corespunzător primei condiţii adevărate. Un exemplu de folosire este:
if (a == b) { printf( "Numerele sunt egale" ); } else if (a > b) { printf( "A este mai mare" ); }
switch
este o instrucţiune menită să simplifice structurile condiţionale cu mai multe condiţii.
switch (expresie) { case constanta1: //instrucţiuni1 case constanta2: //instrucţiuni2 ... default: //instrucţiuni }
Valoarea expresie
este evaluată la un tip intreg, apoi această valoare este comparată cu fiecare constantă; este rulat blocul de instrucţiuni al valorii găsite. În caz ca numărul nu este egal cu nici una dintre constante, este executat blocul aflat după default
.
case
, execuţia nu continua după blocul switch
, ci la inceputul următorului bloc case constantă
sau default
. Pentru a ieşi din blocul switch
, se foloseşte instrucţiunea break
.
int main() { char c; printf("Alegeţi o opţiune:\n\t[a] afişare\n\t[s] ştergere\n\t[e] ieşire\n"); scanf("%c", &c); printf("Aţi ales: "); switch (c) { case 'a': printf("afişare"); break; case 's': printf("ştergere"); break; case 'e': printf("ieşire"); break; default: printf("O opţiune inexistentă"); break; } return 0; }
int main() { int n, n2; printf("Introduceţi o valoare între 0 şi 5:"); scanf("%d", &n); n2 = 1; switch (n) { case 5: n2 *= 2; /* fără break, continuă la următoarea instrucţiune */ case 4: n2 *= 2; case 3: n2 *= 2; case 2: n2 *= 2; case 1: n2 *= 2; case 0: printf("2 la puterea %d este %d\n", n, n2); break; default: printf( "Valoare invalidă\n" ); } return 0; }
while
execută un bloc de instrucţiuni atâta timp cât o anumită condiţie este adevărată. Forma generală a unui ciclu while este:
while (expresie) { // instrucţiuni }
Câtă vreme expresie
are o valoare nenulă, instrucţiunile din blocul de după while
sunt executate. Expresia este reevaluată după fiecare ciclu. Un astfel de ciclu poate să se execute o dată, de mai multe ori sau niciodată, în funcţie de valoarea la care se evaluează expresia.
do … while
este o instrucţiune repetitivă similara cu cea precedentă, singura diferenţa fiind că expresia este evaluată după executarea instrucţiunilor, nu înainte. Astfel, blocul va fi executat cel puţin o dată.
do { //instrucţiuni } while (expresie);
for
reprezintă o formă mai simplă de a scrie un while însotit de o expresie iniţiala şi de o expresie de incrementare. Forma sa este:
for (expresie1; expresie2; expresie3) { // instrucţiuni }
Secvenţa de cod de mai sus este echivalentă cu:
expresie1 while (expresie2) { instrucţiuni expresie3 }
În cazul instrucţiunii for
, oricare dintre cele 3 expresii poate lipsi. Lipsa expresiei condiţionale este echivalentă cu o buclă infinită, cum ar fi:
for ( ; ; ) { /* instrucţiunile de aici sunt intr-o buclă infinită */ }
break
.
Exemplul următor prezintă un ciclu cu funcţionalitate identică (tipărirea primelor 10 numere naturale), folosind cele 3 instrucţiuni repetitive:
int main() { short i; printf("Ciclu for\n"); for (i = 1; i <= 10; i++) { printf("i=%d\n", i); } printf("Ciclu while\n"); i = 1; while (i <= 10) { printf("i=%d\n", i); i++; } printf("Ciclu do while\n"); i = 0; do { i++; printf("i=%d\n", i); } while(i < 10); }
În exemplu nu am mai pus acolade la instrucţiunea executată de for. Pentru blocuri de o singură instrucţiune, nu este nevoie sa folosim acoladele.
break
, pe lângă utilizarea descrisă la instrucţiunea switch, poate fi folosită pentru a ieşi forţat dintr-o instrucţiune de repetiţie. Secventa următoare este echivalentă cu cele de mai sus:
i = 0; for( ; ; ) { i++; if (i > 10) { break; /* ieşire forţată din bucla */ } printf( “i=%d\n”, i ); }
continue
forţează terminarea iteraţiei curente a buclei si trecerea la iteraţia următoare. În cazul instrucţiunii for
, acest lucru presupune executarea instrucţiunii de incrementare; apoi se evaluează condiţia de continuare a buclei. Exemplul următor demonstrează implementarea unei bucle infinite cu ajutorul instrucţiunii continue
:
for (i = 0; i < 10; ) { if (i == 0) { continue; } i++; }
return
este instrucţiunea de terminare a funcţiei curente. Aceasta poate fi apelată in forma return
; în cazul funcţiilor care returnează void
şi în forma return rezultat
; pentru funcţiile care întorc o valoare.
goto
este o instrucţiune de salt a execuţiei. Instrucţiunea primeşte ca parametru o etichetă; următoarea instrucţiune executată după goto
este cea de la eticheta dată.
int main() { goto et; printf(“Asta nu apare la executie\n”); et: printf(“Asta apare la rulare\n”); return 0; }
goto
nu este recomandată şi poate fi evitată folosind alte instrucţiuni de control şi funcţii. Programele care folosesc această instrucţiune pentru a sări între secvenţe îndepărtate de cod sunt dificil de depanat şi analizat.
N=100 96 are suma divizorilor 155
35 OUT: 5 7 36 OUT: 2 3 4 6 9 12 18 17 OUT: PRIM 2 OUT: PRIM 12 OUT: 2 3 4 6 25 OUT: 5 53 OUT: PRIM -4 OUT: S-au găsit 3 numere prime.
f:[u,v] − > [min,max],f(x) = a * x2 + b * x + c
, în care a, b, c, u si v sunt date. Determinaţi min si max, apoi rezolvaţi ecuaţia f(x)=0 în mulţimea numerelor reale. Afişaţi doar rădăcinile din intervalul [u,v]
.