Les boucles en C

Répéter sans se répéter
whiledo…whilefor

Appuyez sur → ou cliquez pour avancer

Photo de OUEDRAOGO Abdoul Razack
Présenté parOUEDRAOGO Abdoul Razack

Pourquoi des boucles ?

Afficher « Bonjour ! » plusieurs fois…

sans_boucle.c
0lignes de code
avec_boucle.cfor (int i = 0; i < 1000; i++) {
    printf("Bonjour !\n");
}

3 lignes, que ce soit 5, 1000 ou un million de fois.

Une boucle répète un bloc d’instructions tant qu’une condition est vraie.

Au programme

1
while

Répéter tant qu’une condition est vraie

while (cond) { }

2
do…while

Exécuter au moins une fois, puis répéter

do { } while (cond);

3
for

Répéter un nombre de fois connu

for (i=0; i<n; i++)

4
Les outils

break, continue, boucles imbriquées, pièges, quiz

break; continue;

Anatomie d’une boucle

Toutes les boucles suivent le même cycle en 4 étapes

int i = 0; 1 · Initialiser i < 5 ? 2 · Tester vrai le corpsde la boucle 3 · Exécuter i++; 4 · Mettre à jour faux
on recommence !
on sort de la boucle
i = 0
tours : 0
Sans l’étape 4, la condition ne change jamais : boucle infinie !
Partie 1
La boucle
while

« Tant que la condition est vraie, on recommence. »

while = « tant que » en anglais.

while : la syntaxe

syntaxewhile (condition) {
    // instructions à répéter
}
exemple.cint i = 1;
while (i <= 5) {
    printf("%d ", i);
    i++;
}
$ ./prog
1

La condition est testée avant chaque tour.

2

Si elle est fausse dès le départ : 0 tour.

3

Ici, i++ fait évoluer la condition.

On trace l’exécution

Appuyez sur → pour exécuter une instruction

exemple.c
int i = 1; while (i <= 5) { printf("%d ", i); i++; }
Mémoire
i?
Condition
i <= 5 ?
Tourii <= 5 ?Affichage
$ ./prog
Partie 2
La boucle
do…while

« Fais d’abord, vérifie ensuite. »

Le corps s’exécute toujours au moins une fois.

do…while : la syntaxe

syntaxedo {
    // instructions à répéter
} while (condition)⟦;⟧
saisie.cint note;
do {
    printf("Note sur 20 : ");
    scanf("%d", &note);
} while (note < 0 || note > 20);
$ ./prog
1

Le test est fait après le corps.

2

Idéal pour les menus et les saisies à vérifier.

N’oubliez pas le ; final !

while ou do…while ?

Même code, mais la condition est fausse dès le départ…

while
int i = 10; while (i < 5) { printf("%d", i); i++; }
do…while
int i = 10; do { printf("%d", i); i++; } while (i < 5);
VS
$ ./prog
$ ./prog

Teste puis exécute → 0 tour ou plus

Exécute puis teste → au moins 1 tour

Partie 3
La boucle
for

« Pour i allant de 0 à n… »

La boucle idéale quand on connaît le nombre de tours.

for : tout sur une ligne

for (int i = 0; i < 10; i++) { printf("%d ", i);}
1
Initialisation

Exécutée une seule fois, avant le 1er tour.

2
Condition

Testée avant chaque tour. Fausse → on sort.

3
Mise à jour

Exécutée après chaque tour.

i = –
L’ordre exact
1 → 2 → corps → 3
puis 2 → corps → 3… jusqu’à ce que 2 soit faux.

3 classiques du for

Compte
à rebours
for (int i = 5; i > 0; i--) {
    printf("%d ", i);
}
De 2
en 2
for (int i = 0; i <= 10; i += 2) {
    printf("%d ", i);
}
Somme
de 1 à n
int somme = 0;
for (int i = 1; i <= n; i++) {
    somme += i;
}

Quelle boucle choisir ?

Je connais le nombre de tours à l’avance ?
Le corps doit s’exécuter au moins une fois ?
for

ex : afficher les nombres de 1 à 100, répéter 10 fois une action

do…while

ex : afficher un menu, demander une saisie à vérifier

while

ex : lire des valeurs jusqu’à ce que l’utilisateur tape 0

break et continue

break → sortir de la boucle
continue → passer au tour suivant
for (int i = 1; i <= 10; i++) {
    if (i == 4) {
        ⟦break;⟧
    }
    printf("%d ", i);
}
for (int i = 1; i <= 5; i++) {
    if (i == 3) {
        ⟦continue;⟧
    }
    printf("%d ", i);
}
break !
continue !

break arrête immédiatement toute la boucle.

continue saute la fin du tour en cours.

Boucles imbriquées

Une boucle à l’intérieur d’une autre boucle

triangle.c
for (int i = 1; i <= 4; i++) { for (int j = 1; j <= i; j++) { printf("* "); } printf("\n"); }
i–
j–

i = numéro de ligne (externe)
j = étoile de la ligne (interne)

À chaque tour de la boucle externe, la boucle interne fait tous ses tours.
Ici : 1 + 2 + 3 + 4 = 10 étoiles

Les 4 pièges classiques

1
La boucle infinie
while (i < 10) { printf("%d", i); }
2
Le ; fatal
for (i = 0; i < 5; i++);

Ce ; termine la boucle : elle tourne à vide, puis le bloc { } ne s’exécute qu’une fois.

3
Le décalage de 1
for (i = 0; i <= 5; i++)

De 0 à 5 avec <= : ça fait 6 tours, pas 5 ! Vérifiez vos bornes.

4
= au lieu de ==
while (rep = 1) { ... }

= affecte, == compare. Ici la condition vaut toujours 1 : boucle infinie.

Quiz éclair

Que va afficher ce code ? Cliquez sur votre réponse.

for (int i = 0; i < 3; i++)
    printf("%d", i);

i prend les valeurs 0, 1 et 2 : à 3, le test i < 3 est faux.

int i = 5;
while (i > 0) {
    i -= 2;
}
printf("%d", i);

5 → 3 → 1 → -1. À -1, i > 0 est faux.

int n = 0;
do {
    n++;
} while (n < 0);
printf("%d", n);

Le corps s’exécute une fois (n = 1), puis 1 < 0 est faux.

À retenir

forfor (init; cond; maj) { ... }Nombre de tours connu
whilewhile (cond) { ... }Teste avant : 0 tour ou plus
do…whiledo { ... } while (cond);Teste après : au moins 1 tour
contrôlebreak; continue;Sortir / passer au tour suivant

À vous de jouer !

Cliquez sur une carte pour voir l’indice

Échauffement

Affiche tous les multiples de 3 entre 1 et 100.

Bonus : affiche aussi leur somme.

boucle for

Indice

Teste si i % 3 == 0 à chaque tour.

Pour la somme : une variable initialisée à 0 avant la boucle.

Saisie sécurisée

Demande un entier n entre 1 et 10 jusqu’à ce qu’il soit valide, puis affiche sa table de multiplication.

do…while + for

Indice

Répète la saisie avec do { … } while (n < 1 || n > 10);

Puis une boucle for de 1 à 10 qui affiche n * i.

Le nombre mystère

L’ordinateur choisit un nombre entre 1 et 100. L’utilisateur propose jusqu’à trouver : « plus grand » ou « plus petit ». Affiche le nombre d’essais.

while ou do…while

Indice

Nombre secret : rand() % 100 + 1

Boucle tant que essai != secret, avec un compteur incrémenté à chaque tour.

Des questions ?

À vos claviers !

Notes

Raccourcis

→Espace étape / slide suivante
← étape précédente
DébutFin première / dernière slide
F plein écran · N notes · ? cette aide
Un clic sur la slide avance aussi.