Le strutture iterative nel linguaggio C
Nella programmazione una struttura iterativa esegue un blocco di codice più volte (iterazioni) tramite un ciclo condizionato o incondizionato.
La differenza tra cicli condizionati e incondizionati. Un ciclo è condizionato se dipende dal verificarsi o meno dall'evento. Quindi, il numero delle iterazioni non si conosce a priori ( es. finché la variabile esci è uguale a N ). Un ciclo è incondizionato se il numero delle iterazioni è predefiito e conosciuto fin dall'inizio (es. 30 iterazioni).
Le principali strutture iterative nel linguaggio C sono le seguenti:
while
L'istruzione while è una struttura iterativa condizionata con controllo all'inizio.
while (condizione) {
// codice
}
Se la condizione è soddisfatta (vera), il blocco di codice viene eseguito.
Al termine dell'esecuzione, il programma torna all'inizio della struttura e ricomincia un nuovo ciclo se la condizione è ancora vera.
Nota. Si tratta di una struttura pre-condizionale perché il controllo avviene prima del blocco di codice. Quindi, se la condizione non è soddisfatta il blocco di codice non viene eseguito nemmeno una volta.
Le parentesi graffe della while posso ometterle se il blocco è composto da una singola istruzione.
Esempio
Questo programma stampa i numeri da 0 a 10.
#include <stdio.h>
int main()
{
int i=0;
while(i<10)
{
printf(" %d ",i);
i=i+1;
}
printf("End");
}
La struttura compie dieci iterazioni.
In ogni iterazione stampa la variabile del contatore (i) e la incrementa di 1.
0 1 2 3 4 5 6 7 8 9 End
Quando la variabile i è uguale a 10, la condizione del ciclo (i<10) non è più soddisfatta (falsa).
Quindi il programma esce dalla struttura ciclica e stampa a video la stringa "End".
do While
L'istruzione do while è una struttura iterativa condizionata con controllo alla fine.
do {
// codice
}
while (condizione);
In questo caso la condizione è posta alla fine del blocco di codice.
Se la condizione è soddisfatta (vera), il programma torna all'inizio del blocco di codice e lo esegue di nuovo.
Quindi, nella struttra do while il codice viene eseguito sempre almeno una volta.
Esempio
Questo programma stampa i numeri da 1 a 10.
#include <stdio.h>
int main()
{
int i=0;
do
{
printf(" %d ",i);
i=i+1;
}
while(i<10);
printf("End");
}
Il funzionamento è simile al precedente esempio ma il controllo è posto alla fine del ciclo.
Quindi, il blocco di codice viene eseguito almeno una volta anche se la condizione è falsa.
0 1 2 3 4 5 6 7 8 9 End
for
L'istruzione for è una struttura iterativa non condizionata.
for (partenza; condizione; incremento]) {
// codice
}
- Il primo parametro è il punto di partenza del ciclo. E' usato per inizializzare le variabili del ciclo.
- Il secondo parametro è la condizione che reitera il ciclo.
- Il terzo parametro è l'incremento o il decremento della variabile che conta le iterazioni del ciclo.
Il blocco di codice tra parentesi graffe è una sequenza di istruzioni.
Se il blocco è composto da una sola istruzione, le parentesi graffe posso ometterle.
Esempio
Questo codice stampa i numeri da 1 a 10 con la struttura for
#include <stdio.h>
int main()
{
int i=0;
for(i=0; i<10; i++)
{
printf(" %d ",i);
}
printf("End");
}
La struttura for compie 10 iterazioni.
In ogni iterazione stampa la variabile contatore (i).
0 1 2 3 4 5 6 7 8 9 End
Nel caso della struttura for il numero delle iterazione è sempre conosciuto fin dall'inizio.
Viceversa, nelle strutture while e do while il numero delle iterazioni potrebbe anche non essere conosciuto a priori.
Nota. Pur essendo cicli condizionati le strutture while e do while possono anche essere usate per realizzare un ciclo incondizionato. Pertanto, all'occorrenza while e do while realizzano le stesse funzionalità della struttura for. Per questa ragione, il mio consiglio è di abituarsi a usare prevalentemente le strutture while e do while.
E così via.