INSTRUCŢIUNEA EXPRESIE
O constructie īn care identificatorii, constantele si apelurile de functie sunt legate prin operatori este o instructiune expresie, daca este te 323d39d rmitenta cu punct si virgula.
Format:
expresie;
Exemple:
a = b = 0;
- - n;
gets (t);
sau alt exemplu mai complicat:
r = ((d = b b -4 a c)>0? sqrt (d): sqrt(-d));
La instructiunile expresie cu o constructie mai complicata trebuie mare atentie la regulile de precedenta si asociativitate pentru operatori. Atunci cānd precedenta nu convine se vor folosi parantezele care schimba ordinea de precedenta. Totusi, cānd expresiile contin operatori comutativi si asociativi (+, , & , !) ele pot fi rearanjate din punct de vedere a ordinii de evaluare, chiar cānd se afla īntre paranteze. De asemenea, ordinea de evaluare poate fi diferita la un calculator fata de alt calculator. Pentru a rezolva aceasta dificultate se desparte expresia īn expresii mai mici si se folosesc variabile temporare pentru memorarea rezultatelor intermediare, modalitate prin care se forteaza ordinea de evaluare.
De asemenea, īn limbajul C nu se specifica ordinea īn care se evalueaza argumentele functiilor.
Exemplu (gresit):
printf ( "%2d %10,8 %10,8f \n", grad , \
(x = (double) grad * PI /180, sin (x), cos (x)));
Aceasta instructiune ar trebui sa afiseze gradul, sinusul si cosinusul, dar ea produce rezultate gresite pe unele calculatoare, īntrucāt functia cosinus poate fi apelata īniante de atribuirea valorii īn radiani lui x, si īn aceasta situatie argumentul functiei cos este necunoscut sau are o valoare atribuita anterior.
Corect este :
x = (double) grad PI/180;
printf ( "%2d % 10,8 f %10,8f \n", grad , sin(x), cos (x));
Despre instructiunea expresie mai trebuie spus ca valoarea expresiei este neglijata īn cadrul programului, totusi aceasta instructiune este des folosita pentru efectele ei colaterale: atribuiri, apeluri de functii etc.
|