Sunteți pe pagina 1din 10

REFERAT DE LABORATOR Nr.

2, 3 (din 14) 2021

REFERATE DE LABORATOR NR. 2, 3

TEMA:
1. Date, operatori, expresii.

NOŢIUNI TEORETICE
1. Date în limbajele C/C++
Într-un program datele (obiecte informaţionale de bază) apar sub formă de:
 Constante (valori cunoscute anticipat, care nu se modifică);
 Variabile (nume simbolice utilizate pentru memorarea valorilor introduse pentru datele de
intrare sau a rezultatelor).

Datele sunt caracterizate de atributele:


 Nume (un identificator);
 Valoare;
 Tip (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);
 Clasă de memorare.

Tipuri de bază:
 char un singur octet (1 byte = 8 biţi), capabil să conţină codul unui caracter
(un număr) din setul local de caractere; este folosit pentru caracterele ASCII
(din mai vechiul stil C sau pentru obiectele std::string)
 wchar_t doi octeți, la compilatoarele mai noi, memorează codul caracterului în format
UNICODE (UTF-16 în Windows, eventual diferit în alte sisteme de operare).
Este un tip de caracter folosit în șiruri de tip std::wstring, utile în
internaționalizarea aplicațiilor, deoarece permir codificarea unui număr mai
mare de caractere, folosite în diverse limbi
 bool un octet care memorează valoarea logică/booleană true sau false (la
compilatoarele mai noi)
 int număr întreg, reflectă în mod tipic mărimea naturală din calculatorul utilizat;
 float număr real, în virgulă mobilă, simplă precizie;
 double număr real, în virgulă mobilă, dublă precizie.

Tipuri derivate, obţinute prin folosirea calificatorilor short, long, signed şi unsigned,
alături de tipurile de bază.

1.1. Constante

 Constante numerice întregi (literali numerici, compuşi din cifre, fără punct zecimal).
 Constante întregi în baza 10 (Ex. 56, -98), 8 (Ex. 0476) sau 16 (Ex. 0x458, 0X4Abc).

Autor: Diana Ştefănescu 1


REFERAT DE LABORATOR Nr.2, 3 (din 14) 2021
 Constante întregi, de tipuri derivate: de tip decimal long int (Ex. 897655L), de tip
unsigned int (Ex. 678u) sau unsigned long int (Ex. 8765UL).
 Constante numerice reale
 De tip double (Ex. 9.67, -56.78, 4.5e-3) sau float (Ex. -7.5f, 678.56F),
 De tipuri derivate: de tip long double (Ex. -4.67L).
 Constante caracter (Ex. '8', 'K', '\n').
 Constante şir de caractere (Ex. "ab7N", "gj\nR5\n").

1.2. Variabile

Variabilele sunt nume simbolice utilizate pentru memorarea valorilor introduse pentru datele
de intrare sau a rezultatelor. Dacă la o constantă ne puteam referi folosind caracterele
componente, la o variabilă ne vom referi prin numele ei.
Modul general de declarare a variabilelor este:
<tip_variabile> <listă_nume_variabile>;
Modul general de declarare a variabilelor şi iniţializarea acestora în momentul declarării:
<tip_var> <nume_var1>=<expr1>[,<nume_var2>=<expr2>, …];

2. Operaţii de intrare/ieşire

Limbajele C/C++ nu posedă instrucţiuni de intrare/ieşire, deci de citire/scriere (ca limbajul


PASCAL, de exemplu). În limbajul C aceste operaţii se realizează cu ajutorul unor funcţii (de
exemplu, printf şi scanf), iar în limbajul C++ - prin supraîncărcarea operatorilor (definirea
unor noi proprietăţi ale unor operatori existenţi, fără ca proprietăţile anterioare să dispară),
mai precis a operatorilor >> şi <<. Vom folosi în continuare abordarea limbajului C++, fiind,
în momentul de faţă, mai simplă. În limbajul C++ sunt predefinite următoarele dispozitive
logice de intrare/ieşire:
cin - console input - dispozitivul de intrare (tastatura);
cout - console output - dispozitivul de ieşire (monitorul).
Aşa cum se va vedea în capitolul 9, cin şi cout sunt, de fapt, obiecte (predefinite).
Transferul informaţiei se realizează cu operatorul >> (extractor) pentru intrare şi operatorul
<< (insertor) pentru ieşire. Utilizarea dispozitivelor de intrare/ieşire cu operatorii
corespunzători determină deschiderea unui canal de comunicaţie a datelor către dispozitivul
respectiv. După operator se specifică informaţiile care vor fi citite sau afişate.
Exemple:
cout << var; /* afişează valoarea variabilei var pe monitor*/
cin >> var; /* citeşte valoarea variabilei var de la tasatatură */

Sunt posibile operaţii multiple, de tipul:


Exemple:
cout << var1 << var2 << var3;
cin >> var1 >> var2 >> var3;
În acest caz, se efectuează succesiv, de la stânga la dreapta, scrierea, respectiv citirea valorilor
variabilelor var1, var2 şi var3.
Utilizarea dispozitivelor si operatorilor de intrare/iesire in C++ impune includerea fisierului
antet iostream.

3. Operatori

Datele (constante sau variabile) legate prin operatori (simboluri pentru operaţii), formează
expresii (figura 2.4). Operatorii care pot fi aplicaţi datelor (operanzilor) depind de tipul
Autor: Diana Ştefănescu 2
REFERAT DE LABORATOR Nr.2, 3 (din 14) 2021
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 3.1., î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.

Tabelul 3.1.
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

Autor: Diana Ştefănescu 3


REFERAT DE LABORATOR Nr.2, 3 (din 14) 2021
d || b && a = 1
*/
2. Folosind declarațiile: int i=4,j=5; float f=4.0;
Afișați valorile expresiilor: i==j, i>=j-2, i==f, 2<=i+j<=1
3. Fiind date următoarele declarații:
int i = 3, j = 5,c1,c2,c3,c4;
determinați valorile tuturor variabilelor, după execuția secvenței:
c1=(i/2) + 'b' + i-- - - - 'c';
c2=(j%8) * i;
c3=(i++) - (--j);
c4=j = (i += 2);
a %= b = d = 1 + e /2 ;
j = (i++ , i -j) ;

4. Fiind date declarațiile int a=2, b=2, c=1, d=0, e=4, i = 2, j = 4;


determinați si afișați valoarea următoarelor expresii:
a++ / ++c * --e
--b * c++ -a
-b - --c
e / --a * b++ /c++
e / --a * b++ / c++

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


numere.
6. Să se scrie un program care citeşte valorile a două numere întregi. Să se calculeze şi să se
afișeze afişeze suma celor două numere, produsul lor, câtul întreg al împărţirii numerelor
şi câtul real al acestora.
7. 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.
8. Scrieţi un program care separă cifrele numerelor întregi de cinci cifre şi le afişează cu
câtre trei spaţii între ele. De exemplu, dacă numărul este 67128, programul ar trebui să
afişeze: 6 7 1 2 8
9. 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 …. !!!
10. Se introduc de la tastatură valorile întregi pentru a şi b. Folosind operatorul ternar, sa
se afişeze maximul dintre a și b.
11. Se introduc de la tastatură valorile întregi pentru a, b şi c. Folosind operatorul ternar,
sa se afişeze maximul dintre a, b şi c.
12. Să se verifice că secvența următoare determină maximul dintre a și b, iar dacă a<b, le
interschimbă, astfel încât secvența a și b să fie descrescătoare.
max_a_b=a<b?(t=b,b=a,a=t):a;

13. Rescrieţi expresiile de mai jos astfel încât ele să fie valide în C++. Scrieți apoi un
program în care să folosiţi aceste expresii şi verificaţi rezultatele expresiilor.
1. x, y şi z sunt mai mari decât 0
2. x nu este egal nici cu y nici cu z
3. x este egal cu y şi cu z
4. x este mai mic decât y, iar y este mai mic sau egal cu z

14. Care va fi rezultatul afişat pe ecran în urma execuţiei următoarelor secvenţe:


 double a=9/2; cout<<a*5<<’\n’;
 double a=9.7, b=5.6; cout<<(a+6<b)<<’\n’;
 double a=9/4; cout<<a*6<<’\n’;

Autor: Diana Ştefănescu 9


REFERAT DE LABORATOR Nr.2, 3 (din 14) 2021
 double x=3;int y=++x+5;cout<<y<<’\n’;
 int a=7; cout<<(!a)<<’\n’;
 int a=10.5; cout<<a++<<’\n’; cout<<a<<’\n’;
 int a=7; cout<<++a<<’\n’; cout<<a<<’\n’;
 int a=10; cout<<a++<<’\n’; cout<<a<<’\n’;
 double a=7/2; cout<<a<<’\n’;
 int x=3; int y=x++-2; cout<<y<<’\n’;
 int x=3; int y=++x+5; cout<<y<<’\n’;
 double a=5.6, b=7.45; cout<<(a>b)<<’\n’;

15. Să se verifice corectitudinea următoarelor secvenţe. Pentru cele incorecte, explicaţi


sursa erorilor. Pentru cele corecte, specificaţi rezultatul.
 double a=9.7, b=5.2; int c=(a+6<b)++; cout<<c<<’\n’;
 double a=7/5; double c=a*5++; cout<<c<<’\n’;
 double a=9.7, b=5.6; int c=(a%6<b)++; cout<<c<<’\n’;
 double a=5.6, b=7.45; cout<<++(a+5>b)<<’\n’;
 double a=9.8; double b=9.7; cout<<a%b<<’\n’;
 cout<<&(a+8)<<'\n';
 int I=8; cout<<(I+10)++<<'\n';
 double a=8.7; A=(a+8)/56; cout<<A<<'\n';
 int x=3/5; int y=x++; char x='J'; cout<<"y="<<y<<'\n';
 char a='X';const int b=89; b+=8; cout<<"b="<<b<<" a="<<a<<'\n';
 const x=34; int g=56; x+=h; cout<<"g="<<g<<"x="<<x<<'\n';
 double y=9.8; int a=(y<<7); cout<<"a="<<a<<"y="<<y<<'\n';
 cout<<(5++-3)--<<'\n';
 int a=9; cout<<(a!=9)<<'\n'; cout<<(++a!=9); cout<<(a++!=9);
 int a=9; cout<<(a!=9)<<'\n'; cout<<(a++!=9); cout<<(++a!=9);
 int a=9; cout<<(a++-2*5);
 cout<<(sizeof('A')<=1)<<'\n';
 cout<<(int)'A';
 double x; int y=8.5; x=y%3; cout<<"x="<<x<<" y="<<y<<'\n';
 double x; int y=8; x=y/3; cout<<"x="<<x<<" y="<<y<<'\n';
 double w=2.5; cout<<(!w); cout<<((!w)++); cout<<(!w+2)++;
 cout<<sizeof("ab9*")<<'\t'<<sizeof("a\nb");
 double x=3; double y=(x<7)?1:0; cout<<y<<"\n";
 int m=2, n=5, p=10; p=(m=n, n<20); cout<<"p="<<p<<'\n';
 int x=3; double y=25.2, z; x=y; cout<<x<<'\n';
16. Pentru un număr întreg citit de la tastatură, să se afișeze valoarea numărului și
valoarea opusului său în zecimal, hexazecimal, octal;
17. Folosind operatorul ternar, să se tipărească maximul dintre a,b,c citiți de la tastatură.
Să se scrie secvențele echivalente fără a folosi instructiunea if. (Indicație:
int max_a_b=a>b?a:b; max_a_b_c=a>b?(a>c?a:c):(b>c?b:c);)

Autor: Diana Ştefănescu 10

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