Exercice langage C: Application des structures répétitive 7

Exercice langage C
[tab name=’Exercice langage C’]

Exercice 1:

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 2 :

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

[/tab][tab name=’Correction’]

Exercice 1 :

#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.

Exercice 2 :

#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;
}

Exercice langage C

[/tab][end_tabset skin= »ginger » ]

Télécharger aussi :

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *