Linguaggio C Costrutti if e while Corso di Informatica Laurea in Fisica prof. ing. Corrado Santoro A.A. 2009-10 Costrutto “if” False Cond True ... ... ... ... ... ... Corrado Santoro, Informatica, Lezione 6 -Costrutti if e while if (cond) { /* codice per Cond VERA */ } else { /* codice per Cond FALSA */ } 2 Eq di secondo grado: flow chart START X1 = (- B – SQRT(Delta)) / (2*A) X2 = (- B + SQRT(Delta)) / (2*A) A, B, C No Delta = B*B - 4*A*C Delta < 0 X1, X2 Yes “nessuna soluzione” Corrado Santoro, Informatica, Lezione 6 -Costrutti if e while END 3 Implementazione in C #include <stdio.h> #include <math.h> main() { float a, b, c, delta; a = 2; b = -6; c = 1; delta = b*b – 4*a*c; if (delta < 0) { printf(“Nessuna soluzione } else { float x1, x2; x1 = (-b + sqrt(delta)) / x2 = (-b - sqrt(delta)) / printf(“Le soluzioni sono } getchar(); } Corrado Santoro, Informatica, Lezione 6 -Costrutti if e while in R\n”); (2 * a); (2 * a); %f e %f\n”, x1, x2); 4 Implementazione in C #include <stdio.h> #include <math.h> main() { float a, b, c, delta; a = 2; b = -6; c = 1; delta = b*b – 4*a*c; if (delta < 0) printf(“Nessuna soluzione else { float x1, x2; x1 = (-b + sqrt(delta)) / x2 = (-b - sqrt(delta)) / printf(“Le soluzioni sono } getchar(); } in R\n”); (2 * a); (2 * a); %f e %f\n”, x1, x2); Se un blocco contiene una sola istruzione, è possibile omettere le parentesi graffe Corrado Santoro, Informatica, Lezione 6 -Costrutti if e while 5 Operatori di Confronto • Uguale – Es.: == if (a == 0) ... • Maggiore – Es.: > if (a > 0) ... • Minore – Es.: < if (a < 0) ... • Diverso – Es: != if (a != 0) ... • Maggiore o uguale >= • Minore o uguale <= Corrado Santoro, Informatica, Lezione 6 -Costrutti if e while 6 Variante: “if” senza “else” False Cond True ... ... if (cond) { /* codice per Cond VERA */ } ... Corrado Santoro, Informatica, Lezione 6 -Costrutti if e while 7 Condizioni multiple • E' possibile inserire nell'if un predicato booleano qualunque, composto da varie condizioni legate da connettivi AND e OR • AND LOGICO: && • OR LOGICO: || • Sintassi: – if ((cond1) op_logico (cond2) op_logico (…)) {…} • Esempio 1: stampa a e b se entrambe sono diverse da zero – if ((a !=0) && (b !=0)) printf(“%d, %d\n”, a, b); • Esempio 2: stampa a e b se almeno una è diversa da zero – if ((a !=0) || (b !=0)) printf(“%d, %d\n”, a, b); Corrado Santoro, Informatica, Lezione 6 -Costrutti if e while 8 Cicli: costrutto “while” Cond False True ... ... while (cond) { /* codice da eseguire fintanto che cond è VERA */ } ... Corrado Santoro, Informatica, Lezione 6 -Costrutti if e while 9 L'algoritmo MCD START A, B B=B-A No No A=B Yes “MCD = “, A Corrado Santoro, Informatica, Lezione 6 -Costrutti if e while A>B A=A-B Yes END 10 L'algoritmo MCD modificato START A, B B=B-A No Yes A != B No “MCD = “, A Corrado Santoro, Informatica, Lezione 6 -Costrutti if e while A>B A=A-B Yes END 11 MCD: Implementazione in C #include <stdio.h> main() { int a, b; a = 232; b = 12; while (a != b) { if (a > b) a = a – b; else b = b - a; } printf(“MCD = %d\n”, a); getchar(); } Corrado Santoro, Informatica, Lezione 6 -Costrutti if e while 12