---- TP05: Réels ---- 1. Avec 12 chiffres après la virgule, on obtient bien le nombre de chiffres souhaités, mais le programme affiche un 4 au lieu d'un 3 à la fin. Avec 15 chiffres, on se rend compte que le programme affiche des chiffres qu'on ne lui a pas demandé d'afficher, ce qui s'explique sûrement par le fait qu'au niveau binaire, ce nombre est impossible à représenter de façon exacte comme en base 10. Le 13e chiffre étant un 5, on comprend donc que le progamme a simplement arrondi le nombre à partir du 12e chiffre après la virgule. 2. Lors de l'emploi de l'opérateur %, on effectue l'opération sur deux réels (de type double), ceci provoque une erreur car il n'y aura jamais de reste dans une opération entre réels, car on effectue toujours une division non euclidienne. 3. On obtient les résultats suivants : inf -inf -nan Les 2 premiers résulats peuvent peut-être s'expliquer par le fait qu'informatiquement, on divise +1.0 et -1.0 par une valeur nulle, ce qui revient donc à multiplier ces nombres par l'inverse de la "valeur nulle", donc l'infini. 4. En écrivant le programme de façon classique, on se rend compte que le tampon stocke le saut de ligne comme un caractère lorsque l'utilisateur valide le réel qu'il a entré. Le programme affiche donc 5 fois un saut de ligne sans attendre quoique ce soit de l'utilisateur car le tampon n'est en réalité pas vide. Pour pallier ce problème, il suffit d'ajouter un getchar qui ne stockera rien pour se débarasser du caractère \n : On a donc le programme suivant : # include # include int main(void) { double nombre; char lettre; printf("Veuillez saisir un réel : "); scanf("%lf", &nombre); printf("\nSa notation scientifique est : %e\n", nombre); printf("Veuillez taper un caractère : "); getchar(); lettre = getchar(); printf("%c\n", lettre); printf("%c\n", lettre); printf("%c\n", lettre); printf("%c\n", lettre); printf("%c\n", lettre); return EXIT_SUCCESS; } 5. # include # include int main(void) { double montant; printf("Combien d'euros souhaitez vous investir ?\n -->"); scanf("%lf", &montant); printf("%9.4f\n", montant); montant = montant + (4*montant/100); printf("%9.4f\n", montant); montant = montant + (4*montant/100); printf("%9.4f\n", montant); montant = montant + (4*montant/100); printf("%9.4f\n", montant); montant = montant + (4*montant/100); printf("%9.4f\n", montant); montant = montant + (4*montant/100); printf("%9.4f\n", montant); montant = montant + (4*montant/100); printf("%9.4f\n", montant); return EXIT_SUCCESS; } 6. Version 1 : # include # include int main(void) { double reel_1; double reel_2; double reel_3; double reel_4; double reel_5; printf("Veuillez entrer un réel : "); scanf("%lf", &reel_1); getchar(); printf("\nVeuillez entrer un réel : "); scanf("%lf", &reel_2); getchar(); printf("\nVeuillez entrer un réel : "); scanf("%lf", &reel_3); getchar(); printf("\nVeuillez entrer un réel : "); scanf("%lf", &reel_4); getchar(); printf("\nVeuillez entrer un réel : "); scanf("%lf", &reel_5); getchar(); printf("\nSomme : %f\n", reel_1 + reel_2 + reel_3 + reel_4 + reel_5); return EXIT_SUCCESS; } Version 2 : # include # include int main(void) { double reel; double somme; somme = 0; printf("Veuillez entrer un réel : "); scanf("%lf", &reel); somme += reel; getchar(); printf("\nVeuillez entrer un réel : "); scanf("%lf", &reel); somme += reel; getchar(); printf("\nVeuillez entrer un réel : "); scanf("%lf", &reel); somme += reel; getchar(); printf("\nVeuillez entrer un réel : "); scanf("%lf", &reel); somme += reel; getchar(); printf("\nVeuillez entrer un réel : "); scanf("%lf", &reel); somme += reel; getchar(); printf("\nSomme : %f\n", somme); return EXIT_SUCCESS; }