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 OUT: 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].