Noi te platim pentru timpul acordat , o postare , like , vizualizare subiect , sau creare subiect , insemna castig.
Suntem comunitatea unica din Romania care plateste pentru efortul depus . Ideile ,opiniile tale conteaza si sunt platite doar la noi.

Instrucţiuni

Instrucţiuni

Solus

Membru
Staff member
Fondator BitArena
Moderator
Utilizator
Joined
Jul 6, 2018
Messages
523
Reaction score
94
Points
26
Location
Bucuresti
Website
www.bitarena.eu

Reputation:

Î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

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ă-declaratori<opt> listă-instrucţiuni<opt> }
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ă.

Instrucţiunea condiţională

Sintaxa instrucţiunii condiţionale admite două formate:
if (expresie)
instrucţiune-1
if (expresie)
instrucţiune-1
else 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 parte de 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;

Instrucţiunea condiţională admite şi construcţia else-if de forma:

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

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-4 poate să lipsească.
Funcţia binary din secţiunea 7.5 este un exemplu de decizie multiplă de ordinul 3.
Pot exista un număr arbitrar de construcţii:
else if (expresie)
instrucţiune
grupate între un if iniţial şi un else final.

Întotdeauna un else se leagă cu ultimul if întîlnit.

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ă.

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.

Instrucţiunea for

Format:
for (expresie-1<opt>; expresie-2<opt>; expresie-3<opt>)
instrucţiune

Această instrucţiune este echivalentă cu:
expresie-1;
while (expresie-2) {
instrucţiune;
expresie-3;
}

Expresie-1 constituie iniţializarea ciclului şi se execută o singură dată înaintea ciclului. Expresie-2 specifică testul care controlează ciclul. El se execută înaintea fiecărei iteraţii. Dacă condiţia din test este adevărată atunci se execută corpul ciclului, după care se execută expresie-3, care constă de cele mai multe ori în modificarea valorii variabilei de control al ciclului. Se revine apoi la reevaluarea condiţiei. Ciclul se termină cînd condiţia devine falsă.
Oricare dintre expresiile instrucţiunii for sau chiar toate pot lipsi.
Dacă lipseşte expresie-2, aceasta implică faptul că clauza while este echivalentă cu while (1), ceea ce înseamnă o condiţie totdeauna adevărată. Alte omisiuni de expresii sînt pur şi simplu eliminate din expandarea de mai sus.
Instrucţiunile while şi for permit un lucru demn de observat şi anume, ele execută testul de control la începutul ciclului şi înaintea intrării în corpul instrucţiunii.
Dacă nu este nimic de făcut, nu se face nimic, cu riscul de a nu intra niciodată în corpul instrucţiunii.


Instrucţiunea switch


Instrucţiunea switch este o decizie multiplă specială şi determină transferul controlului unei instrucţiuni sau unui bloc de instrucţiuni dintr-un şir de instrucţiuni în funcţie de valoarea unei expresii.
Format:
switch (expresie) instrucţiune

Expresia este supusă la conversiile aritmetice obişnuite dar rezultatul evaluării trebuie să fie de tip int.
Fiecare instrucţiune din corpul instrucţiunii switch poate fi etichetată cu una sau mai multe prefixe case astfel:
case expresie-constantă:
unde expresie-constantă trebuie să fie de tip int.
Poate exista de asemenea cel mult o instrucţiune etichetată cu
default:
Cînd o instrucţiune switch se execută, se evaluează expresia din paranteze şi valoarea ei se compară cu fiecare constantă din fiecare case.
Dacă se găseşte o constantă case egală cu valoarea expresiei, atunci se execută instrucţiunea care urmează după case-ul respectiv.
Dacă nici o constantă case nu este egală cu valoarea expresiei şi dacă există un prefix default, atunci se execută instrucţiunea de după el, altfel nici o instrucţiune din switch nu se execută.
Prefixele case şi default nu alterează fluxul de control, care continuă printre astfel de prefixe.
Pentru ieşirea din switch se foloseşte instrucţiunea break (vezi secţiunea 6.8) sau return (vezi secţiunea 6.10).
De obicei instrucţiunea care constituie corpul unui switch este o instrucţiune compusă. La începutul acestei instrucţiuni pot apărea şi declaraţii, dar iniţializarea variabilelor automatice şi registru este inefectivă.

na = nb = nc = 0;
while (c=s[i++])
switch (c) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case 'T':
case '8':
case '9':
nc[c-'0']++;
break;
case ' ':
case '\r':
case '\t':
nb++;
break;
default:
na++;
break;
}
printf("cifre: ");
for (i=0; i<10; i++)
printf(" %d",nc);
printf("\nspatii albe: %d, altele: %d\n",
nb,na);


În acest exemplu se parcurg toate caracterele dintr-un şir, se numără cifrele, spaţiile albe şi alte caractere şi se afişează aceste numere însoţite de comentarii.
Instrucţiunea while este cea care asigură parcurgerea şirului pînă la sfîrşit. Pentru fiecare caracter se execută corpul instrucţiunii while care constă dintr-o singură instrucţiune switch.
Se evaluează expresia întreagă din paranteze (în cazul nostru caracterul c) şi se compară valoarea sa cu toate constantele-case. În momentul cînd avem egalitate se începe execuţia de la case-ul respectiv.
Afişarea rezultatelor se face prin intermediul instrucţiunii for şi a funcţiei printf (vezi capitolul 11).


Instrucţiunea break

Format:
break;


Această instrucţiune determină terminarea celei mai interioare instrucţiuni while, do, for sau switch care o conţine. Controlul trece la instrucţiunea care urmează după instrucţiunea astfel terminată.

Instrucţiunea continue

Format:
continue;


Această instrucţiune determină trecerea controlului la porţiunea de continuare a ciclului celei mai interioare instrucţiuni while, do sau for care o conţine, adică la sfîrşitul ciclului şi reluarea următoarei iteraţii a ciclului. În while şi do se continuă cu testul, iar în for se continuă cu expresie-3.
Mai precis în fiecare dintre instrucţiunile:


You must be registered for see images attach


dacă apare o instrucţiune continue aceasta este echivalentă cu un salt la eticheta contin. După contin: urmează o instrucţiune vidă (vezi secţiunea 6.11).
Porţiunea de program din exemplul următor prelucrează numai elementele pozitive ale unui masiv.


for (i=0; i<n; i++) {
if (a<0) /* sare peste elementele negative */
continue;
... /* prelucrează elementele pozitive */
}


Instrucţiunea return

O instrucţiune return permite ieşirea dintr-o funcţie şi transmiterea controlului apelantului funcţiei. O funcţie poate returna valori apelantului său, prin intermediul unei instrucţiuni return.
Formate:
return;
return expresie;


În primul caz valoarea returnată nu este definită. În al doilea caz valoarea expresiei este returnată apelantului funcţiei. Dacă se cere, expresia este convertită, ca într-o atribuire, la tipul funcţiei în care ea apare.

Instrucţiunea vidă

Format:
;


Instrucţiunea vidă este utilă pentru a introduce o etichetă înaintea unei acolade drepte, într-o instrucţiune compusă, sau pentru a introduce un corp nul într-o instrucţiune de ciclare care cere corp al instrucţiunii, ca de exemplu while sau for.

Exemplu:
for (nc=0; s[nc]!=0; ++nc) ;


Această instrucţiune numără caracterele unui şir. Corpul lui for este vid, deoarece tot lucrul se face în partea de test şi actualizare dar sintaxa lui for cere un corp al instrucţiunii. Instrucţiunea vidă satisface acest lucru.
 
Top