else
Transcript
else
ISTRUZIONI Finora abbiamo visto istruzioni di assegnamento. CHAPTER 5 La maggior parte delle istruzioni C rientrano in 3 categorie: 1 ISTRUZIONI DI SELEZIONE OPERATORI RELAZIONALI < > <= >= 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 La precedenza degli operatori relazionali è più bassa di quella degli operatori aritmetici. i+j<k-1 significa (i + j) < (k – 1) Questi operatori producono 0 (falso) oppure 1 (vero) 4 3 Possono essere usati per confrontare interi o float OPERATORI LOGICI OPERATORI DI UGUAGLIANZA == != ! && || uguale a diverso da negazione and or Questi operatori producono 0 (falso) oppure 1 (vero) L’operatore ! è unario, mentre && e || sono binari. Gli operatori di uguaglianza hanno un aprecedenza più bassa rispetto agli operatori relazionali Producono duce 0 o 1 come risultato. i < j == j < k è equivalente a L’ISTRUZIONE if OPERATORI LOGICI L’istruzione if permette ad un programma di scegliere tra due alternative verificando il risultato di una espressione. && e || hanno una precedenza più bassa rispetto agli operatori relazionali e di uguaglianza if ( expression ) statement; (i < j) && (k == m) Quando viene eseguita l’istruzione if viene valutata la expression se il suo valore non è zero, allora lo statement è eseguito if (valore < 100000.00f) commissione = 500.00f + .017f * valore; 8 significa 7 i < j && k == m 6 5 (i < j) == (j < k) ISTRUZIONI COMPOSTE 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: { percentuale=.017f * valore; commissione = 500.00f + percentuale;} if ( expression ) 9 10 { statements } LA CLAUSOLA else ISTRUZIONI COMPOSTE L’istruzione if può avere la clausola else : if ( expression ) statement; else statement; if (valore < 100000.00f) {percentuale=.017f * valore; commissione = 500.00f + percentuale;} Lo statement che segue la parola else è eseguito se l’expression ha valore 0. Esempio: 12 11 if (i > j) max = i; else max = j; LA CLAUSOLA else 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; 14 if (i > j) { if (i > k) max = i; else max = k; } else { if (j > k) max = j; else max = k; } 13 if (i > if (i max else max else if (j max else max Per evitare confusione usate le parettesi { e }: PROGRAMMA: Calcolare la commissione di un agente immobiliare PROGRAMMA: CALCULARE 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: Il programma broker.c chiede all’utente di inserire il valore della casa, poi mostra la commissione dovuta all’agente immobiliare: 16 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€ 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; State attenti a situazioni come queste: if (y != 0) if (x != 0) result = x / y; else printf("Error: y is equal to 0\n"); printf(”Inserisci il valore dell’immobile: "); scanf("%f", &valore); * valore; * valore; L’indentazione direbbe che l’else si riferisce all’if più esterno, ma non è così. +.0034f*valore; Il problema del “DANGLING else” L’ISTRUZIONE switch 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"); 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");} 20 printf("Commissione: %.2f €\n", commissione); return 0;} 18 C segue la regola che l’else si riferisce all’if più interno che non è già accoppiato con un altro if +.0012f*valore; 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” L’ISTRUZIONE switch L’ISTRUZIONE switch In alternativa si può usare 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; } 21 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; } PROGRAMMA: GIOCO A PREMI premio.c /* Rivela il premio in accordo alla posizione*/ 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. #include <stdio.h> int main(void) { int posizione, day, year; 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. printf("Quale è la tua posizione? "); scanf(”%d", &posizione); Quale è la tua posizione? 3 23 Hai vinto 300 € 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; }