3.2.13. Operatorii conditionali
2019/01/31 in Programare in C
Operatorii conditionali permit construirea de expresii a caror valoare sa depinda de valoarea unei conditii.
Prin conditie intelegem o expresie care poate avea doua valori: adevarat sau fals. In limbajul C, o conditie se reprezinta printr-o expresie oarecare. Ea are valoarea adevarat daca este diferita de zero si fals in caz contrar.
Numim expresie conditionala o expresie a carei valoare si tip este dependenta de valoarea unei conditii.
Un exemplu simplu de expresie conditionala este aceea care are ca valoare maximul dintre doua numere. Astfel, daca a si b sunt doua numere,
atunci valoarea expresiei care calculeaza maximul dintre a si b depinde de valoarea conditiei a>b
.
Intr-adevar, daca a>b
are valoarea adevarat, atunci expresia respectiva are valoarea a. In caz contrar
(adica a>b
are valoarea fals), expresia de calcul a maximului va avea valoarea b.
O expresie conditionala are formatul:
E1?E2:E3
unde E1, E2 si E3 sunt expresii.
Aceasta expresie se evalueaza astfel:
- se determina valoarea expresiei E1.
- daca E1 are o valoare diferita de zero (are valoarea adevarat), atunci valoarea si tipul expresiei conditionale coincide cu valoarea si tipul expresiei E2. Altfel (adica E1 are valoarea zero) valoarea si tipul expresiei conditionale coincide cu valoarea si tipul expresiei E3.
De aici rezulta ca valoare si tipul expresiei conditionale depinde de valoarea expresiei E1.
Folosind formatul de mai sus, calculul maximului dintre a si b se exprima cu ajutorul expresiei conditionale:
(a > b)?a:b
unde:
(a > b) | este expresia E1 (conditia); |
a | este expresia E2; |
b | este expresia E3. |
Operatorii conditionali sunt ? si :. Ei se folosesc totdeauna impreuna si in ordinea indicata in formatul expresiei conditionale.
Ei au prioritatea imediat mai mica decat a operatorului sau logic (||) si imediat mai mare decat prioritatea operatorilor de atribuire. Tinand seama de prioritatea operatorilor, rezulta ca se pot omite parantezele din expresia pentru calculul maximului dintre a si b:
a > b?a:b
Expresia conditionala este un caz particular de expresie si deci ea poate fi utilzata oriunde este legal sa apara, in program, o expresie.
De exemplu:
v = (E1?E2:E3)
este o expresie de atribuire - in partea dreapta a semnului de atribuire se afla o expresie conditionala. Ea poate fi scrisa mai simplu fara paranteze, deoarece operatorul de atribuire este mai putin prioritar decat operatorii conditionali.
Operatorii conditionali se asociaza de la dreapta la stanga, la fel ca si operatorii unari si de atribuire.
Exercitii:
3.19. Sa se scrie un program care citeste doua numere si afiseaza maximul dintre ele.
- Programul 044 - Maximul dintre doua numere cu operatori conditionali
#include <stdio.h>
main()
{
double a, b;
scanf("%lf %lf\n", &a, &b);
printf("a = %g\t b = %g\t max(a, b) = %g\n", a, b, a > b?a:b);
}
3.20. Sa se scrie un program care citeste un numar si afiseaza valoarea lui absoluta.
- Programul 045 - Valoarea absoluta a unui numar cu operatori conditionali
#include <stdio.h>
main()
{
double a;
scanf("%lf", &a);
printf("a = %g\t abs(a) = %g\n", a, a < 0 ? -a : a);
}
3.21. Sa se scrie un program care citeste doua numere intregi si afiseaza maximul dintre valorile lor absolute.
- Programul 046 - Valoarea absoluta a maximului dintre doua numere cu operatori conditionali
#include <stdio.h>
main()
{
int a, b, c, d;
scanf("%d %d", &a, &b);
printf("a = %d\tb =%d\t abs(a) = %d\t abs(b) = %d\n", a, b, c = a < 0?-a:a, d = b < 0?-b:b);
printf("max(abs(a),ass(b)) = %d\n", c < d?d:c);
}
3.22. Sa se scrie un program care citeste valoarea variabilei x si afiseaza valoarea functiei f(x), definita ca mai jos:
f(x) = | 3x2 + 7x - 10 | pentru x < 0 |
2 | pentru x = 0 | |
4x2 + 8 | pentru x > 0 |
- Programul 047 - Valorile unei functii matematice cu operatori conditionali
#include <stdio.h>
main()
{
int x;
scanf("%lf", &x);
printf("x = %g\tf(x) = %g\n", x, x<0 ? 3*x*x+7*x-10 : x>0 4*x*x-8 : 2);
}