Nombres réels : double, arrondis et math.h
Lire et afficher des réels, mélanger entiers et réels, utiliser les fonctions mathématiques.
Ce que tu vas apprendre
- Lire et afficher un
doubleavec le bon format - Convertir entre entiers et réels (cast)
- Utiliser
sqrt,pow,flooretceildemath.h
Le type double
double stocke des nombres à virgule. On le lit avec %lf et on l'affiche avec %f. %.2f affiche deux décimales, en arrondissant : 3.14159 devient 3.14.
En C, la virgule décimale s'écrit avec un point : 2.5.
Mélanger entiers et réels
Dès qu'un des deux nombres d'une opération est un réel, le calcul se fait en réel : 7 / 2.0 vaut 3.5.
Pour convertir une variable, on utilise un cast : (double) total / n calcule une moyenne décimale même si total et n sont des int.
Dans l'autre sens, (int) 3.9 vaut 3 : la conversion vers un entier coupe la partie décimale, elle n'arrondit pas.
Les fonctions de math.h
Avec #include <math.h>, tu disposes notamment de :
sqrt(x): racine carréepow(x, y): x puissance yfabs(x): valeur absolue d'un réelfloor(x)etceil(x): arrondi vers le bas et vers le haut
Le C standard ne définit pas π : déclare-le toi-même, par exemple const double PI = 3.14159265358979;.
Exemples commentés
1.Moyenne de quatre notes
#include <stdio.h>
int main(void) {
int a, b, c, d;
scanf("%d %d %d %d", &a, &b, &c, &d);
double moyenne = (a + b + c + d) / 4.0; // 4.0 : calcul en réel
printf("%.2f\n", moyenne);
return 0;
}Entrée
12 15 14 10
Sortie
12.75
Grâce à 4.0, la division se fait en réel ; %.2f affiche deux décimales.
2.Arrondir ou tronquer
#include <stdio.h>
int main(void) {
double x;
scanf("%lf", &x); // %lf pour lire un double
printf("%.1f\n", x); // arrondi à une décimale
printf("%d\n", (int) x); // troncature : on coupe
return 0;
}Entrée
7.86
Sortie
7.9 7
%.1f arrondit à l'affichage, alors que (int) supprime simplement la partie décimale.
3.Longueur d'une diagonale
#include <stdio.h>
#include <math.h>
int main(void) {
double largeur, hauteur;
scanf("%lf %lf", &largeur, &hauteur);
double diagonale = sqrt(largeur * largeur + hauteur * hauteur);
printf("%.3f\n", diagonale);
return 0;
}Entrée
3 4
Sortie
5.000
Le théorème de Pythagore avec sqrt. Le correcteur relie la bibliothèque mathématique automatiquement.
Chaque exemple est compilé et exécuté automatiquement pour garantir la sortie affichée.
Erreurs fréquentes
Afficher un double avec %d
À éviter
printf("%d\n", moyenne);À préférer
printf("%.2f\n", moyenne);Le spécificateur doit correspondre au type : %d pour un int, %f pour un double. Sinon l'affichage est faux.
Lire un double avec %f
À éviter
scanf("%f", &x);À préférer
scanf("%lf", &x);Dans scanf, %f attend un float. Pour un double, il faut %lf.
Croire que (int) arrondit
(int) 2.99 vaut 2. Pour arrondir à l'entier le plus proche, utilise %.0f à l'affichage ou la fonction round de math.h.
Entraîne-toi
6 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 !
13 exercices pour mettre cette leçon en pratique, du plus simple au plus avancé.