Boucles imbriquées : dessiner et combiner
Placer une boucle dans une autre pour parcourir des lignes et des colonnes ou tester des combinaisons.
Ce que tu vas apprendre
- Écrire une boucle à l'intérieur d'une autre
- Faire dépendre la boucle intérieure de la boucle extérieure
- Placer correctement les retours à la ligne
Lignes et colonnes
Une boucle extérieure parcourt les lignes ; pour chacune, une boucle intérieure parcourt les colonnes. Le retour à la ligne s'affiche après la boucle intérieure, une fois la ligne terminée.
Pour n lignes de m colonnes, le corps intérieur s'exécute n × m fois.
Une boucle qui dépend de l'autre
La borne de la boucle intérieure peut dépendre du compteur extérieur : à la ligne i, on peut afficher i éléments, ou n - i espaces suivis de quelques étoiles. Dessine d'abord le résultat pour n = 3 et compte ce qu'il faut sur chaque ligne.
Chercher parmi des combinaisons
Deux boucles imbriquées permettent aussi d'essayer toutes les paires de valeurs. Un drapeau (une variable qui vaut 0 ou 1) retient si l'on a trouvé ce qu'on cherchait ; break ne sort que de la boucle intérieure.
Exemples commentés
1.Un rectangle de #
#include <stdio.h>
int main(void) {
int lignes, colonnes;
scanf("%d %d", &lignes, &colonnes);
for (int i = 0; i < lignes; i++) {
for (int j = 0; j < colonnes; j++) {
printf("#");
}
printf("\n"); // après chaque ligne complète
}
return 0;
}Entrée
2 4
Sortie
#### ####
La boucle j dessine une ligne ; la boucle i répète cette ligne.
2.Grille de multiplication
#include <stdio.h>
int main(void) {
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (j > 1) {
printf(" ");
}
printf("%d", i * j);
}
printf("\n");
}
return 0;
}Entrée
3
Sortie
1 2 3 2 4 6 3 6 9
Chaque case combine le numéro de ligne i et le numéro de colonne j.
Chaque exemple est compilé et exécuté automatiquement pour garantir la sortie affichée.
Erreurs fréquentes
Le même compteur pour les deux boucles
À éviter
for (i = 0; i < n; i++)
for (i = 0; i < m; i++)À préférer
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)La boucle intérieure modifie le compteur de la boucle extérieure : résultats faux ou boucle infinie.
Le retour à la ligne au mauvais endroit
Dans la boucle intérieure, \n s'affiche après chaque élément ; après la boucle extérieure, une seule fois. Il doit être entre les deux.
Entraîne-toi
6 questions variées pour fixer la leçon : choix, résultat à prévoir, ligne à compléter, code à remettre dans l'ordre, erreur à trouver.
À toi de jouer !
19 exercices pour mettre cette leçon en pratique, du plus simple au plus avancé.