Lire une suite de valeurs
Lire n valeurs ou lire jusqu'à une valeur d'arrêt, en comptant et en cherchant un maximum.
Ce que tu vas apprendre
- Lire
nvaleurs dans une boucle - Compter, sommer et chercher le minimum ou le maximum au fil de la lecture
- Lire jusqu'à une valeur d'arrêt avec
while
Lire n valeurs
Quand l'entrée commence par le nombre de valeurs n, on lit n, puis on fait n tours de boucle en lisant une valeur à chaque tour. Pas besoin de toutes les garder : on met à jour les résultats au fur et à mesure.
Minimum et maximum
Pour un maximum, initialise la variable avec la première valeur lue, pas avec 0 : si toutes les valeurs sont négatives, 0 serait un faux maximum.
Lire jusqu'à une valeur d'arrêt
Quand on ne connaît pas le nombre de valeurs à l'avance, la suite se termine par une valeur spéciale (par exemple 0 ou -1). On utilise alors while (condition) { ... } : la boucle tourne tant que la condition est vraie.
Schéma classique : lire une première valeur, puis while (x != arret) { traiter x; lire la valeur suivante; }.
Exemples commentés
1.La plus basse température
#include <stdio.h>
int main(void) {
int n, t;
scanf("%d", &n);
scanf("%d", &t);
int min = t; // première valeur = minimum provisoire
for (int i = 1; i < n; i++) { // il reste n - 1 valeurs
scanf("%d", &t);
if (t < min) {
min = t;
}
}
printf("%d\n", min);
return 0;
}Entrée
5 12 -3 8 0 7
Sortie
-3
On lit la première valeur à part pour initialiser min, puis on compare les suivantes.
2.Compter les notes suffisantes
#include <stdio.h>
int main(void) {
int n, note, compteur = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", ¬e);
if (note >= 10) {
compteur++; // un de plus
}
}
printf("%d sur %d\n", compteur, n);
return 0;
}Entrée
4 8 12 10 15
Sortie
3 sur 4
Un compteur est un accumulateur qui augmente de 1 seulement quand une condition est vraie.
3.Additionner jusqu'à -1
#include <stdio.h>
int main(void) {
int x, total = 0;
scanf("%d", &x);
while (x != -1) { // -1 marque la fin
total += x;
scanf("%d", &x); // valeur suivante
}
printf("%d\n", total);
return 0;
}Entrée
4 6 10 -1
Sortie
20
La valeur d'arrêt n'est pas ajoutée : la condition est testée juste après chaque lecture.
Chaque exemple est compilé et exécuté automatiquement pour garantir la sortie affichée.
Erreurs fréquentes
Initialiser le maximum à 0
À éviter
int max = 0;
À préférer
scanf("%d", &x);
int max = x;Avec les valeurs -5 et -2, un maximum initialisé à 0 donnerait 0, qui n'est même pas dans la liste.
Une moyenne calculée en entier
À éviter
printf("%d\n", total / n);À préférer
printf("%.2f\n", (double) total / n);La division entre deux int perd la partie décimale (voir la leçon sur les réels).
Entraîne-toi
5 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 !
5 exercices pour mettre cette leçon en pratique, du plus simple au plus avancé.