Exercice langage C application des structures répétitive 7
Rédigé par GC Team, Publié le 02 Janvier 2011, Mise à jour le Mercredi, 11 Août 2021 16:15Exercice 6.8
Calculez le nombre lu à rebours d'un nombre positif entré au clavier en supposant que le fichier d'entrée standard contient une suite de chiffres non nuls, terminée par zéro (Contrôlez s'il s'agit vraiment de chiffres). Exemple: Entrée: 1 2 3 4 0 Affichage: 4321
Exercice 6.9
Calculez le nombre lu à rebours d'un nombre positif entré au clavier en supposant que le fichier d'entrée standard contient le nombre à inverser. Exemple: Entrée: 1234 Affichage: 4321
#include <stdio.h>
main()
{
int X; /* Le chiffre courant */
int N=0; /* Le compteur des décimales */
long VALD=1; /* Valeur de la position décimale courante */
long NOMB=0; /* Le nombre résultat */
do
{
printf("Entrez le %d%s chiffre : ", (N+1), (N)?"e":"er");
scanf("%d", &X);
if (X<0||X>9)
printf("\a");
else if (X)
{
NOMB += VALD*X;
N++;
VALD *= 10;
}
else
printf("La valeur du nombre renversé est %ld\n", NOMB);
}
while (X);
return 0;
}
Remarque :
En remplaçant la ligne
NOMB += VALD*X;
par
NOMB += pow(10, N)*X;
on n'a plus besoin de la variable VALD. Il faut cependant inclure les fonctions de la bibliothèque <math>. D'autre part, le calcul de 10N serait alors répété à chaque exécution de la boucle.
Finalement, cette variante est plus lente et plus volumineuse que la première.
Solution Exercice 6.9
#include <stdio.h>
main()
{
int NOMB; /* Le nombre à inverser */
int NINV; /* Le nombre inversé */
/* Attention: en utilisant le type int, il est impossible */
/* d'inverser correctement des nombres comme 10033 ... */
do
{
printf("Entrez un nombre positif (<10000) : ", NOMB);
scanf("%d", &NOMB);
}
while (NOMB<0 || NOMB>9999);
NINV=0;
while(NOMB>0)
{
NINV *= 10;
NINV += NOMB%10;
NOMB /= 10;
}
/* Autre possibilité : */
/* for (NINV=0 ; NOMB>0 ; NOMB/=10)
NINV = NINV*10 + NOMB%10;
*/
printf("Le nombre 'inversé' est : %d\n", NINV);
return 0;
}