Le strutture di controllo sono il cuore della logica di
qualsiasi programma scritto in C. Grazie a istruzioni come
if e
switch è
possibile prendere decisioni, mentre i cicli for,
while e
do...while consentono di automatizzare operazioni
ripetitive, riducendo il codice e migliorandone
l'efficienza.
Le strutture di controllo nel
linguaggio C: if, switch, for e while
Pubblicato il: 14-7-2026
Ultima Modifica: 14-7-2026
Ogni programma, anche il più semplice, deve essere in
grado di prendere decisioni e ripetere determinate
operazioni. Nel linguaggio C, questo è
possibile grazie alle strutture di controllo,
costrutti fondamentali che permettono di modificare il
flusso di esecuzione del programma in base a condizioni o
cicli.
Senza le strutture di controllo, un programma eseguirebbe
semplicemente le istruzioni una dopo l'altra, senza poter
reagire all'input dell'utente o eseguire operazioni
ripetitive.
In questa guida analizzeremo nel dettaglio le principali
strutture di controllo del linguaggio C:
✅ if
✅ if...else
✅ switch
✅ for
✅ while
✅ do...while
✅ break
✅ continue
Ogni argomento sarà accompagnato da esempi pratici e
spiegazioni dettagliate.
📖 Cosa sono le strutture di controllo?
Le strutture di controllo permettono al programma di:
eseguire istruzioni solo in determinate condizioni;
scegliere tra più alternative;
ripetere blocchi di codice;
interrompere o modificare il comportamento dei cicli.
In pratica, rappresentano la "logica" del programma.
🟢 L'istruzione if
L'istruzione if permette di
eseguire un blocco di codice solo se una determinata
condizione risulta vera.
Sintassi
if (condizione) {
istruzioni; }
Primo esempio
#include <stdio.h>
int main() {
int eta = 20;
if (eta >= 18)
{ printf("Sei
maggiorenne.\n"); }
return 0; }
Output:
Sei maggiorenne.
Poiché la condizione è vera, il messaggio viene
visualizzato.
🔍 Operatori di confronto
Le condizioni utilizzano normalmente questi operatori.
Operatore
Significato
==
uguale
!=
diverso
>
maggiore
<
minore
>=
maggiore o uguale
<=
minore o uguale
Esempio:
if (numero == 10)
⚙️ Operatori logici
È possibile combinare più condizioni.
Operatore
Significato
&&
AND
||
OR
!
NOT
Esempio:
if (eta >= 18 && eta <= 65)
Entrambe le condizioni devono essere vere.
🔵 if...else
Quando esistono due possibili alternative si utilizza
else.
Sintassi
if (condizione) {
istruzioni; } else { istruzioni; }
Esempio
#include <stdio.h>
int main() {
int voto = 22;
if (voto >= 18)
{ printf("Esame
superato.\n"); } else
{ printf("Esame non
superato.\n"); }
return 0; }
🟣 if...else if...else
Quando le alternative sono numerose.
if (media >= 90) {
printf("Ottimo"); } else if (media >= 70) {
printf("Buono"); } else if (media >= 60) {
printf("Sufficiente"); } else {
printf("Insufficiente"); }
Le condizioni vengono controllate dall'alto verso il
basso.
💡 Suggerimento
Quando le condizioni sono molte e riguardano lo stesso
valore, spesso è preferibile utilizzare
switch, che rende il codice più leggibile.
🟠 L'istruzione switch
Lo switch consente di scegliere
quale blocco di codice eseguire tra numerose alternative.
Sintassi
switch (variabile) {
case valore:
istruzioni; break;
default:
istruzioni; }
Esempio
#include <stdio.h>
int main() {
int scelta = 2;
switch (scelta)
{ case 1:
printf("Nuovo documento\n");
break;
case 2:
printf("Apri documento\n");
break;
case 3:
printf("Esci\n");
break;
default:
printf("Scelta non valida\n"); }
return 0; }
Output:
Apri documento
🚨 L'importanza del break
Il comando break interrompe lo
switch.
Senza break, l'esecuzione continua
nei casi successivi.
Esempio:
switch(numero) {
case 1:
printf("Uno\n");
case 2:
printf("Due\n");
case 3:
printf("Tre\n"); }
Se numero vale 1,
verranno stampati:
Uno
Due
Tre
Questo comportamento è chiamato fall-through.
📝 Il caso default
default viene eseguito quando
nessun case corrisponde.
default:
printf("Comando sconosciuto");
Non è obbligatorio, ma è sempre consigliato.
🔄 Il ciclo for
Il ciclo for è ideale quando il
numero di ripetizioni è noto.
Sintassi
for (inizializzazione; condizione;
incremento) { istruzioni; }
Esempio
#include <stdio.h>
int main() {
int i;
for(i = 1; i <= 5; i++)
{ printf("%d\n", i);
}
return 0; }
Output
1
2
3
4
5
🔍 Analisi del for
for(i = 1; i <= 5; i++)
Significa:
i = 1 → inizializzazione
i <= 5 → condizione
i++ → incremento
⏬ Ciclo decrescente
for(i = 10; i >= 1; i--) {
printf("%d\n", i); }
Output
10
9
8
...
1
♾️ Ciclo infinito
for(;;) {
printf("Ciao"); }
Questo ciclo non termina mai, a meno che non venga
interrotto con break o con la
chiusura del programma.
🔁 Il ciclo while
Il ciclo while viene utilizzato
quando non si conosce in anticipo il numero delle
ripetizioni.
Se la condizione rimane sempre vera, il ciclo diventa
infinito.
Esempio:
while(1) {
printf("Errore"); }
🔂 Il ciclo do...while
Diversamente dal while, il
do...while esegue sempre almeno una
volta il blocco di codice.
Sintassi
do { istruzioni;
} while(condizione);
Esempio
int numero = 10;
do {
printf("%d\n", numero); } while(numero < 5);
Output
10
Anche se la condizione è falsa, il blocco viene eseguito
una prima volta.
🛑 break
Il comando break interrompe
immediatamente un ciclo.
Esempio
for(int i = 1; i <= 10; i++) {
if(i == 6) break;
printf("%d\n", i); }
Output
1
2
3
4
5
⏭️ continue
continue salta l'iterazione
corrente e passa direttamente alla successiva.
for(int i = 1; i <= 5; i++) {
if(i == 3) continue;
printf("%d\n", i); }
Output
1
2
4
5
🧠 Cicli annidati
È possibile inserire un ciclo all'interno di un altro.
for(int r = 1; r <= 3; r++) {
for(int c = 1; c <= 4; c++) {
printf("* "); }
printf("\n"); }
Output
* * * *
* * * *
* * * *
🎯 Esempio pratico: tabellina del 7
#include <stdio.h>
int main() {
int i;
for(i = 1; i <= 10; i++)
{ printf("7 x %d =
%d\n", i, 7 * i); }
return 0; }
🎯 Esempio pratico: somma dei numeri
#include <stdio.h>
int main() {
int i; int somma = 0;
for(i = 1; i <= 100; i++) {
somma += i; }
printf("Somma = %d\n", somma);
return 0;
}
🎯 Esempio pratico: indovinare un numero
#include <stdio.h>
int main() {
int segreto = 8; int numero;
do {
printf("Indovina il numero: ");
scanf("%d", &numero);
if(numero < segreto)
printf("Troppo piccolo!\n");
if(numero > segreto)
printf("Troppo grande!\n");
} while(numero
!= segreto);
printf("Complimenti! Hai
indovinato.\n");
return 0; }
📊 Confronto tra le strutture di controllo
Struttura
Quando usarla
if
Per eseguire codice in base a una condizione
if...else
Per scegliere tra due alternative
if...else if...else
Per valutare più condizioni
switch
Per confrontare un'espressione con valori
costanti
for
Quando si conosce il numero di iterazioni
while
Quando il numero di iterazioni non è noto
do...while
Quando il codice deve essere eseguito almeno una
volta
break
Per interrompere un ciclo o uno
switch
continue
Per saltare l'iterazione corrente
💡 Buone pratiche
✔️ Usa sempre le parentesi graffe {}
anche quando il blocco contiene una sola istruzione: il
codice sarà più leggibile e meno soggetto a errori.
✔️ Evita cicli infiniti, a meno che non siano
realmente necessari (ad esempio nei server o nei
programmi che restano sempre in esecuzione).
✔️ Preferisci switch quando
devi confrontare lo stesso valore con molte costanti.
✔️ Usa nomi di variabili significativi, come
contatore, indice
o scelta, invece di nomi generici
quando possibile.
✔️ Controlla che la condizione di uscita dei cicli
possa essere raggiunta, altrimenti il programma potrebbe
bloccarsi.
🎓 Conclusioni
Le strutture di controllo sono il cuore della logica di
qualsiasi programma scritto in C. Grazie a istruzioni come
if e switch è
possibile prendere decisioni, mentre i cicli
for, while e
do...while consentono di automatizzare operazioni
ripetitive, riducendo il codice e migliorandone
l'efficienza.
Imparare a scegliere la struttura più adatta a ogni
situazione è una competenza fondamentale per ogni
programmatore. Con un po' di pratica, l'uso di queste
istruzioni diventerà naturale e ti permetterà di affrontare
problemi sempre più complessi con codice chiaro, ordinato e
facilmente manutenibile.