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.
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
:
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.
while
, sauf si le bloc d'instructions est vide : while(1);
.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.
É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
É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);
É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.
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++);
}
Qu'affiche le code suivant ?
int x=2;
while(x>8) {
printf ("%d ", x++);
}
Qu'affiche le code suivant ?
int a=0, b;
while(a<4) {
b=0;
while (b<2) printf ("%d", b++);
a++;
}
Qu'affiche le code suivant ?
int a=0, b;
while(a<4) {
b=0;
while (b<a) printf ("%d", b++);
a++;
}
0
à a-1
.
Essaie encore ...
Quels codes permettent de créer une boucle infinie ?
Qu'affiche le code suivant ?
int x=0;
while (++x<5);
{
printf ("%d", x);
}
while
. Le bloc d'instructions est donc vide.
Essaie encore ...