Capitolul 2.11. Expresii conditionale

Vezi subiectul anterior Vezi subiectul urmator In jos

Capitolul 2.11. Expresii conditionale

Mesaj  zooky la data de Mier Mar 18, 2009 11:52 am

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.
avatar
zooky
Moderator
Moderator

Numarul mesajelor : 147
Data de inscriere : 15/03/2009
Varsta : 24
Localizare : Cernatesti City

Vezi profilul utilizatorului http://e-learning.forumhit.ro

Sus In jos

Vezi subiectul anterior Vezi subiectul urmator Sus


 
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum