Prima di proseguire con le altre strutture di controllo, vediamo di chiarirci
le idee sull’uso di switch per mezzo di alcuni esempi
pratici.
Per cominciare compiliamo ed eseguiamo l'esempio seguente.
/*
* File lez35_1.c
*/
#include <stdio.h>
int main() {
char c = 'b';
switch (c) {
case 'a':
printf("Sono nel caso 'a'\n");
break;
case 'b':
printf("Sono nel caso 'b'\n");
break;
case 'c':
printf("Sono nel caso 'c'\n");
break;
}
return 0;
}
Cambiando il valore di inizializzazione della variabile c
possiamo vedere in che modo cambia l’output del programma.
Per esercizio, provate anche ad eliminare i break alla fine di
ogni case e a rieseguire il nuovo programma, scrivendo
anche il corrispondente Makefile.
Sebbene possa apparire addirittura fastidiosa la necessità di
dover riscrivere la parola chiave break alla fine di ogni
case, si presentano spesso dei casi in cui questa caratteristica
risulta molto utile, ad es. quando si vuole eseguire la stessa
istruzione per valori differenti dell’espressione.
Ne è un esempio il programma seguente:
/*
* File lez35_2.c
*/
#include <stdio.h>
int main() {
int i = 3;
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 9:
printf("i e' dispari e minore di 10\n");
break;
case 0:
case 2:
case 4:
case 6:
case 8:
printf("i e' pari e minore di 10\n");
break;
default:
printf("i e' maggiore o uguale a 10\n");
}
return 0;
}
Notiamo l'assenza di break dopo il caso default.
Come esercizio, provate ad estendere e modificare gli esempi precedenti
con altre soluzioni, ad es. utilizzando il costrutto if
invece della struttura switch.
Consideriamo adesso altre importanti strutture di controllo, che
consentono di eseguire cicli di istruzioni (loop), ovvero
di definire una sequenza di operazioni da effettuare un prestabilito
numero di volte o finché non si verifica una determinata condizione.
In C, il costrutto fondamentale per i cicli è l’istruzione
while, la cui forma è la seguente:
while (questa condizione
è vera)
esegui questa istruzione;
Si noti la forte somiglianza sintattica con il costrutto if.
Tuttavia esiste una differenza fondamentale: l’istruzione
while continua ad eseguire l’istruzione corrispondente
finché la condizione rimane verificata.
Quando la condizione è - o diventa - falsa, l’istruzione
non viene più eseguita e il controllo passa alla prima istruzione
che segue quella del ciclo while.
Ad es., il programma:
/*
* File lez35_3.c
*/
#include <stdio.h>
int main() {
int x = 3;
while (x >= 0)
printf("x = %d\n", x--);
printf("Fine\n");
}
produce sullo schermo il seguente output:
x = 3
x = 2
x = 1
x = 0
Fine
L'istruzione controllata da while può essere una singola
linea di codice o un blocco di istruzioni racchiuse tra parentesi
graffe:
while (questa condizione
è vera)
{
istruzione_1;
istruzione_2;
...
istruzione_n;
}
Grazie alle parentesi è possibile avere costrutti while
annidati, come nel seguente esempio:
*
* File lez35_4.c
*/
#include <stdio.h>
int main() {
int x = 3;
int y;
while (x > 0)
{
printf("x = %d\n", x--);
y = 0;
while (y <= 2) {
printf("\ty = %d", ++y);
}
printf("\n");
}
printf("Fine\n");
}
Si noti che se la condizione è falsa la prima volta che viene
valutata, le istruzioni del ciclo non vengono mai eseguite e il
controllo salta direttamente all'istruzione successiva al while.
L'istruzione while è in grado di accettare anche espressioni,
oltre che condizioni; in tal caso, quando l'espressione è un numero
diverso da 0 è considerata vera e le istruzioni del ciclo vengono
eseguite, quando vale 0 l'istruzione while termina.
Ad es. il ciclo del primo esempio può essere scritto correttamente
anche in questa forma:
int x = 4;
while (x--)
printf("x = %d\n", x);
Nella prossima lezione approfondiremo l'uso del ciclo while
e conosceremo due importanti funzioni per leggere i caratteri
da tastiera e scriverli su video.
Torna all'indice Generale del corso di Corso di C con Linux di Software Planet