0% ont trouvé ce document utile (0 vote)
12 vues28 pages

Boucles en C : while, do...while, for

Transféré par

youssef
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
12 vues28 pages

Boucles en C : while, do...while, for

Transféré par

youssef
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Chapitre 5 : Boucles (for, while)

1) Boucle while
2) Boucle do…while
3) Boucle for

1
1) Boucle while
Algo en pseudo-code Démo valise.c

somme ß 0
Afficher "vous avez droit à 23kg
etc…"

Tant que somme≤23:


Demander un poids à ajouter
Ajouter ce poids à somme
Fin tant que

Afficher "Valise trop pleine!"


2
1) Boucle while
Programme en C : valise.c (dans le main par ex.)

float somme=0;
float poids=0; // initialisation par sécurité
printf("Vous avez droit à une valise de 23kg.\n");
printf("Elle est initialement vide.\n");
while (somme<=23){
printf("Il reste %f kg.\n", 23-somme);
printf("Combien de kg à ajouter ? ");
scanf("%f", &poids);
somme=somme+poids;
}
printf("Valise trop pleine!\n");
3
1) Boucle while
• La boucle while en C est l'équivalent de la boucle Tant que
en pseudo-code.

• On l'utilise lorsque le nombre d'itérations (=passages dans la


boucle) n'est pas connu avant de commencer la boucle.

• Syntaxe:
Algo en pseudo-code Programme en C :

Tant que condition: while (condition){


Instructions instructions
Fin tant que }

4
Attention aux boucles infinies!
• Exemple:
int continuer=1; /* booléen valant 1 pour
continuer et 0 pour stop*/
while (continuer){
printf("Coucou!\n");
}

• Si la condition du while ne devient jamais fausse, on entre


dans une boucle infinie!

• Le programme ci-dessus affiche "Coucou" indéfiniment.


→ Démo coucou.c

5
3) Boucle do … while
Démo aimezVous.c

Algo en pseudo-code
Faire
Afficher Aimez-vous la programmation ?
Afficher Répondre 'o' pour oui, ou 'n' pour non.
Demander une réponse (saisie au clavier)
Tant que la réponse n'est ni 'o' ni 'n'

Si la réponse est 'o':


Afficher Super J
Sinon:
Afficher Dommage L 6
3) Boucle do … while
Programme en C : aimezVous.c (dans le main par ex.)

char reponse;
// initialisation inutile (sauf si scanf échoue)
do{
printf("\n Aimez-vous la programmation ? ");
printf("Répondre 'o' pour oui,ou 'n' pour non.");
scanf(" %c", &reponse);
} while ((reponse!='o') && (reponse != 'n'));

if (reponse=='o'){
printf("Super :-) \n");
}
else { // on sait alors que reponse=='n'
printf("Dommage :-( \n");
} 7
3) Boucle do … while
• La boucle do… while en C est l'équivalent de la boucle
Faire... tant que en pseudo-code.

• On l'utilise lorsque l'on veut forcément passer dans la


première itération de la boucle, mais que le nombre total
d'itérations (=passage dans la boucle) n'est pas connu avant
de commencer.

• Syntaxe:
Algo en pseudo-code Programme en C :

Faire: do{
Instructions instructions
Tant que condition } while (condition); 8
Attention: while vs. do … while
• Attention à ne pas confondre la syntaxe du while et du
do…while, même si elles sont proches.

while do…while

while (condition){ do{


instructions instructions
} } while (condition);

• La problème de boucle infinie concerne les deux cas (while


et do…while) : si la condition ne devient jamais fausse, on
ne sort pas de la boucle.
9
QCM Vote électronique
On veut un programme permettant de jouer au nombre mystère.
Exemple 1 Exemple 2
Devinez le nombre mystère entre Devinez le nombre mystère entre
0 et 100. 0 et 100.
Vous avez 5 essais max. Vous avez 5 essais max.
Proposition 1: 50 Proposition 1: 50
C'est plus. C'est plus.
Proposition 2: 75 Proposition 2: 75
C'est plus. C'est plus.
Proposition 3: 82 Proposition 3: 82
C'est gagné! C'est plus.
Proposition 4: 90
C'est moins.
Proposition 5: 85
C'est moins 10
Raté! Le nombre mystère était 83.
QCM Vote électronique
// on suppose les variables déclarées, mystere contient le nb mystere,
et compteur initialisé à 1.
do{
printf("Proposition %d : ", compteur);
scanf("%d", &prop);
compteur++;
if (prop>mystere){
printf("C'est moins.\n");
}
else if (prop<mystere){
printf("C'est plus.\n");
}
Quelle est la condition?
} while (condition) ;
1)prop!=mystere
// Puis afficher résultat
2)prop==mystere && compteur<=5
... 3)prop!=mystere && compteur<=5
4)compteur<=5 11
QCM Vote électronique
// on suppose les variables déclarées, mystere contient le nb mystere,
et compteur initialisé à 1.
do{
printf("Proposition %d : ", compteur);
scanf("%d", &prop);
compteur++;
if (prop>mystere){
printf("C'est moins.\n");
}
else if (prop<mystere){
printf("C'est plus.\n");
}
Quelle est la condition?
} while (condition) ;
1)prop!=mystere
// Puis afficher résultat
2)prop==mystere && compteur<=5
... 3)prop!=mystere && compteur<=5
4)compteur<=5 12
QCM Vote électronique
// on suppose les variables déclarées, mystere contient le nb mystere,
et compteur initialisé à 1.
do{
printf("Proposition %d : ", compteur);
scanf("%d", &prop);
compteur++;
if (prop>mystere){
Erreur très courante: oublier d'incrémenter
le compteur dans une boucle while!
printf("C'est moins.\n");
} (Car on prend l'habitude des boucles for qui
incrémentent automatiquement)
else if (prop<mystere){
printf("C'est plus.\n");
}
Quelle est la condition?
} while (condition) ;
1)prop!=mystere
// Puis afficher résultat
2)prop==mystere && compteur<=5
... 3)prop!=mystere && compteur<=5
4)compteur<=5 13
3) Boucle for
Algo en pseudo-code

Demander "Combien de lignes"


Stoker le résultat dans variable n
Démo ligne.c
Pour i allant de 0 à n-1:
Afficher Ligne numéro i
Fin pour

14
3) Boucle for
Programme en C : ligne.c (dans le main par ex.)

int i;
int n=0;
printf("Combien de lignes voulez-vous? ");
scanf("%d", &n);
for (i=0; i<n; i++){
printf("Ligne numéro %d \n", i);
}
Dans la console: Combien de lignes voulez-vous? 5
Ligne numéro 0
Ligne numéro 1
Ligne numéro 2
Ligne numéro 3
15
Ligne numéro 4
3) Boucle for
• La boucle for en C est l'équivalent de la boucle Pour...
allant de .. à … en pseudo-code.
• On l'utilise lorsque l'on sait combien d'itérations (=passages
dans la boucle) on veut faire dès le début de la boucle.
• Syntaxe: Algo en pseudo-code

Pour indice allant de debut à fin:


Instructions
Fin pour
Programme en C :
int indice; //declaration de l'indice
for (indice=debut; indice<=fin; indice++){
instructions
16
}
Boucle for: raccourci d'un while
• La boucle for est en fait un raccourci d'une certaine forme
de boucle while qui serait très souvent utilisée sinon:
Boucle for:
int i; //declaration de l'indice
for (i=debut; i<=fin; i++){
instructions
}

Boucle while équivalente


int i; //declaration de l'indice
i=debut;
while (i<=fin){
instructions
i++;
17
}
Boucle for: raccourci d'un while
• La boucle for est en fait un raccourci d'une certaine forme
de boucle while qui serait très souvent utilisée sinon:
Boucle for:
declaration indice;
for (instruction de début; condition; modification de l'indice){
instructions
}

Boucle while équivalente


declaration indice;
instruction de debut;
while (condition){
instructions
modification de l'indice;
18
}
Boucle for: variations
• On peut donc utiliser toute une série de variations sur
l'intérieur des parenthèses du for: nom de l'indice de boucle
Boucle for:
int compteur;
for (compteur=0; compteur<5; compteur++){
instructions
L'indice de boucle est seulement une
}
variable, donc il peut prendre
n'importe quel nom, pas forcément i.
Boucle while équivalente Par convention, on utilisera souvent
int compteur; i, j ou compteur.
compteur=0;
while (compteur<5){
instructions
compteur++;
19
}
Boucle for: variations
• On peut donc utiliser toute une série de variations sur
l'intérieur des parenthèses du for: instruction de début
Boucle for:
int i;
for (i=-2; i<5; i++){
instructions
On ne commence pas forcément à 0.
}
On peut commencer à n'importe quel
entier (positif ou négatif).
Boucle while équivalente
int i;
i=-2;
while (i<5){
instructions
i++;
20
}
Boucle for: variations
• On peut donc utiliser toute une série de variations sur
l'intérieur des parenthèses du for: condition
Boucle for:
int i;
for (i=0; i<5; i++){
instructions
Différents choix de condition
}
(mais pas le même comportement!):
i<5
Boucle while équivalente i<=5
int i; i>=5 (si cela a un sens)
i=0; …
while (i<5){
instructions
i++;
21
}
Boucle for: variations
• On peut donc utiliser toute une série de variations sur
l'intérieur des parenthèses du for: modification de l'indice
Boucle for:
int i;
for (i=0; i<5; i=i+2){
instructions
On peut sauter de n'importe quel pas
}
i++ à comme i=i+1à saut de 1
i=i+2 à saut de 2
Boucle while équivalente i=i+5 à saut de 5
int i; ....
i=0;
while (i<5){
instructions
i=i+2;
22
}
Boucle for: variations
• On peut donc utiliser toute une série de variations sur
l'intérieur des parenthèses du for: modification de l'indice
Boucle for:
int i;
for (i=10; i>2; i--){
instructions
On peut même aller en arrière!
}
i-- à comme i=i-1à saut de -1
i=i-2 à saut de -2
Boucle while équivalente i=i-5 à saut de -5
int i; ....
i=10;
while (i>2){ Attention à ce que l'instruction de
instructions début et la condition de fin soit
cohérentes.
i--;
23
}
Attention au nombre d'itérations
Situations courantes : Valeurs de i qui vont
être parcourues:
int i; //declaration de l'indice 0
for (i=0; i<10; i++){ 1

instructions 9
} → on passe 10 fois dans
la boucle

Valeurs de i qui vont


int i; //declaration de l'indice être parcourues:
for (i=0; i<=10; i++){ 0
1
instructions …
} 10
→ on passe 11 fois dans
24
la boucle
Attention au nombre d'itérations
Situations courantes : Valeurs de i qui vont
être parcourues:
int i; //declaration de l'indice 1
for (i=1; i<10; i++){ 2

instructions 9
} → on passe 9 fois dans
la boucle

Valeurs de i qui vont


int i; //declaration de l'indice être parcourues:
for (i=1; i<=10; i++){ 1
2
instructions …
} 10
→ on passe 10 fois dans
25
la boucle
QCM Vote électronique
char lettre_a='a';
int i;
for (i=0; i<26; i++)
{
printf("%d-ieme lettre: %c \n", i, lettre_a+i);
}
Quel affichage obtient-on à l'exécution?

Affichage 1 Affichage 2 Affichage 3 Affichage 4


1-ieme lettre: a 1-ieme lettre: a 0-ieme lettre: a 0-ieme lettre: a
2-ieme lettre: b 2-ieme lettre: b 1-ieme lettre: b 1-ieme lettre: b
… … … …
26-ieme lettre: z 25-ieme lettre: z 25-ieme lettre: z 26-ieme lettre: z
26
QCM Vote électronique
char lettre_a='a';
int i;
for (i=0; i<26; i++)
{
printf("%d-ieme lettre: %c \n", i, lettre_a+i);
}
Quel affichage obtient-on à l'exécution?

Affichage 1 Affichage 2 Affichage 3 Affichage 4


1-ieme lettre: a 1-ieme lettre: a 0-ieme lettre: a 0-ieme lettre: a
2-ieme lettre: b 2-ieme lettre: b 1-ieme lettre: b 1-ieme lettre: b
… … … …
26-ieme lettre: z 25-ieme lettre: z 25-ieme lettre: z 26-ieme lettre: z
27
Fin chapitre 5
Récapitulatif des notions qui ont été abordées:
§ boucles while
§ nombre d'itérations inconnu au départ
§ boucles do… while
§ nombre d'itérations inconnu au départ, mais on veut passer une
première fois dans la boucle
§ boucles for
§ nombre d'itérations connu à l'avance

28

Vous aimerez peut-être aussi