#include <stdio.h> #include <math.h> #include <ctype.h> main() { /* Déclarations */ char CH[100]; /* chaîne numérique à convertir */ double N; /* résultat numérique */ int I; /* indice courant */ int SIG; /* signe de la valeur rationnelle */ int DEC; /* nombre de décimales */ int OK; /* indicateur logique précisant si la */ /* chaîne a été convertie avec succès */ /* Saisie de la chaîne */ printf("Entrez un nombre rationnel : "); gets(CH); /* Conversion de la chaîne : */ /* Initialisation des variables */ OK=1; N=0.0; I=0; SIG=1; /* Traitement du signe */ if (CH[I]=='-') SIG=-1; if (CH[I]=='-' || CH[I]=='+') I++; /* Positions devant le point décimal */ for ( ; isdigit(CH[I]); I++) N = N*10.0 + (CH[I]-'0'); /* Traitement du point décimal */ if (CH[I]=='.') I++; else if (CH[I]) OK=0; /* Traitement et comptage des décimales */ for (DEC=0; isdigit(CH[I]); I++, DEC++) N = N*10.0 + (CH[I]-'0'); if (CH[I]) OK=0; /* Calcul de la valeur à partir du signe et */ /* du nombre de décimales. */ N = SIG*N/pow(10,DEC); /* Affichage de la chaîne convertie */ if (OK) printf("Valeur numérique : %f\n", N); else printf("\a\"%s\" n'est pas une valeur " "rationnelle correcte.\n", CH); return 0; }