Capitolul 2.11. Expresii conditionale
:: Programare :: C & C++ :: Capitolul 2
Pagina 1 din 1
Capitolul 2.11. Expresii conditionale
Instructiunile
if (a < b)
z = a;
else
z = b;
calculeaza desigur in z maximul dintre a si b. Expresia conditionala, scrisa cu operatorul ternar "? :" ofera un mod alternativ pentru a scrie acest lucru precum si constructii similare. In expresia:
e1 ? e2 : e3
expresia e1 se evalueaza prima. Daca ea este nonzero (adevarata) atunci se evalueaza expresia e2 si aceasta este valoarea expresiei conditionale. Altminteri, se evalueaza e3 si aceasta este valoarea. Numai una din expresiile e2 si e3 se evalueaza. Deci, pentru a pune in z maximul dintre a si b:
z = (a > b) ? a : b; /* z = max(a, b) */
Trebuie sa notam ca expresia conditionala este intr-adevar o expresie si ca ea poate fi folosita exact ca oricare alta expresie. Daca e2 si e3 sint expresii de tipuri diferite, tipul reultatului se determina dupa regulile de conversie discutate mai inainte in acest capitol. De exemplu, daca f este un float si n este un int, atunci expresia
(n > 0) ? f : n
este de tipul double, indiferent daca n este pozitiv sau nu.
Parantezele nu sint necesare in jurul primei expresii a unei expresii conditionale, deoarece ponderea lui ? : este foarte mica, chiar deasupra asignarii. Ele sint totusi recomandate, pentru a face partea de conditie a expresiei mai usor de vazut.
Expresiile conditionale conduc adesea la un cod succint.
De exemplu, bucla urmatoare tipareste N elemente ale unui tablou, 10 pe linie, cu fiecare coloana separata printr-un blanc si cu fiecare linie (inclusiv ultima) terminata cu un singur caracter "linie noua".
for (i = 0; i << N; i++)
printf("%6d%c", a[i], (i % 10 == 9 || i == N-1) ? '\n' : ' ');
Un caracter "linie noua" se tipareste tot dupa al zecelea element si dupa al N-lea element. Toate celelalte elemente sint urmate de un blanc. Cu toate ca seamana cu un truc, este instructiv sa incercati sa scrieti lucrul acesta fara a folosi expresia conditionala.
Exercitiul 2.10. Rescrieti functia lower, care converteste literele mari in litere mici, cu o expresie conditionala in locul lui if-else.
if (a < b)
z = a;
else
z = b;
calculeaza desigur in z maximul dintre a si b. Expresia conditionala, scrisa cu operatorul ternar "? :" ofera un mod alternativ pentru a scrie acest lucru precum si constructii similare. In expresia:
e1 ? e2 : e3
expresia e1 se evalueaza prima. Daca ea este nonzero (adevarata) atunci se evalueaza expresia e2 si aceasta este valoarea expresiei conditionale. Altminteri, se evalueaza e3 si aceasta este valoarea. Numai una din expresiile e2 si e3 se evalueaza. Deci, pentru a pune in z maximul dintre a si b:
z = (a > b) ? a : b; /* z = max(a, b) */
Trebuie sa notam ca expresia conditionala este intr-adevar o expresie si ca ea poate fi folosita exact ca oricare alta expresie. Daca e2 si e3 sint expresii de tipuri diferite, tipul reultatului se determina dupa regulile de conversie discutate mai inainte in acest capitol. De exemplu, daca f este un float si n este un int, atunci expresia
(n > 0) ? f : n
este de tipul double, indiferent daca n este pozitiv sau nu.
Parantezele nu sint necesare in jurul primei expresii a unei expresii conditionale, deoarece ponderea lui ? : este foarte mica, chiar deasupra asignarii. Ele sint totusi recomandate, pentru a face partea de conditie a expresiei mai usor de vazut.
Expresiile conditionale conduc adesea la un cod succint.
De exemplu, bucla urmatoare tipareste N elemente ale unui tablou, 10 pe linie, cu fiecare coloana separata printr-un blanc si cu fiecare linie (inclusiv ultima) terminata cu un singur caracter "linie noua".
for (i = 0; i << N; i++)
printf("%6d%c", a[i], (i % 10 == 9 || i == N-1) ? '\n' : ' ');
Un caracter "linie noua" se tipareste tot dupa al zecelea element si dupa al N-lea element. Toate celelalte elemente sint urmate de un blanc. Cu toate ca seamana cu un truc, este instructiv sa incercati sa scrieti lucrul acesta fara a folosi expresia conditionala.
Exercitiul 2.10. Rescrieti functia lower, care converteste literele mari in litere mici, cu o expresie conditionala in locul lui if-else.
Subiecte similare
» Capitolul 2. TIPURI, OPERATORI SI EXPRESII
» Capitolul 2.10.Operatori si expresii de asignare
» Capitolul 3.3. ELSE-IF
» Capitolul 2.3. Constante
» Capitolul 3.2.IF-ELSE
» Capitolul 2.10.Operatori si expresii de asignare
» Capitolul 3.3. ELSE-IF
» Capitolul 2.3. Constante
» Capitolul 3.2.IF-ELSE
:: Programare :: C & C++ :: Capitolul 2
Pagina 1 din 1
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum
|
|