Cicli for annidati

In questa lezione ci eserciteremo con i cicli for annidati in C, cioè studieremo le iterazioni eseguite dentro un’altra iterazione.

Innanzitutto notiamo che nei cicli annidati, il ciclo più esterno esegue N volte il ciclo più interno. Infatti, al suo primo passo, il ciclo esterno mette in esecuzione quello interno. Questo a sua volta esegue il proprio blocco di codice fino alla conclusione. Dopo, al secondo passo, il ciclo esterno rimette in esecuzione quello interno. Ciò si ripete finché il ciclo esterno non termina.

Facciamo subito degli esempi per capirne il funzionamento.


Primo esempio sui cicli for annidati in C

Nel primo esempio che propongo in questa lezione stamperemo 3 righe e 5 colonne con i seguenti dati:

1 1 1 1 1
2 2 2 2 2
3 3 3 3 3

Il ciclo più esterno viene eseguito quindi 3 volte, l’indice i infatti parte da 0 e arriva a 2. Il ciclo più interno viene eseguito 5 volte infatti l’indice j va da 0 a 4.

Ogni ciclo esterno scrive nella prima riga una sequenza di 5 numeri. La prima volta stampa: (i+1) (i +1) (i +1) (i +1) (i +1) cioè 1 1 1 1 1, dopo va a capo e incrementa i di 1, quindi stampa 2 2 2 2 2, dopo va nuovamente a capo e incrementa i di 1 quindi stampa 3 3 3 3 3.

Poi i diventa 4 e il test (i<3) non è più valido, quindi il programma esce anche dal ciclo for esterno.

Ecco dunque il listato completo che produce 3 righe e 5 colonne:

#include <stdio.h>

main()
{
	int i, j;
	
	for(i=0;i<3;i++) {
		for (j=0;j<5;j++)
				printf("%d ", i+1); 
	printf("\n");//va a capo
	}		
	
system("PAUSE");		
}


Secondo esempio sui cicli annidati

In questo secondo esempio vogliamo produrre questo output:

 0  1  2  3  4  5  6  7  8  9
10 11....

E così via fino a 100. Quindi vogliamo stampare i numeri da 0 a 100 e andare a capo ogni 10 numeri.

Utilizzeremo questa istruzione i*10+j anche per capire meglio l’uso degli indici.

for(i=0;i<10;i++) { // i=0 test vero
for (j=0;j<10;j++) //j=0 test vero
    printf(“%4d “, i*10+j); // stampiamo i*10+j=0*10+0=0
printf(“\n”); //va a capo

Quindi si ripete il ciclo interno

for (j=0;j<10;j++) //i=0 e j=1
  printf(“%4d “, i*10+j); // stampiamo i*10+j=0*10+1=1

….

Continuiamo così fino a stampare il 9.

Dopo infatti il ciclo interno si interrompe perchè il test 10<10 è falso.

Allora i si incrementa di 1, quindi avremo:

for(i=0;i<10;i++) { // i=1 test vero
for (j=0;j<10;j++) //j=0 test vero
    printf(“%4d “, i*10+j); // stampiamo i*10+j=1*10+0=10
printf(“\n”); //va a capo

….

Si continua il ciclo interno fino a stampare il numero 19.

Al termine stamperemo tutti i numeri da 0 a 100.

Ecco quindi il listato completo:

#include <stdio.h>

main()
{
	int i, j;
	
	for(i=0;i<10;i++) {
		for (j=0;j<10;j++)
				printf("%4d ", i*10+j);
	printf("\n");//stampa la prima riga
	}		
system("PAUSE");		
}

Gli esercizi proposti erano solo dei semplici esempi per mostrarvi l’uso dei cicli for annidati in C. Continueremo ad esercitarci anche nelle prossime lezioni.

Alcuni link utili

Indice argomenti linguaggio C

La funzione fopen

La funzione fclose

Funzione fprintf

Funzione fscanf

Allocazione dinamica della memoria con malloc

Strutture in C

Typedef struct in C

Esercitazione sulle struct in C

Realizzare un menù di scelta in C

Strutture complesse in C

Come sommare gli elementi della cornice esterna

Come sommare due matrici

Matrice trasposta

Prodotto tra matrici

Ricerca elementi in una matrice

Tavola pitagorica in C

Array multidimensionali

Quick sort in C

Selection sort in C

Merge sort in C

Insertion Sort in C


Autore dell'articolo: Cristina

Avatar per Coding Creativo

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *