Sunteți pe pagina 1din 6

5.

Aplicaii folosind operatori i expresii C/C++ (Applications using C/C++


operators and expressions)
1. Obiective:
Inelegerea noiunilor de expresie, operanzi i operatori
Trecerea n revist a principalilor operatori i reinerea celor mai importani
Inelegerea modului n care se face evaluarea expresiilor
Scrierea i rularea de programe simple care folosesc aceti operatori
2. Breviar teoretic
Operatorii sunt simboluri ce specific operaiile de efectuat asupra operanzilor. n urma aplicrii unui
operator se obine un rezultat.
Operatorii limbajului C se pot grupa pe clase astfel:
aritmetici
o unari : + (fr efect), - (negativare)
o binari :
multiplicativi
*,
nmulire ;
/,
mprire, dac sunt ntregi rezultatul va fi partea ntreag a ctului;
%,
modulo, doar pentru operanzi ntregi i are ca i rezultat restul
mpririi ntregi;
aditivi
+,
adunare
-,
scdere
de relaie i de egalitate
o operatori de relaie, care sunt: <, <=, >, >=,
o operatori de egalitate, care sunt:
==,
egal
!=,
diferit.
logici
o operatori pe operand (normali) de urmtoarele tipuri:
!, negaia logic, care se utilizeaz astfel:
!operand = 0 (False), dac operand 0
!operand = 1 (True), dac operand = 0.
&&, i logic,
E1 && E2, i are valoarea 1 (True) dac E1 i E2 sunt ambele True n rest
are valoarea 0 (False).
||, sau logic,
E1 || E2 care are valoarea 0 (False) dac ambele expresii E1 i E2 au
valoarea 0 (False). n rest expresia are valoarea 1 (True).
o operatori pe bii
~, complement fa de unu, schimb fiecare bit 1 al operatorului n 0, respectiv
fiecare bit 0 n 1;
<<, deplasare la stnga a valorii primului operand cu un numr de poziii egal cu
valoarea celui de-al doilea operand, forma de utilizare fiind:
op1 << op2
este echivalent cu nmulirea cu puteri ale lui 2;
>>, deplasare la dreapta a valorii primului operand cu un numr de poziii egal cu
valoarea celui de-al doilea operand, forma de utilizare fiind:
op1 >> op2
este echivalent cu mprirea cu puteri ale lui 2;
&, i logic pe bii, se execut bit cu bit coform lui I-LOGIC; este folosit la lucrul
cu mti;
^, sau exclusiv pe bii, se execut bit cu bit conform lui SAU-EXCLUSIV; este
folosit pentru a anula sau seta diferii bii.

|, sau logic pe bii, se execut bit cu bit conform lui SAU-LOGIC; este folosit pentru
a seta diferii bii.

de atribuire (asignare)
o asignare simpl, care se noteaz prin caracterul = i are forma: v=(expresie) unde v este o
variabil simpl, referin la un element de tablou sau de structur. Se asociaz de la dreapta
la stnga astfel:vn==v1=v=expresie; asignarea fcndu-se mai nti v=expresie i apoi se
asociaz lui v1 apoi v2 i tot aa pn la vn.
o asignare compus, caz n care pentru atribuire n afar de caracterul = se mai folosete i
forma: operator=, unde operator poate fi unul binar aritmetic sau unul logic pe bii, i deci
poate fi unul din: /, %, *, -, +, <<, >>, &, ^, | .
Structura : var operator= expresie
este echivalent cu
var = var
operator (expresie)
o incrementare i decrementare, sunt operatori unari. Acetia sunt ++ i --, putnd fi
postfixai(dup operand), respectiv prefixai (naintea operandului).
de forare a tipului sau de conversie explicit (cast)
o (tip) operand prin care valoarea operandului se convertete la tipul indicat.
de determinare a dimensiunii
o sizeof data sau sizeof (tip), determinnd dimensiunea n octei a unei date sau a unui tip;
de adresare(&, refereniere) i de indirectare(*, derefereniere)
parantez
o parantezele rotunde, ( )
o paranteze ptrate, [ ]
condiionali
o E1 ? E2 : E3,
unde E1, E2, E3 sunt expresii.
virgul
o leag dou expresii n una singur astfel:
exp1, exp2
ali operatori (la structuri):
o punct .
o sgeat ->

O expresie poate folosi operatori din clase diferite, la evaluarea ei inndu-se cont de:
preceden (prioritate): d ordinea de efectuare a operaiilor;
asociativitate: indic ordinea de efectuare a operaiilor care au aceeai preceden; poate fi stnga>dreapta (S->D) sau dreapta->stnga (D->S);
regula conversiilor implicite: asigur stabilirea unui tip comun pentru ambii operanzi, la fiecare
operaie care solicit acest lucru i n care tipurile difer; regula de baz: se promoveaz tipul cu
domeniu de valori mai mic ctre tipul cu domeniul de valori mai mare;
Ordinea de evaluare dat de preceden i asociativitate poate fi modificat grupnd operaiile cu ajutorul
parantezelor.
3. Exemple
Operatori condiionali
Exemplul 1:
#include <iostream>
using namespace std;
void main (void)
{
double n1, n2, n3;
cout << "Introduceti 3 numere: ";
cin >> n1 >> n2 >> n3;

cout << (n1 <= n2 && n2 <= n3 ? "Sunt in ordine" : "Nu sunt in ordine") << '\n';
}//end main
Operatori logici
Exemplul 2:
#include <iostream>
using namespace std;
int IsAlpha (char ch);
void main (void)
{
char ch;
cout << "Introduceti un caracter: ";
cin >> ch;
cout << (IsAlpha(ch) != 0 ? "Este o litera" : "Nu este o litera") << '\n';
}//end main
int IsAlpha (char ch)
{
return ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z';
}// end IsAlpha
Operatori pe bii
Exemplul 3: program care aplic operatorii pe bii unor valori dup care le afieaz n zecimal i octal.
#include <iostream>
using namespace std;
void main(void)
{
unsigned char x = '\011';
unsigned char y = '\027';
cout << "x = " << oct << short(x) << '\n';
cout << "y = " << oct << short(y) << '\n';
cout << "~x = " << oct << (short)(~x) << '\n';
cout << "x & y = " << oct << (short)(x & y) << '\n';
cout << "x | y = " << oct << (short)(x | y) << '\n';
cout << "x ^ y = " << oct << (short)(x ^ y) << '\n';
cout << "x << 2 = " << oct << (short)(x << 2) << '\n';
cout << "x >> 2 = " << oct << (short)(x >> 2) << '\n';
}//end main
Operatori de atribuire multipl i de incrementare/decrementare
Exemplul 4: program care citete de la consol un numr ntreg i realizeaz cu el operaii de nmulire,
mprire modulo, sau exclusiv pe bii, i pe bii.
#include <stdio.h>
void main(void)
{
int x;

printf("Introduceti numarul x: ");


scanf("%d", &x);
x *= 4;
printf("\n%d", x);
x %= 2;
printf("\n%d", x);
x ^= 0x0f;
printf("\n%x", x);
x &= 0x01;
printf("\n%x\n", x);
}//end main
Exemplul 5: program care citete un numr ntreg i aplic operatorul de incrementare postfixat i operatorul
de decrementare prefixat, afind de fiecare dat rezultatul.
#include <stdio.h>
void main(void)
{
int x;
printf("Introduceti numarul x: ");
scanf("%d", &x);
printf("\n%d", x++);
printf("\n%d", x);
printf("\n%d", --x);
printf("\n%d\n", x);
}//end main
Operatori de determinare a dimensiunii i de forare a tipului
Exemplul 6: program care afieaz dimensiunea (n octei) pentru unele tipuri de date i pentru nite
constante.
#include <iostream>
using namespace std;
int main (void)
{
cout << "dimensiunea tipului char = " << sizeof(char) << " octeti\n";
cout << "dimensiunea tipului char* = " << sizeof(char*) << " octeti\n";
cout << "dimensiunea tipului short = " << sizeof(short) << " octeti\n";
cout << "dimensiunea tipului int = " << sizeof(int) << " octeti\n";
cout << "dimensiunea tipului long = " << sizeof(long) << " octeti\n";
cout << "dimensiunea tipului float = " << sizeof(float) << " octeti\n";
cout << "dimensiunea tipului double = " << sizeof(double) << " octeti\n";
cout << "dimensiunea pentru 1.55 = " << sizeof(1.55) << " octeti\n";
cout << "dimensiunea pentru 1.55L = " << sizeof(1.55L) << " octeti\n";
cout << "dimensiunea pentru SALUT = " << sizeof("SALUT") << " octeti\n";
}//end main

5. Teme:
1. S se scrie un program care afieaz valoarea polinomului de gradul 3 pentru o anumit valoare a
variabilei reale x.
2. S se scrie un program care citete lungimile laturilor unui triunghi (folosind variabile ntregi) i
afieaz aria triunghiului ca valoare real.
3. S se scrie un program care afieaz valorile biilor unei variabile de tip unsigned char aplicnd
succesiv operatorul de deplasare dreapta i operatorul %.
4. S se scrie un program care monitorizeaz un canal de 16/32/64 bii. Pentru aceasta citii de la
tastatur o valoare ntreg fr semn a care va fi afiat n zecimal, binar, octal i hexazecimal.
Folosii o funcie pentru conversia numerelor din baza 10 n baza 2. Implementai o alt funcie
numit getsets() care primete trei valori ca parametri:
- x: valoarea citit de la tastatur
- p: poziia unui bit din cei 16/32 sau 64 de bii (numrnd de la dreapta)
- n: numrul de bii care vor fi extrai din tabel.
Funcia returneaz, aranjai spre dreapta, acei n bii ai valorii x, pornind de la poziia p, unde
p>8*sizeof(x) i p>n. Afiai rezultatul n binar, octal i hexazecimal.
5. S se scrie un program care citete de la intrarea standard un numr ntreg i afieaz numrul de
zerouri din reprezentarea sa binar.
6. Se citete de la intrarea standard o valoare ntreag. S se afieze n format zecimal valoarea fiecrui
octet al ntregului citit.
7. Se citesc de la tastatur 2 numere reale. S se realizeze operaiile de adunare, scdere, nmulire i
mprire cu valorile date. S se afieze rezultatele obinute, apoi s se rotunjeasc valorile obinute
la valori ntregi, folosind operatorul cast i fr a folosi funcii specifice. S se afieze apoi valoarea
minim dintre numerele citite folosind operatorul condiional.
8. Citii de la tastatur mai multe caractere reprezentnd litere mici. S se transforme caracterele citite
n litere mari n 2 moduri: printr-o operaie aritmetic, respectiv folosind o operaie logic i o masc
adecvat.
9. Citii de la tastatura 2 numere ntregi. Dac sunt egale, determinai aria cercului cu raza egal cu
valoarea citit, iar dac sunt diferite calculai aria dreptunghiului cu laturile egale cu valorile date.
Afiai aria calculat specificnd forma geometric pentru care s-a fcut calculul.
5. Homework:
1. Write a program that displays the value of a 3-rd degree polynom, calculated in a certain point x.
2. Write a program that reads from the keyboard 3 values representing the lengths of a triangles
sides and than displays the triangles area.
3. Write a program that reads an unsigned char value and displays the binary values resulting after
recursively applying the shift right and the % operators.
4. Write a program that monitors a communications channel on 16/32/64 bits. In order to do that,
read from the keyboard an unsigned int value a, that will be displayed in decimal, binary, octal and
hexadecimal counting bases. Use a function for converting the number from base 10 in base 2.
Implement another function called getsets() that receives 3 parameters:
- x: the value read from the keyboard
- p: the position of a bit of those 16/32 or 64 bits (counting from the right).
- n: the number of bits that will be extracted from the array.
The function returns, adjusted to the right, those n bits from the value x, starting with the position p,
where p>8*sizeof(x) and p>n. Display the result in binary, octal and hexadecimal
5. Write a program that reads from the standard input an integer number and displays the number of
zeroes from its binary representation.
6. Read an integer value from the standard input. Write, in decimal format, the value of each byte of
the value.
7. Read 2 float numbers from the keyboard. Calculate and display the results obtained by applying
the main arithmetic operations (+, -, *, /) upon them. Cast the results into integer values, whithout
using any specific rounding functions. Display the minimum input value using the conditional
operator.

8. Read from the keyboard several lowercase characters. Transform them into uppercase letters
using:
- an arithmetic operation;
- a logical operation, combined with a specific mask;
9. Read 2 integer values from the keyboard. If they are equal, determine the area of a circle that has
the radius equal with the read value. If the values are not equal, determine the area of the rectangle
that has as sides the read values. In both cases, display the name of the geometrical shape that
corresponds to the calculated area.

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