Sunteți pe pagina 1din 16

In cursul trecut

• Functia de iesire scanf()


• Alte functii de intrare/iesire
• Operatorii aritmetici
• Operatorii de incrementare/decrementare
• Operatorii booleeni

PCLP4 - 1
In cursul de astazi
• Operatorii de atribuire
• Operatorul conditional, operatorul dimensiune
• Operatorii de fortare a tipului, operatorul virgula
• Operatorii paranteza
• Alti operatori
• Precedenta si asociativitatea operatorilor

PCLP4 - 2
Operatori de atribuire (1)
1. Atribuire simpla =
v = expresie
ex. a = 17;
pi = 3.14;
tensiune = rezistenta * curent;
v = a + v1 = b + c;
Obs. - asociativitate de la dreapta la stanga

PCLP4 - 3
Operatori de atribuire (2)
2. Atribuire compusa op=
unde op poate fi: /, *, %, -, +, <<, >>, &, ^, |
si unde:
v op= expresie ≡ v = v op (expresie)
ex.:
i += 9; ≡ i = i + 9;
i *= j +7; ≡ i = i * (j + 7);
int a = 9;
a >>= 2; ≡ a = a >> 2; → a=2

PCLP4 - 4
Operatori de atribuire (3)
Exemplu: Sa se calculeze valorile expresiilor 2x2+3x si
2x2+3x-10 pentru x citit de la consola.
#include <stdio.h>
void main()
{ double x, y;
printf(″introduceti numarul:″);
scanf(″%lf″, &x);
printf(″x=%lf, y=2*x*x+3*x=%lf\n″, x, y=2*x*x+3*x );
y -= 10;
printf(″x=%lf, y=2*x*x+3*x-10=%lf\n″, x, y);
}
PCLP4 - 5
Operatorul conditional (1)
expresie1 ? expresie2 : expresie3
- expresie1 este o conditie
ex. int a = 9, b = 14;
b = (b>a)?(a+1):(a-1);
Exemplul 1: Afisarea valorii absolute a unui numar.
#include <stdio.h>
void main()
{ int a;
scanf(″%d″, &a);
printf(″a=%d\tabs(a)=%d\n″, a, a<0 ? –a : a);
}
PCLP4 - 6
Operatorul conditional (2)
Exemplul 2: Sa se afiseze minimul dintre valorile a
doua numere intregi citite de la consola.
#include <stdio.h>
void main()
{ int x, y;
printf(″introduceti numerele:″);
scanf(″%d%d″, &x, &y);
printf(″x=%d, y=%d, min(x,y)=%d\n″,x, y, x<y?x:y);
}
PCLP4 - 7
Operatorul conditional (3)
Exemplul 3: Sa se afiseze minimul dintre valorile
absolute a doua numere intregi citite de la consola.
#include <stdio.h>
void main()
{ int x, y, a, b;
printf(″introduceti numerele:″);
scanf(″%d%d″, &x, &y);
printf(″x=%d, y=%d, abs(x)=%d, abs(y)=%d\n″,x, y,\
a=x<0?–x:x, b=y<0?-y:y);
printf(″min( abs(x),abs(y))=%d\n″, a<b?a:b);
}
PCLP4 - 8
Operatorul dimensiune
- operator unar cu precedenta mare
sizeof data
sizeof (tip)
ex.1 int x, y; y 2
printf(″y = %d\n″, y = sizeof x);
ex.2 double x[8];
int a, b; a 8
a = sizeof x[4];
b 64
b = sizeof x;
ex.3 a = sizeof (char); a 1
PCLP4 - 9
Operatorul de fortare a tipului (1)
- operator unar cu precedenta mare
(tip) operand
Exemplul 1: Calculeaza radacina patrata a unui
numar intreg citit de la consola.
#include <stdio.h>
#include <math.h>
void main() double sqrt(double);
{ long int nr;
printf(″introduceti numarul:″);
scanf(″%ld″, &nr);
printf(″nr=%ld, sqrt(nr)=%lf\n″, nr, sqrt((double)nr);
} PCLP4 - 10
Operatorul de fortare a tipului (2)
Exemplul 2: Afiseaza valoarea expresiei (x+1)/x cu 8
zecimale pentru un numar intreg citit de la consola.

#include <stdio.h>
void main()
(x+1)/x este intreg !!!
{ long int x;
printf(″introduceti numarul:″);
scanf(″%ld″, &x);
printf(″x=%ld, (x+1)/x=%.8lf\n″, x, ((double)x+1)/x;
}

PCLP4 - 11
Operatorul virgula
expresie1 , expresie2 , expresie3, …, expresieN
Exemplu: Sa se afiseze maximul dintre valorile absolute a doua
numere intregi citite de la consola.
#include <stdio.h>
void main()
{ int x, y, a, b;
printf(″introduceti numerele:″);
scanf(″%d%d″, &x, &y);
printf(″x=%d, y=%d, max( abs(x),abs(y))=%d\n″, x,\
y, ((a=x<0?–x:x), (b=y<0?-y:y), (a>b?a:b)));
}
PCLP4 - 12
Operatorii paranteza
(expresie)
- au prioritatea cea mai mare
- impun ordinea efectuarii operatiilor
- nu se aplica operatorilor de incrementare/decrementare
si operatorului adresa:
(a+10)++; --(x+y); &(i+j);
[expresie]
- utilizate pentru indicii tablourilor (op. de indexare)
ex.: a[7]; a[2*i+j]
PCLP4 - 13
Alti operatori
• operatorul adresa (de referentiere) – &
• operatorul de indirectare (de dereferentiere) – *
• operatorii de accesare a componentelor unei
structuri – . si ->
• operatorii unari + si -
b= +a; b = -a
ex.: int x, *pa, a[10];
pa = &a[7];
x = *pa;
*&x;
PCLP4 - 14
Precedenta operatorilor
( ) [ ] . ->
(tip) sizeof ++ -- ! ~ + - & * ←op.unari
* / %
+ -
<< >>
< <= > >=
== !=
&
^
|
&&
||
?:
= += -= *= /= %= <<= >>= &= |= ^=
,
PCLP4 - 15
Asociativitatea operatorilor
• operatorii unari, de atribuire si cel conditional au
asociativitatea de la dreapta la stanga
. (tip) sizeof ++ -- ! ~ + - & *
= += -= *= /= %= <<= >>= &= |= ^=
?:

• ceilalti operatori au asociativitatea de la stanga la


dreapta

PCLP4 - 16

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