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.
|