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);
|