Sunteți pe pagina 1din 6

REFERAT DE LABORATOR Nr.

REFERAT DE LABORATOR NR. 3

TEMA: Operatori şi expresii. Conversii de tip.

1. OPERATORI

Datele (constante sau variabile) legate prin operatori (simboluri pentru operaţii), formează
expresii. Operatorii care pot fi aplicaţi datelor (operanzilor) depind de tipul operanzilor,
datorită faptului că tipul unei date constă într-o mulţime de valori pentru care s-a adoptat un
anumit mod de reprezentare în memoria calculatorului şi o mulţime de operatori care pot fi
aplicaţi acestor valori. În funcţie de numărul operanzilor necesari, operatorii pot fi:

• unari (necesită un singur operand);

• binari (necesită doi operanzi);

• ternari (trei operanzi).

2. EXPRESII

Prin combinarea operanzilor şi a operatorilor se obţin expresii. O expresie este o combinaţie


corectă din punct de vedere sintactic, formată din operanzi şi operatori. Expresiile, ca şi
operanzii, au tip şi valoare. Tipul unei expresii este dat de tipul rezultatului obţinut în urma
evaluării acesteia. La evaluarea unei expresii se aplică regulile de prioritate şi asociativitate a
operatorilor care apar în expresie. Ordinea de aplicare a operatorilor poate fi schimbată prin
folosirea parantezelor. La alcătuirea expresiilor, este indicată evitarea expresiilor în care
acelaşi operand apare de mai multe ori.

Operatorii din limbajul C sunt prezentaţi în tabelul următor, împreună cu regulile de


prioritate şi asociativitate.

3. CONVERSII DE TIP

La evaluarea expresiilor, în anumite situaţii, se realizează conversii ale tipului operanzilor.


Aceste conversiile pot fi:
• Automate (realizate de către compilator: char, short int -> int);
• Cerute de evaluarea expresiilor (când în expresii apar operanzi de tipuri diferite);
• Cerute de programator (prin construcţiile cast), explicite.

1
REFERAT DE LABORATOR Nr.3

Nr. Clasă de operatori Operatori Asociativitate


1. Primari () [] . -> :: de la stânga la dreapta
2. Unari ! ~ ++ -- sizeof (tip) de la dreapta la stânga
-(unar) *(deferenţiere) &(referenţiere)
3. Multiplicativi * / % de la stânga la dreapta
4. Aditivi + - de la stânga la dreapta
5. Deplasare pe bit << >> de la stânga la dreapta
6. Relaţionali < <= > >= de la stânga la dreapta
7. De egalitate == ! = de la stânga la dreapta
8. Operatori logici & (ŞI logic pe bit) de la stânga la dreapta
9. ^ (XOR pe bit) de la stânga la dreapta
10. | (SAU logic pe bit) de la stânga la dreapta
11. && de la stânga la dreapta
12. || de la stânga la dreapta
13. Condiţional ?: de la dreapta la stânga
14. De atribuire, aritm. = += -= *= %= de la dreapta la stânga
compuşi, &= ^= |= <<= >>=
logici pe bit compuşi
15. Virgulă , de la stânga la dreapta

1. Urmăriţi execuţia următorului program care ilustrează utilizarea operatorului cast: (tip).
Acest operator unar apare în construcţii numite "cast" și convertește tipul operandului său la
tipul dintre paranteze.

#include <iostream>
using namespace std;
int main()
{
int a=5, b=3;
float x;
cout<<"x=a/b, unde a=5, b=3 variabile intregi\n";
x=a/b;
//a si b fiind variabile intregi, rezultatul operatiei de impartire va fi
//de asemenea unul intreg (numar fara virgula zecimala). Acest rezultat
//intreg va fi apoi convertit in numar real si atribuit variabilei x de
//tip float. Prin urmare, chiar daca variabila x este de tip real,
//rezultatul impartirii dintre a si b va fi un rezultat intreg.
cout<<"x = "<<x<<"\n\n";
cout<<"x=a/b, unde tipul lui a a fost fortat la float\n";
x=(float)a/b;
//in acest caz, tipul operandului a va fi convertit la tipul float
//(real), prin intermediul operatorului cast. Apoi, in cazul operatiei de
//impartire, avand un operator de tip float si unul de tip int, se va
//converti automat tipul operandului b la float, iar rezultatul
//impartirii va fi de tip float (real)
cout<<"x = "<<x;
}

2
REFERAT DE LABORATOR Nr.3

2. Urmăriţi rezultatele furnizate de execuţia următorului program, program care ilustrează


utilizarea operatorilor de incrementare și decrementare.

Ambii operatori pot fi folosiţi în formã prefixată, înaintea operandului, (++a, respectiv --a) sau
postfixată, după operand (a++, respectiv a--).

Utilizarea acestor operatori în expresii, în formă prefixată sau postfixată, determină evaluarea
acestora în moduri diferite, astfel:
y=++x este echivalent cu: x=x+1; y=x;
y=x++ este echivalent cu: y=x; x=x+1;
y=--x este echivalent cu: x=x-1; y=x;
y=x-- este echivalent cu: y=x; x=x-1;

#include <iostream>
using namespace std;
int main()
{
int a,b;
a=10;
cout<<" a= "<<a;
cout<<" ; a++= "<<a++<<" ; a= "<<a<<'\n';
//se afiseaza mai intai valoarea lui a (10), apoi deoarece operatorul de
//incrementare este in forma postfixata, se va utiliza mai intai in
//expresie a-ul cu vechea valoare (se va afisa valoarea variabilei a,
//10), urmand ca abia dupa aceasta sa fie incrementata. Cand afisam din
//nou valoarea variabilei a, observam ca valoarea acesteia este
//incrementata (11)

a=10;
cout<<" a= "<<a;
cout<<" ; ++a= "<<++a<<" ; a= "<<a<<"\n\n";
//se afiseaza mai intai valoarea lui a (10), apoi deoarece operatorul de
//incrementare este in forma prefixata, se va incremanta mai intai
//valoarea variabilei a, si abia apoi se va utiliza in expresie (se va
//afisa valoarea variabilei a incrementata, 11), Cand afisam din nou
//valoarea variabilei a, observam ca valoarea acesteia este de asemenea
//incrementata (11)

a=10;
cout<<" a= "<<a;
b=a++;
cout<<" ; b=a++ : "<<b<<'\n';
a=10;
cout<<" a= "<<a;
b=++a;
cout<<" ; b=++a : "<<b<<'\n';
}

3
REFERAT DE LABORATOR Nr.3

3. Urmăriţi execuţia următorului program care ilustrează utilizarea operatorilor relaţionali


binari.

Rezultatele afișate pe ecran vor fi: 1 pentru o expresie adevărată, respectiv 0 pentru una falsă.

#include <iostream>
using namespace std;
int main()
{
int a=5, b=10;
cout<<" a= "<<a<<" ; b= "<<b<<"\n\n";
cout<<" a<b : "<<(a<b)<<'\n';
cout<<" a>b : "<<(a>b)<<'\n';
cout<<" a!=b : "<<(a!=b)<<'\n';
cout<<" a==b : "<<(a==b)<<'\n';
}

4. Să se scrie un program care citeşte un număr real şi afişează 1 dacă numărul citit aparţine
unui interval ale carui limite sunt introduse tot de la tastatura, sau 0 în caz contrar.

#include <iostream>
using namespace std;
int main()
{
double lmin, lmax, nr;
cout<<"Numar=";
cin>>nr;
cout<<"Limita inferioara a intervalului:";
cin>>lmin;
cout<<"Limita superioara a intervalului:";
cin>>lmax;
cout<<(nr>=lmin && nr<=lmax);
}

4
REFERAT DE LABORATOR Nr.3

5. Să se citească de la tastatură un număr real. Daca acesta se află în intervalul [-100, 100], să
se afiseze 1, dacă nu, să se afiseze -1. Se va folosi operatorul condiţional.

Operatorul condiţional este un operator ternar (necesită 3 operanzi), utilizat în construcţii de


forma: expresie1 ? expresie2 : expresie3

Se evaluează expresie1. Dacă aceasta are o valoare diferită de zero, atunci tipul şi valoarea
întregii expresii vor fi aceleaşi cu tipul şi valoarea expresie2. Altfel (dacă expresie1 are
valoarea zero), tipul şi valoarea întregii expresii vor fi aceleaşi cu tipul şi valoarea
expresie3. Deci operatorul condiţional este folosit pentru a atribui întregii expresii tipul şi
valoarea expresie2 sau a expresie3, în funcţie de o anumită condiţie. Acest lucru este
echivalent cu:
Dacă expresie1 diferită de zero
Atunci evaluează expresie2
Altfel evaluează expresie3

#include <iostream>
using namespace std;
int main()
{
double nr;
cout<<"Astept numar:";
cin>>nr;
int afis = (nr>= -100 && nr <= 100 ? 1 : -1);
//variabilei afis i se atribuie valoarea expresiei in care se foloseste
//operatorul ?:

cout<<afis;
}

5
REFERAT DE LABORATOR Nr.3

PROBLEME PROPUSE SPRE REZOLVARE

6.Să se citească 2 valori întregi. Să se calculeze şi să se afişeze restul împărţirii celor 2


numere.

7. Se introduce de la tastatură un caracter. Să se afişeze codul ASCII al caracterului citit,


folosind un mesaj de forma: Caracterul …. are codul ASCII …. !!!

8. Se introduc de la tastatură valorile întregi pentru a şi b. Folosind operatorul ternar, să se


afişeze maximul dintre a,b.

9. Să se citească un număr întreg format din 4 cifre (abcd


തതതതതത). Să se calculeze şi să se afişeze
valoarea expresiei reale: 4*a + b/20 -c + 1/d.

10. Scrieţi un program care separă cifrele numerelor intregi de trei cifre şi le afişează cu câte
trei spaţii între ele. De exemplu, dacă numărul este 671, programul ar trebui să afişeze: 6 7 1

11. Fiind date declaraţiile int a=2, b=2, c=1, e=4; determinaţi și afișaţi valoarea
următoarelor expresii:
a++ / ++c * --e
--b * c++ -a
-b - --c
e / --a * b++ /c++
e / --a * b++ / c++

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