CHAPTER 5 1 ISTRUZIONI DI SELEZIONE ISTRUZIONI Finora abbiamo visto istruzioni di assegnamento. La maggior parte delle istruzioni C rientrano in 3 categorie: 2 • Istruzioni di selezione : if e switch • Istruzioni di iterazione: while, do, e for • Istruzioni di salto: break, continue, and goto. (return) OPERATORI RELAZIONALI < > <= >= minore di maggiore di minore o uguale a maggiore o uguale a Questi operatori producono 0 (falso) oppure 1 (vero) 3 Possono essere usati per confrontare interi o float OPERATORI RELAZIONALI La precedenza degli operatori relazionali è più bassa di quella degli operatori aritmetici. significa (i + j) < (k – 1) 4 i+j<k-1 OPERATORI DI UGUAGLIANZA == != uguale a diverso da Questi operatori producono 0 (falso) oppure 1 (vero) Gli operatori di uguaglianza hanno un aprecedenza più bassa rispetto agli operatori relazionali i < j == j < k è equivalente a 5 (i < j) == (j < k) OPERATORI LOGICI ! && || negazione and or L’operatore ! è unario, mentre && e || sono binari. 6 Producono duce 0 o 1 come risultato. OPERATORI LOGICI && e || hanno una precedenza più bassa rispetto agli operatori relazionali e di uguaglianza significa (i < j) && (k == m) 7 i < j && k == m L’ISTRUZIONE if L’istruzione if permette ad un programma di scegliere tra due alternative verificando il risultato di una espressione. if ( expression ) statement; Quando viene eseguita l’istruzione if viene valutata la expression se il suo valore non è zero, allora lo statement è eseguito 8 if (valore < 100000.00f) commissione = 500.00f + .017f * valore; ISTRUZIONI COMPOSTE Se si vogliono eseguire più istruzioni dopo il test dell’esperrione del if si inseriscono le parentesi { e } con la sequenzadi istruzioni da eseguire: if ( expression ) 9 { statements } ISTRUZIONI COMPOSTE { percentuale=.017f * valore; 10 commissione = 500.00f + percentuale;} ISTRUZIONI COMPOSTE if (valore < 100000.00f) {percentuale=.017f * valore; 11 commissione = 500.00f + percentuale;} LA CLAUSOLA else L’istruzione if può avere la clausola else : if ( expression ) statement; else statement; Lo statement che segue la parola else è eseguito se l’expression ha valore 0. Esempio: 12 if (i > j) max = i; else max = j; LA CLAUSOLA else Non è insolito che un istruzione if sia innestata all’interno di un’altra istruzione if : j) > k) = i; = k; > k) = j; = k; 13 if (i > if (i max else max else if (j max else max LA CLAUSOLA else Per evitare confusione usate le parettesi { e }: 14 if (i > j) { if (i > k) max = i; else max = k; } else { if (j > k) max = j; else max = k; } PROGRAMMA: Calcolare la commissione di un agente immobiliare Quando si acquista una casa attraverso un agenzia immobiliare viene pagata una commissione all’agente immobiliare. Si supponga che la commissione venga calcolata secondo la seguente tabella: Commissione 500€ + 1.7% 750€ + 0.66% 1000€ + 0.34% 2000€ + 0.12% 15 Importo della vendita sotto i 100000€ 100000€–200000€ 200000€–300000€ oltre i 300000€ PROGRAMMA: CALCULARE LA COMMISSIONE DI UN AGENTE IMMOBILIARE Il programma broker.c chiede all’utente di inserire il valore della casa, poi mostra la commissione dovuta all’agente immobiliare: 16 Inserisci il valore della casa: 150000 Commissione: 1740.00€ broker.c /* Calculare la commissione di un agente immobiliare */ #include <stdio.h> int main(void) { float commissione, valore; printf(”Inserisci il valore dell’immobile: "); scanf("%f", &valore); * valore; * valore; +.0034f*valore; +.0012f*valore; printf("Commissione: %.2f €\n", commissione); return 0;} 17 if (valore < 100000.00f) commissione = 500.00f +.017f else if (valore < 200000.00f) commission = 750.00f +.0066f else if (valore < 300000.00f) commissione = 1000.00f else commissione = 2000.00f Il problema del “DANGLING else” State attenti a situazioni come queste: if (y != 0) if (x != 0) result = x / y; else printf("Error: y is equal to 0\n"); L’indentazione direbbe che l’else si riferisce all’if più esterno, ma non è così. 18 C segue la regola che l’else si riferisce all’if più interno che non è già accoppiato con un altro if Il problema del “DANGLING else” Una corretta indentazione sarebbe if (y != 0) if (x != 0) result = x / y; else printf("Error: y is equal to 0\n"); L’utilizzo delle parentesi può essere di aiuto 19 if (y != 0) {if (x != 0) result = x / y; else printf("Error: y is equal to 0\n");} L’ISTRUZIONE switch 20 Una cascata di istruzioni if : if (grade == 4) printf("Excellent"); else if (grade == 3) printf("Good"); else if (grade == 2) printf("Average"); else if (grade == 1) printf("Poor"); else if (grade == 0) printf("Failing"); else printf("Illegal grade"); L’ISTRUZIONE switch switch (grade) { case 4: printf("Excellent"); break; case 3: printf("Good"); break; case 2: printf("Average"); break; case 1: printf("Poor"); break; case 0: printf("Failing"); break; default: printf("Illegal grade"); break; } 21 In alternativa si può usare l’istruzione switch : L’ISTRUZIONE switch La forma dell’istruzione switch è la seguente: 22 switch ( expression ) { case constant-expression : statements break; …… case constant-expression : statements break; default : statements break; } PROGRAMMA: GIOCO A PREMI In un gioco a premi, i primi 5 estratti vincono. I premi messi in palio vengono rivelati solo dopo l’estrazione e solo ai vincitori. Il programma premio.c chiede all’utente quale è la sua posizione nell’estrazione (cioè se è nella posizione 1, oppure 2, oppure 3, oppure 4, oppure 5) ed in accordo ad essa rivela il premio. Quale è la tua posizione? 3 23 Hai vinto 300 € premio.c /* Rivela il premio in accordo alla posizione*/ #include <stdio.h> int main(void) { int posizione, day, year; printf("Quale è la tua posizione? "); scanf(”%d", &posizione); vinto 500 €"); break; vinto 400 €"); break; vinto 300 €"); break; vinto 200 €"); break; vinto 100 €"); break; dispiace ma non c’è un premio per te"); 24 switch (posizione) { case 1: printf("Hai case 2: printf("Hai case 3: printf("Hai case 4: printf("Hai case 5: printf("Hai default: printf(”Mi break; }
© Copyright 2025 ExpyDoc