Boucler tant que : while, do-while et chiffres
Répéter un nombre inconnu de fois : décomposer un nombre, valider une saisie, arrêter une boucle.
Ce que tu vas apprendre
- Choisir entre
foretwhile - Parcourir les chiffres d'un nombre avec
% 10et/ 10 - Utiliser
do-whileetbreak
for ou while ?
for convient quand on connaît le nombre de tours. while convient quand on répète jusqu'à ce qu'une situation se produise : le nombre de tours dépend des données.
Dans une boucle while, quelque chose doit changer à chaque tour pour que la condition finisse par devenir fausse ; sinon la boucle ne s'arrête jamais.
Les chiffres d'un nombre
Pour un entier positif n, la boucle while (n > 0) { chiffre = n % 10; n = n / 10; } donne les chiffres de droite à gauche. Elle s'arrête quand il ne reste plus de chiffre.
Attention au nombre 0 : la boucle ne fait aucun tour. Traite-le à part si l'énoncé le demande.
do-while et break
do { ... } while (condition); exécute le bloc au moins une fois, puis teste la condition. C'est pratique pour redemander une saisie tant qu'elle est incorrecte.
break; sort immédiatement de la boucle en cours, par exemple dès qu'on a trouvé ce qu'on cherchait.
Exemples commentés
1.Compter les chiffres pairs
#include <stdio.h>
int main(void) {
int n, pairs = 0;
scanf("%d", &n);
while (n > 0) {
int chiffre = n % 10; // dernier chiffre
if (chiffre % 2 == 0) {
pairs++;
}
n = n / 10; // on retire ce chiffre
}
printf("%d\n", pairs);
return 0;
}Entrée
24681
Sortie
4
Les chiffres sont visités dans l'ordre 1, 8, 6, 4, 2 : quatre sont pairs.
2.Doubler jusqu'à dépasser
#include <stdio.h>
int main(void) {
int limite;
scanf("%d", &limite);
int x = 1, etapes = 0;
while (x <= limite) { // nombre de tours inconnu à l'avance
x = x * 2;
etapes++;
}
printf("%d etapes, x = %d\n", etapes, x);
return 0;
}Entrée
100
Sortie
7 etapes, x = 128
1, 2, 4, …, 64 sont inférieurs ou égaux à 100 ; au 7ᵉ doublement, x vaut 128 et la boucle s'arrête.
3.Redemander une valeur positive
#include <stdio.h>
int main(void) {
int x;
do {
scanf("%d", &x); // exécuté au moins une fois
} while (x <= 0);
printf("%d\n", x);
return 0;
}Entrée
-5 0 12
Sortie
12
On lit d'abord, puis on teste : -5 et 0 sont refusés, 12 est accepté.
Chaque exemple est compilé et exécuté automatiquement pour garantir la sortie affichée.
Erreurs fréquentes
La boucle infinie
À éviter
while (n > 0) {
printf("%d\n", n % 10);
}À préférer
while (n > 0) {
printf("%d\n", n % 10);
n = n / 10;
}Si n ne change jamais, la condition reste vraie : le correcteur arrête le programme après 3 secondes (« temps dépassé »).
Modifier la variable dont on a encore besoin
La boucle sur les chiffres détruit n. Si tu as besoin de la valeur de départ ensuite, copie-la d'abord : int copie = n;.
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 !
17 exercices pour mettre cette leçon en pratique, du plus simple au plus avancé.