CHAPITRE 3 : Les boucles de répétition CHAPITRE 3 : Les boucles de répétition U
CHAPITRE 3 : Les boucles de répétition CHAPITRE 3 : Les boucles de répétition Une boucle permet de répéter un même traitement, une ou plusieurs fois. Le langage C offre trois sortes de boucles : do ... while (Répéter ...), while ... (Tant que ...) et for ... (Pour ...) A)Boucle do ... while ... (Répéter .... Tant que) 1) Syntaxe do instruction while (condition); L'instruction à répéter peut être simple (une seule action), structurée (une autre instruction de contrôle) ou composée (c'est le cas le plus fréquent). Exemples pour illustrer la syntaxe : int somme = 0; int n = 1; /* instruction à répéter est composée */ do { somme += n; n++; } while (n <= 10); int indice = 0; /* instruction à répéter est simple */ do indice++; while (indice < 5); Chapitre 3 : Les boucles IFT 1969 / A07 Page 1 condition instruction faux vrai int age; /* instruction à répéter est structurée */ do { if (age >= 18) printf("C'est un adulte"); else age += 5; } while (age < 18); int age; /* instruction à répéter est composée */ do { printf("age = %d\n", age); if (age >= 18) printf("C'est un adulte"); else age += 5; } while (age < 18); 2) Fonctionnement Étape 1 : Effectuer (d'abord) l'instruction à répéter. Étape 2 : Vérifier (après) la condition: a) si la condition est vrai, on revient à l'étape 1; b) si non (la condition est faux), on quitte la boucle. Conclusion : Avec la boucle do ... while, on effectue au moins une fois l'instruction à répéter. 3) Domaines d'utilisation On utilise la boucle do ... while quand on ne sait pas à l'avance le nombre de fois que l'on doit répéter le même traitement. Les exemples suivants permettent de voir quelques applications possibles avec cette boucle. Chapitre 3 : Les boucles IFT 1969 / A07 Page 2 1.1 Répéter le même traitement en mode conversationnel C'est le cas le plus fréquent pour le premier travail pratique en IFT 1969. Exemple : Écrire un bloc d'instructions permettant de saisir l'âge et le sexe d'une personne. Ensuite, on affiche un message du genre : C'est un enfant de sexe masculin. On répète le même traitement tant que l'usager décide de continuer. Solution : int age; char sexe, reponse; /* Oui ou Non l'usager veut continuer */ do { printf("\nEntrez le sexe et l'age "); fflush(stdin); /* vider la memoire temporaire */ scanf("%c%d", &sexe, &age); printf("C'est un "); if (age <= 11) printf("enfant "); else if (age < 18) printf("adolescent "); else printf("adulte "); if (toupper(sexe) == 'F') /* to upper : en majuscule */ printf("de sexe feminin\n"); else printf("de sexe masculin\n"); printf("\nVoulez-vous continuer ? (O/N) "); fflush(stdin); /* vider la memoire temporaire */ reponse = toupper(getchar()); } while (reponse == 'O'); Chapitre 3 : Les boucles IFT 1969 / A07 Page 3 Exercice : Écrire un bloc d'instructions permettant de saisir le prix d'un article (un réel). Ensuite, on calcule les taxes TPS et TVQ et on affiche à l'écran les informations du genre : Prix de l'article : .... Taxe TPS : .... Taxe TVQ : .... Prix total à payer : .... On répète le même traitement tant que l'usager décide de continuer. 1.2 Validation de données La boucle do ... while permet de valider la valeur que l'usager entre au clavier. Exemple : Écrire un bloc d'instructions permettant de saisir et de valider : le sexe d'une personne ('f', 'F', 'm' ou 'M'); l'âge d'une personne (entre 1 et 134). Une solution possible : const int MAXI_AGE = 134; int age; char sexe; /* saisir et valider le sexe */ do { printf("Entrez un caractere parmi f, F, m ou M :"); fflush(stdin); /* vider la memoire temporaire */ scanf("%c", &sexe); if (sexe != 'f' && sexe != 'F' && sexe != 'm' && sexe != 'M') printf("Erreur! Retapez S.V.P. \n"); } while (sexe != 'f' && sexe != 'F' && sexe != 'm' && sexe != 'M'); /* saisir et valider l'âge */ do { printf("Entrez l'age entre 1 et %d : ", MAXI_AGE); scanf("%d", &age); Chapitre 3 : Les boucles IFT 1969 / A07 Page 4 if (age < 1 || age > MAXI_AGE) printf("Erreur! Retapez S.V.P. \n"); } while (age < 1 || age > MAXI_AGE); Une solution plus élégante : const int MAXI_AGE = 134; int age, valide; /* Oui ou Non la donnée est valide */ char sexe; /* saisir et valider le sexe */ do { printf("Entrez un caractere parmi f, F, m ou M :"); fflush(stdin); /* vider la memoire temporaire */ /* saisie et convertie un caractère en majuscule */ sexe = toupper(getchar()); valide = (sexe == 'F' || sexe == 'M'); if (!valide) /* Si Pas valide */ printf("Erreur! Retapez S.V.P. \n"); } while (!valide); /* tant que Pas valide */ /* saisir et valider l'âge */ do { printf("Entrez l'âge entre 1 et %d : ", MAXI_AGE); scanf("%d", &age); valide = (age >= 1 && age <= MAXI_AGE); if (!valide) printf("Erreur! Retapez S.V.P. \n"); } while (!valide); Calcul scientifique Exemple 1 Écrire un bloc d'instructions permettant de calculer et d'afficher la somme suivante : somme = 10 + 15 + 20 + 25 + ... + 50 Solution const int BORNE1 = 10, BORNE2 = 50, Chapitre 3 : Les boucles IFT 1969 / A07 Page 5 LEPAS = 5; int terme, somme; somme = 0; terme = BORNE1; Chapitre 3 : Les boucles IFT 1969 / A07 Page 6 do { somme += terme; /*équivalent à : somme = somme + terme ; */ terme += LEPAS; } while (terme <= BORNE2); printf("La somme calculee est : %d\n", somme); Exemple 2 Écrire un programme permettant d'estimer la valeur de PI (3.1416...) selon la formule suivante : Solution #include <stdio.h> int main() { const int LIMITE = 9999, LEPAS = 2; int denominateur = 1; /* premier dénominateur vaut 1 */ float piSur4 = 0.0, signe = 1.0; do { piSur4 += signe / denominateur; signe = -signe; /* changer de signe */ denominateur += LEPAS; } while (denominateur <= LIMITE); printf("La valeur estimee de PI est %12.6f\n",4 * piSur4); return 0 ; } Exécution La valeur estimee de PI est 3.141397 4) Exercices Exercice 1 Écrire un programme permettant de saisir et de valider si un entier lu (exemple 7234) est positif ou non. Ensuite, on affiche l'entier tel que lu en plus d'afficher cet entier lu à l'inverse (ici 4327). Chapitre 3 : Les boucles IFT 1969 / A07 Page 7 Solution : #include <stdio.h> int main() { int n; /* Saisie et validation */ do { printf("Entrez un entier positif : "); scanf("%d", &n); if (n < 0) printf("n = %d est negatif\n", n); } while (n < 0); printf("L'entier lu : %d\n", n); printf("A l'envers : "); do { printf("%d", n % 10); n /= 10; } while (n > 0); return 0; } Exécution Entrez un entier positif : –8742 n = -8742 est negatif Entrez un entier positif : 5329 L'entier lu : 5329 A l'envers : 9235 Exercice 2 Écrire un programme permettant de saisir un entier positif (exemple 5426). Il calcule l'envers du nombre lu (ici 6245) et affiche ces deux valeurs. Solution : #include <stdio.h> int main() { int n, envers; Chapitre 3 : Les boucles IFT 1969 / A07 Page 8 printf("Entrez un entier positif : "); scanf("%d", &n); printf("L'entier lu : %d\n", n); /* Calcul de l'envers */ envers = 0; do { envers = 10 * envers + n % 10; n /= 10; /* Attention au écriture raccourcie, * ici on peut écrire * envers *= 10; * envers += nombre % 10; * mais on ne doit pas écrire * envers *= 10 + nombre % 10; * qui nous donne pas le même résultat */ } while (n > 0); printf("A l'envers : %d", envers); return 0 ; } Exécution Entrez un entier positif :1234 L'entier lu : 1234 A l'envers : 4321 Exercice 3 Écrire un programme permettant de saisir les informations d'un placement : le capital (un réel) le taux d'intérêt (composé) annuel en % Le programme calcule et affiche l'évolution du placement, année après année. Lorsque notre épargne vaut un million ou plus, l'exécution du programme s'arrête. Ce programme permet donc d'évaluer combien d'années cela prendra pour devenir millionnaire si l'on adopte un tel plan d'épargne. /* Dans combien d'années, deviendra-t'on millionnaire ? Matière : boucle do ... while (entre autres) */ #include <stdio.h> int main() { const float SEUIL_RICHESSE_VOULU = 1000000.00; float depotAnnuel, /* montant fixe de dépôt annuel */ taux, /* taux d'intérêt annuel espéré */ Chapitre 3 : Les boucles IFT 1969 / A07 Page 9 interetAnnuel, /* intérêt annuel à la fin de l'année qui s’ajoute au capital à la fin de l'année (intérêt composé) */ capital; /* capital accumulé, année après année */ int nbAnnee; /* compteur du nombre d'années uploads/Sante/ chapitre-3 5 .pdf
Documents similaires
-
24
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Oct 24, 2022
- Catégorie Health / Santé
- Langue French
- Taille du fichier 0.3116MB