INSTRUCŢIUNEA IF
Instructiunea if este instructiunea de decizie.
Format 1: Format 2 :
if (expresie) if (expresie)
instructiune-1 instructiune-1
else
instructiune-2
Instructiunea functioneaza astfel:
- se determina valoarea de adevar pentru expresie; daca este diferita de zero este adevarata, iar daca este zero este falsa;
- daca expresia este adevarata, atunci si īn formatul 1 si īn formatul 2 se executa instructiunea-1;
- daca expresia este falsa, atunci īn formatul 1 nu se executa nimic, iar īn formatul 2 se executa instructiunea -2.
Deoarece o expresie este considerata adevarata daca este diferita de zero īn limbajul C īn loc de:
if (expresie! = 0 )
este suficient sa scriem:
if (expresie)
pentru a face o oarecare prescutare, cu toate ca unii programatori obisnuiti sa lucreze īn alte limbaje ar fi tentati sa foloseasca prima forma.
Se pot utiliza si secvente de instructiuni if imbricate. O astfel de constructie apare atunci cānd instructiune-1 si/sau instructiune-2 reprezinta tot o instructiune if. Deoarece partea de else a unei instructiuni if este optionala sunt situatii cānd pot apare ambiguitati. Īn aceste cazuri trebuie cunoscuta conventia ca else se asociaza cu cel mai apropiat if. Pentru a observa mai usor asocierea si pentru o mai mare claritate a programului se recomanda scrierea acestuia folosind alinierea prin identatie.
Aceste ambiguitati se rezolva folosind acoladele cu ajutorul carora se poate face asocierea dorita.
Pentru a exemplifica cele de mai sus, īn continuare este dat un exemplu de secventa de program care calculeaza maximul a trei numere a, b, c:
/ * Gresit */ / * Corect */
.................. ...................
max = c; max = c;
if (a>b) if (a > b)
if (a > c) if (a > c)
max = a; max = a;
else else
if (b > c) if (b > c)
max = b; max = b;
.................... .....................
Primul exemplu este gresit deoarece else se asociaza cu al doilea if nu cu primul asa cum este corect si cum indica si alinierea. Aceasta ambiguitate este rezolvata īn secventa din partea dreapta utilizānd acoladele (deci blocul) si astfel se asociaza corect else cu primul if.
Pentru a īntelege mai bine instructiunea if urmariti programul urmator, care verifica daca trei numere a, b, c pot fi laturile unui triunghi, si īn caz afirmativ determina ce fel de triunghi este : echilateral, isoscel sau scalen.
Exemplu 3.3.1.
# include <stdio.h>
main ( )
float a, b, c;
print f(" Laturile triunghiului (a, b, c):");
scanf ("% f, % f, % f", &a, &b, &c);
if (a+b>c && b+c > a&& c+a >b)
if (a = = b && b = = c && c = = a)
printf (" Triunghi echilateral \ n");
else
if (a = = b b = = c c = = a)
printf (" Triunghi isoscel \ n");
else
printf (" Triunghi scalen \ n");
else
printf (" Nu pot fi laturile unui triunghi \ n");
Exemplu 3.3.2.
Rezolvarea ecuatiei de gradul 2 : ax2 + bx +c = 0
# include "stdio.h"
# include "math.h"
main ( )
double a, b,c,d,r,re, im,x1,x2;
printf (" Rezolvarea ecuatiei de gradul 2 \n ");
printf (" Introduceti coef. a, b, c: ");
scanf("%1f, %1f, %1f",&a, &b, &c);
if (a = = 0)
if(b = = 0)
if(c == 0)
printf(" Ecuatie nedetermniata \n");
else
printf("Ecuatie imposibila \n");
else
printf("Ecuatie de gr.1: x= %f \n", -c/b);
else
r = ((d = b b -4 a c)) = 0? sqrt (d) (-d)); if (d>0)
x1 = (-b +r)/2/a ; x = (-b-r)/2/a;
printf ("Rad. reale distincte: x1 = %f x2= %f\n", x1,x2);
else
if (d = = 0)
printf("Rad. reale egale: x1=x2=%f \n", -b/2/a);
else
re = -b/2/a; im =r/2/a;
printf("Rad. complexe conjugate :re =%f im = %f \n", re im);
|