Sunteți pe pagina 1din 8

Programarea Calculatoarelor - Limbaje

Lucrarea 07. Aplicații C cu instrucțiuni

O1. Cunoașterea instrucțiunilor de bază ale limbajului C


Obiective O2. Utilizarea acestor instrucțiuni pentru a controla fluxul programului
O3. Utilizarea instrucțiunilor în funcții pentru crearea de programe mai
complexe

INTRODUCERE
Instrucțiunile (en. statements) reprezintă pașii efectuați de un program. Fiecare instrucțiune
este un pas computațional ce are un anumit efect colateral (side-effect): modificarea stării progra-
mului.
Controlul fluxului (flow control) este ordinea de execuție a intrucțiunilor. Dacă nu sunt in-
strucțiuni repetitive sau de salt, programul se execută secvențial.
Domeniul (namespace) de definiție a unei variabile este zona din program în care o variabilă
rămâne definită. Domeniul de valabilitate al variabilelor declarate este limitat la bloc . Timpul de
viață al unei varibile este dat de durata de execuție a blocului Dacă anumiți identificatori au fost
declarați anterior, atunci declarația anterioară este salvată pe durata blocului, după care îşi reia
sensul său la ieșirea din bloc.

INSTRUCȚIUNEA IF
if(expresie){
set_instr1;
}
[else{
set_instr2;
}]

expresie are o valoare de tip scalar. Dacă expresie are valoare nenulă (adevarată) se execută
instr1, altfel se execută instr2. Ramura else poate să lipsească! Acoladele pot să lipsească atunci
când e o singură instrucțiune executată! !!!
Doar o ramură este executată. La final se trece la execuția instrucțiunii ce urmează după if-else,
cu excepția instrucțiunilor if-else ce conțin instrucțiunile break, continue sau goto.

INSTRUCȚIUNEA SWITCH
switch(expresie)
{
case const1 :
set_instructiuni1;
[break];
case const2 :
set_instructiuni2;
[break;]
...
© Adriana Stan, Ligia Chiorean, Mircea Vaida 1 Programarea Calculatoarelor - Limbaje
[default:]
set_instructiuni
//[break;]
}

Permite selecția multiplă dacă aceasta e controlată de valoarea unei singure expresii. expresie
are o valoare întreagă sau constantă. Nu poate fi float, double sau de tip structurat. const sunt
constante cu valori distincte ale rezultatului expresiei. break determină ieșirea din instrucțiunea
switch. Absența instrucțiunii break alterează funcționarea switch. Pot exista oricâte ramuri case.
Ramura default se execută dacă nu s-a intrat pe nici o ramură de case și poate să lipsească!!

INSTRUCȚIUNEA FOR
for (initializare; verificare; actualizare){
instructiuni;
}

Este o instrucțiune repetitivă condiționată anterior și număr fix de repetări


initializare - se execută o singură dată la intrarea în bucla și reprezintă inițializarea contorului
verificare - este expresia de verificare la începutul fiecărei bucle repetitive. Dacă este nenulă se
execută bucla, altfel se iese din buclă.
actualizare - se execută la sfârșitul fiecărei bucle și reprezintă modul de actualizare al contorului
buclei.
Oricare dintre cele trei expresii (initializarea, verificare, actualizare) pot să lipsească:
for (;;){
instructiuni;
}
Dar este o bucla infinită. Separatorii ; sunt necesari!!

INSTRUCȚIUNEA WHILE
while (expresie){
instructiuni;
}

Instrucțiune repetitivă condiționată anterior și număr necunoscut de repetări. Se execută atât


timp cât expresie este nenulă. De obicei valoarea expresiei este modificată în blocul de instrucțiu-
ni. Se poate execută de un infinit de ori (buclă infinită - while(1) sau while ()) sau niciodată (while
(0)).

INSTRUCȚIUNEA DO...WHILE

do {
set_instructiuni
} while (expresie)

Instrucțiune repetitivă condiționată posterior și număr necunoscut de pași. Setul de instructiuni


se execută cel puțin o dată. Este folosită atunci când nu avem o valoare inițială pentru expresie.

© Adriana Stan, Ligia Chiorean, Mircea Vaida 2 Programarea Calculatoarelor - Limbaje


INSTRUCȚIUNEA BREAK
break;

Se folosește: în instrucțiunea switch pentru a marca încheierea unei ramuri case și ieșirea din
instrucțiune; în instrucțiuni repetitive pentru ieșiri forțate, indiferent de valoare condiției.
NOTĂ: în cazul instrucțiunilor imbricate, break forțează ieșirea doar din bucla curentă, nu și cea
externă.

INSTRUCȚIUNEA CONTINUE
continue

Se foloseşte în instrucțiunile repetitive pentru întreruperea iterației curente după care:


- pentru while şi do-while se continuă cu testarea condiției de repetare;
- pentru for se continuă cu evaluarea expresiei de actualizare şi apoi a expresiei de validare.

INSTRUCȚIUNEA RETURN
return;
return (expresie);

Termină execuția unei funcții şi dă controlul funcției apelante. Poate să apară oriunde în blocul
unei funcții. Funcțiile ce returnează o valoare trebuie să includă neapărat instrucțiunea return. ex-
presie trebuie să aibă tipul declarat în prototipul funcției. Valoarea expresiei (cu unele conversii im-
plicite) este transmisă funcției apelante. Funcția apelantă poate neglija rezultatul returnat de
funcția apelată.

EXEMPLE
1. Domeniul de definiție a variabilelor

© Adriana Stan, Ligia Chiorean, Mircea Vaida 3 Programarea Calculatoarelor - Limbaje


#include <stdio.h>
int main(void){
int i = 5;
printf("i inainte de instruc compusa: %d\n",i);
{
int i = 3;
printf("i in instructiunea compusa: %d\n", i);
i+=1;
printf("i incrementat in instruc compusa: %d\n",i);
}
printf("i la iesirea din instruc compusa: %d\n",i);
i += 1;
printf("i incrementat dupa instruc compusa: %d\n", i);
return 0;
}
2. Instrucțiune if imbricată

#include <stdio.h>
int main(void){
int a = 3, b =7, c=22, max = 0;
if (a>b)
if (a>c)
max = a;
else
max = c;
else if (b>c)
max = b;
else
max = c;
printf("Maximul este: “,max);
return 0;
}
3. Instrucțiunea switch fără break

© Adriana Stan, Ligia Chiorean, Mircea Vaida 4 Programarea Calculatoarelor - Limbaje


#include <stdio>

int main(void){
int a = 2;
switch (a) {
case 1:
a = a+4;
break;
case 2:
a = a+3;
case 3:
a = a+2;
break;
}
printf("a este: %d",a);
}
4. Adună valorile date de la tastatură cu confirmarea continuării după fiecare număr introdus

#include <stdio.h>

int main(void){
int c, suma=0;
int key;
do{
printf("Introduceti un numar: ");
scanf("%d",&c);
suma += c;
printf("Continuati ? (d/n) \n");
key =_getch();
}
while (!((key == 'n')||(key=='N')));
printf("Suma numerelor introduse este %d\n", suma);
}
5. Determinare număr prim (fără optimizare)

© Adriana Stan, Ligia Chiorean, Mircea Vaida 5 Programarea Calculatoarelor - Limbaje


#include <stdio.h>
int NrPrim(int);
int main(void){
int nr;
printf("\nIntroduceti un numar : ");
scanf("%d", &nr);
if(NrPrim(nr) > 0)
printf("\nNumarul %d este prim\n", nr);
else
printf("\nNumarul %d nu este prim\n", nr);
}

int NrPrim(int n){


// Funcţia returneaza +1 daca numarul n este prim sau -1 in caz
contrar
int i;
if(n <= 1)
return(-1);
if(n == 2)
return(1);
if(n % 2 ==0)
return(-1);
for(i=3; i<n; i+=2) {
if(n % i == 0)
return(-1);
}
return(1);
}
6. Buclă de așteptare

#include <stdio.h>

int main(void){
int contor = 100000;
while (contor--);
}
7. Exemplu instrucțiunea break

© Adriana Stan, Ligia Chiorean, Mircea Vaida 6 Programarea Calculatoarelor - Limbaje


#include <stdio.h>

int main(void){
for (int i=0; i<5; i++){
if (i==3)
break;
for (int j=0; j<3; j++){
if (j == 2)
break;
printf("%d %d", i,j);
}
}
}
8. Exemplu instrucțiunea continue

#include <stdio.h>

int main(void){
int i = 10;
while (i>=0){
if (i%2){
i--;
continue;
}
printf("%d", i);
i--;
}

TEME
1. Se citesc trei numere de la tastatură (a, b şi c). Să se determine aria dreptunghiului ale cărui
laturi sunt a şi b şi verificaţi dacă diagonala dreptunghiului este egală cu c.
2. Să se scrie un program care verifică dacă un număr citit de la tastatură este pătrat perfect.

3. Să se scrie un program care calculeaza a la puterea n, unde a și n sunt citite de la consolă.

4. Să se scrie un program care citeşte de la tastatură o valoare întreagă şi calculează n! (n-facto-


rial).
5. Să se scrie un program care :
- determină cel mai mare număr prim mai mic decât numărul dat
- determină toate numerele prime mai mici decât numărul dat.
6. Să se scrie un program care determină cel mai mare divizor comun a doi întregi.

7. Să se scrie un program care determină toţi divizorii unui număr.

8. Să se scrie un program care determină câtul împărţirii a doi întregi folosind scăderi succesive.

© Adriana Stan, Ligia Chiorean, Mircea Vaida 7 Programarea Calculatoarelor - Limbaje


9. Calculaţi produsul a două numere întregi folosind numărul corespunzător de adunări.

10. Să se scrie un program care determină numărul de cifre care compun un număr întreg citit de
la tastatură.
11. Să se scrie un program care citeşte de la tastatură n numere întregi. Afişaţi toate numerele
impare din şir.
12. Să se citească un număr întreg n de la tastatură. Se citesc apoi numere reale, până când
suma lor depăşeşte valoarea lui n. Să se afişeze suma numerelor citite, cu o precizie de 2 zeci-
male şi numărul lor (câte s-au introdus).
13. Să se scrie un program care determină cmmmc a două numere citite de la tastatură.

14. Scrieţi un program care citeşte n numere întregi de la tastatură şi le afişează pe cele diviz-
ibile cu 3.
15. Să se scrie un program care citeşte de la tastatură un caracter, pe care îl afişează pe n rân-
duri, câte n caractere pe un rând.
16. Să se scrie o aplicaţie C în care se introduc de la tastatură numere întregi, până ce utiliza-
torul apasă tasta <Esc>. Să se determine şi să se afişeze media numerelor impare pozitive.

© Adriana Stan, Ligia Chiorean, Mircea Vaida 8 Programarea Calculatoarelor - Limbaje

S-ar putea să vă placă și