Exercice 4.8
a) en se servant de 5 variables (mémorisation des valeurs entrées)
#include <stdio.h> main() { /* Pour être sûrs de ne pas dépasser le domaine de la */ /* variable, nous choisissons le type long pour la somme. */ int A, B, C, D; long SOM; printf("Entrez le premier nombre : "); scanf("%d", &A); printf("Entrez le deuxième nombre : "); scanf("%d", &B); printf("Entrez le troisième nombre : "); scanf("%d", &C); printf("Entrez le quatrième nombre : "); scanf("%d", &D); SOM = (long)A+B+C+D; printf(" %d + %d + %d + %d = %ld\n", A, B, C, D, SOM); return 0; }
b) en se servant de 2 variables (perte des valeurs entrées)
main() { /* Pour être sûrs de ne pas dépasser le domaine de la */ /* variable, nous choisissons le type long pour la somme. */ int A; long SOM; SOM = 0; printf("Entrez le premier nombre : "); scanf("%d", &A); SOM+=A; printf("Entrez le deuxième nombre : "); scanf("%d", &A); SOM+=A; printf("Entrez le troisième nombre : "); scanf("%d", &A); SOM+=A; printf("Entrez le quatrième nombre : "); scanf("%d", &A); SOM+=A; printf("La somme des nombres entrés est %ld\n", SOM); return 0; }
Exercice 4.9
a)
#include <stdio.h> main() { int PNET, TVA; double PTTC; printf("Entrez le prix net de l'article : "); scanf("%d", &PNET); printf("Entrez le taux de la TVA (en %) : "); scanf("%d", &TVA); PTTC = PNET+(double)PNET*TVA/100; printf("Le prix TTC est %.2lf Francs\n",PTTC); return 0; }
Remarque: Conversion des types et priorités
Lors du calcul de PTTC (type double), nous divisons le produit du PNET (type int) et de la TVA (type int) par 100. Pour ne pas perdre de la précision lors de la division et pour éviter un dépassage du domaine lors du calcul du produit, il faut forcer l’utilisation du type double.
En utilisant l’opérateur de la conversion forcée, il faut respecter la suite de l’évaluation de l’expression. Il ne suffirait donc pas d’écrire:
PTTC = (double)PNET+PNET*TVA/100;
Parce que la multiplication et la division ont la priorité sur l’addition; la conversion se ferait trop tard, c.-à-d.: à la fin du calcul.
Il existe plusieurs possibilités de résoudre ce problème:
– utiliser la conversion (double) lors des premières opérations effectuées:
PTTC = PNET+(double)PNET*TVA/100;
– utiliser une constante du type double lors de la division:
PTTC = PNET+PNET*TVA/100.0;
– déclarer PNET et/ou TVA comme double :
double PNET, TVA, PTTC;
suite . . .
b)
#include <stdio.h> main() { int TVA; double PNET, PTTC; /* donnée et résultat du type double */ printf("Entrez le prix TTC de l'article : "); scanf("%lf", &PTTC); printf("Entrez le taux de la TVA (en %) : "); scanf("%d", &TVA); /* Calcul: Ici, pas de forçage de type nécessaire */ PNET = PTTC*100/(100+TVA); printf("Le prix net est %.2lf Francs\n", PNET); return 0; }
Remarque: Conversion de types et priorités
Ici, PNET et PTTC sont du type double. Comme l’évaluation des opérateurs binaires * et / se fait en passant de gauche à droite, la valeur 100 est d’abord convertie en double (valeur 100.0) pour être multipliée avec PTTC. La première opérande de la division est donc du type double et le résultat de l’addition est automatiquement converti en double avant la division.
Un simple remède aux confusions serait ici l’utilisation de la constante 100.0 à la place de 100 :
PNET = PTTC*100.0/(100.0+TVA));
Exercice 4.10
#include <stdio.h> #include <math.h> main() { int XA, YA, XB, YB; double DIST; /* Attention: La chaîne de format que nous utilisons */ /* s'attend à ce que les données soient séparées par */ /* une virgule lors de l'entrée. */ printf("Entrez les coordonnées du point A : XA,YA "); scanf("%d,%d", &XA, &YA); printf("Entrez les coordonnées du point B : XB,YB "); scanf("%d,%d", &XB, &YB); DIST=sqrt(pow(XA-XB,2)+pow(YA-YB,2)); printf("La distance entre A(%d,% d) et B(%d, %d) est %.2f\n", XA, YA, XB, YB, DIST); return 0; }