Introduzione al Linguaggio C
di C. Munisso
Capitolo 4 - Le istruzioni
4.2. Istruzioni condizionali
Le istruzioni condizionali consentono di eseguire istruzioni semplici o composte, blocchi di istruzioni, se il test eseguito è vero (valore nonzero).
Vi sono due istruzioni condizionali: if, else, switch.
4.2.1 Istruzione if else
La forma generale di questa istruzione è la seguente:
if(espressione condizionale)
{
prima istruzione o blocco istruzioni
}
else
{
seconda istruzione o blocco istruzioni
}
Se l'espressione condizionale viene risolta in un valore nonzero (true) verrà eseguita la prima istruzione o blocco istruzioni, se l'espressione condizionale viene risolta in un valore zero (false) verrà eseguita la seconda istruzione o blocco istruzioni.
È possibile omettere la clausola else dell'istruzione quando non è richiesta alcuna azione nella condizione "false".
Le parentesi graffe possono essere omesse se il blocco istruzioni che racchiudono è costituito da una singola istruzione.
Vediamo ora un esempio con le varie forme di questa istruzione condizionale. L'esempio richiede un numero intero in input e segnala se è pari o dispari, nel caso sia pari, segnala inoltre se è inferiore a 30, nel caso sia dispari, segnala se è superiore a 10.

001 Abbiamo utilizzato una funzione di libreria, la 'atoi' che converte il valore ASCII del carattere in input nel suo corrispondente numerico, in questo caso abbiamo inoltre nidificato le due funzioni, viene per prima eseguita la 'gets' ed il suo valore di ritorno passato alla 'atoi', quindi il valore ritornato da quest'ultima viene assegnato alla variabile 'n'.
002 Questa istruzione if valuta n modulo 2, quindi se il risultato dell'espressione e` nonzero (numero dispari), la condizione e` vera e quindi viene eseguito il rispettivo blocco istruzioni.
003 Questa condizione if contenuta nel blocco istruzioni valuta se 'n' sia superiore a 10, notiamo l'assenza delle parentesi graffe: in questo caso viene eseguita solo la prima istruzione che segue che unicamente per motivo di leggibilità del codice è stata inserita sulla stessa riga.
004 Istruzione else relativa alla istruzione 'if' 002, viene eseguita solo se n modulo 2 da come risultato zero (false).
005 Questa istruzione controlla che 'n' sia nonzero per l'esecuzione del blocco istruzioni.
006 Simile alla 003 ma con condizione di 'n' superiore a 30.
007 Istruzione else relativa alla 005 che viene eseguita solo nel caso di 'n' uguale a zero (false).
4.2.2 Istruzione switch
L'altra istruzione condizionale è istruzione switch che esegue una o più serie di casi basandosi sulla valutazione di una espressione. Il valore risolto di questa espressione deve essere di tipo int, normalmente viene effettuata in modo automatico la conversione di tipo.
La forma generale di questa istruzione è:
switch(espressione)
{
case costante : istruzioni...
case costante : istruzioni...
.............................
default: istruzioni...
}
Le parole chiave case e default sono label che vengono raggiunte in base alla valutazione dell'espressione.
Le case possono essere in numero arbitrario mentre la default deve essere unica. Il flusso inizia alla case il cui valore della costante è uguale al valore risolto dell'espressione di switch e prosegue fino ad incontrare una esplicita istruzione di interruzione determinata dalla parola chiave break. Quando nessun valore case è uguale al valore dell'espressione viene raggiunta la label default.
Vediamo un programma di esempio per l'istruzione switch:

Analizzando la sintassi dell'istruzione switch vediamo che l'espressione è costituita, in questo caso dalla variabile intera giorno ricevuta in input. Il blocco dello switch è costituito da 7 case con valori da 1 a 7 e un default.
Quando la variabile giorno assume valori da 1 a 7 vengono raggiunte le rispettive label case, nel solo caso del valore 6, avendo omesso l'istruzione break in case 6 il flusso prosegue anche per case 7.
Nel caso il valore di giorno sia inferiore a 1 o superiore a 7 viene raggiunta la default.
L'istruzione giorno++ (post-incremento) nella printf() di case 6 serve ad avere in output il valore 7 nella case successiva.
Torna all'indice