Cours 6.2. La boucle while en C

La boucle while est similaire à la boucle do..while à l'exception que la condition est testée en premier (avant le bloc d'instructions). Cela implique - contrairement à la boucle do..while - que le bloc d'instructions ne sera pas nécessairement exécuté au moins une fois. En d'autres termes, il est possible de sauter la boucle si la condition est fausse dès le départ.

Syntaxe

La boucle while répète une séquence d'instructions tant que la condition est vraie, mais la condition est évaluée en premier :

while (test) {
    // ...
    Bloc d'instructions
    // ...
}

Voici l'organigramme correspondant à la boucle while :

Organigramme de la boucle while en C

Avec la boucle while, le corps de la boucle peut ne pas être exécuté si le test est faux dès le départ.

Il n'y a pas de point-virgule à la fin du while, sauf si le bloc d'instructions est vide : while(1);.

Exemple

Voici un exemple de boucle while qui demande à l'utilisateur de saisir un nombre négatif :

int n;
// Demande la saisie d'un nombre
printf ("Entrez un nombre : ");
scanf ("%d", &n);

// Si le nombre est positif, redemande le nombre
while (n>=0) {
  printf ("Entrez un nombre négatif : ");
  scanf ("%d", &n);
}

// Affiche le nombre saisi
printf ("Vous avez saisi %d.\n", n);

Si lors de la première demande, l'utilisateur saisit un nombre négatif, on ne rentre pas dans la boucle et l'exécution passe directement à l'affichage.

Exercice

Exercice 1

Écrire un programme qui demande à l'utilisateur de saisir un pourcentage. Si le pourcentage n'est pas compris entre 0 et 100, le programme redemande le pourcentage mais précise alors qu'il doit être compris entre 0 et 100 conformément à l'exemple suivant :

Entrez un pourcentage : -3.2
Entrez un pourcentage compris entre 0 et 100 : 125.6
Entrez un pourcentage compris entre 0 et 100 : 25.2
La réduction est de 25.20%.
float remise;

// Demande la saisie d'un pourcentage
// COMPLETEZ ICI

// Vérifie si le pourcentage est bien entre 0 et 100
// COMPLETEZ ICI

// Affiche le pourcentage
// COMPLETEZ ICI

Exercice 2

Écrire un programme avec une boucle while qui calcule la suite suivante :

$$ U_n = \dfrac{1}{U_{n-1}+1} $$

avec \( U_0 = 1 \).

L'utilisateur saisit l'indice de l'élément qu'il souhaite calculer et le programme affiche cet élément :

Entrez l'indice n : 0
U(0) = 1.000000
Entrez l'indice n : 3
U(3) = 0.600000
Entrez l'indice n : 100
U(100) = 0.618034

Voici la trame du code à compléter :

int i=0, n;
float U=1;

// Demande l'indice à calculer
printf ("Entrez l'indice n : ");
scanf ("%d", &n);

// Calcule l'élément Un
// COMPLETEZ ICI

// Affiche le résultat
printf ("U(%d) = %.6f\n", n, U);

Exercice 3

Écrire un programme avec une boucle while qui trouve et affiche le plus grand diviseur d'un nombre N saisi par l'utilisateur. Le programme ne considére pas les nombres 1 et N qui sont toujours des diviseurs de N.

Si le nombre saisi est 0 ou 1, le programme affiche :

Entrez un entier strictement positif n : 0
0 n'a pas de diviseur.
Entrez un entier strictement positif n : 1
1 n'a pas de diviseur.

Si le programme trouve un diviseur, il affiche ce diviseur :

Entrez un entier strictement positif n : 15
5 est le plus grand diviseur de 15.

Si N est premier (il n'a pas de diviseur autre que lui-même et 1), le programme affiche :

Entrez un entier strictement positif n : 11
11 est un nombre premier.

Quiz

Pour l'analyse des programmes ci-dessous, il est préférable de disposer d'un papier et d'un crayon.

Qu'affiche le code suivant ?

int x=2;
while(x<8) {
    printf ("%d ", x++);
} 
Vérifier Bravo ! Sur la dernière itération, x vaut 7, mais il est incrémenté dans le corps de la boucle (après l'affichage). Essaie encore ...

Qu'affiche le code suivant ?

int x=2;
while(x>8) {
    printf ("%d ", x++);
} 
Vérifier Bravo ! Le test est faux dès le départ, le corps de la boucle ne s'exécute pas. Essaie encore ...

Qu'affiche le code suivant ?

int a=0, b;
while(a<4) {
    b=0;
    while (b<2) printf ("%d", b++);
    a++;
} 
Vérifier Bravo ! La première boucle compte de 0 à 3, elle exécute donc 4 fois la deuxième qui compte de 0 à 1. Essaie encore ...

Qu'affiche le code suivant ?

int a=0, b;
while(a<4) {
    b=0;
    while (b<a) printf ("%d", b++);
    a++;
} 
Vérifier Bravo ! La première boucle compte de 0 à 3, elle exécute donc 4 fois la deuxième boucle qui compte de 0 à a-1. Essaie encore ...

Quels codes permettent de créer une boucle infinie ?

Vérifier Bravo ! Pour créer une boucle infinie, il faut que le test soit toujours vrai. Essaie encore ...

Qu'affiche le code suivant ?

int x=0;
while (++x<5);
{
    printf ("%d", x);
}
Vérifier Bravo ! Une erreur classique du débutant : il y a un point virgule à la fin du while. Le bloc d'instructions est donc vide. Essaie encore ...

Voir aussi


Dernière mise à jour : 22/11/2022