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