Home- Exercices - Solutions des exercices

 

Page Précédente - Page Suivante


Solutions des Exercices chapitre 6: Les boucles

Exercice 6.1

a) Avec la boucle while,

#include <stdio.h>
main()
{
 int N;       
 int NOMB;    
 int I;       /* compteur */
 long SOM;    /* la somme à calculer */
 double PROD; /* le produit des nombres entrés */
 
 printf("Donnez le nombre de données : ");
 scanf("%d", &N);
 
 SOM=0;
 PROD=1;
 I=1;
 while(I<=N)
    {
     printf("%d. nombre : ", I);
     scanf("%d", &NOMB);
     SOM  += NOMB;
     PROD *= NOMB;
     I++;
    }
 
 printf("La somme   des %d nombres est %ld \n", N, SOM);
 printf("Le produit des %d nombres est %.0f\n", N, PROD);
 printf("La moyenne des %d nombres est %.4f\n", N, (float)SOM/N);
}

b) La boucle do - while,

 #include <stdio.h>
main()
{
 int N;       
 int NOMB;    
 int I;       /* compteur */
 long SOM;    /* la somme à calculer */
 double PROD; /* le produit des nombres entrés */
 
 printf("Donnez le nombre de données : ");
 scanf("%d", &N);
 
SOM=0;
 PROD=1;
 I=1;
 do
    {
     printf("%d. nombre : ", I);
     scanf("%d", &NOMB);
     SOM  += NOMB;
     PROD *= NOMB;
     I++;
    }
 while(I<=N);
printf("La somme   des %d nombres est %ld \n", N, SOM);
 printf("Le produit des %d nombres est %.0f\n", N, PROD);
 printf("La moyenne des %d nombres est %.4f\n", N, (float)SOM/N);
 
}

c) La boucle for.

  #include <stdio.h>
main()
{
 int N;       
 int NOMB;    
 int I;       /* compteur */
 long SOM;    /* la somme à calculer */
 double PROD; /* le produit des nombres entrés */
 
 printf("Donnez le nombre de données : ");
 scanf("%d", &N);
for (SOM=0, PROD=1, I=1 ; I<=N ; I++)
    {
     printf("%d. nombre : ", I);
     scanf("%d", &NOMB);
     SOM  += NOMB;
     PROD *= NOMB;
    }
printf("La somme   des %d nombres est %ld \n", N, SOM);
 printf("Le produit des %d nombres est %.0f\n", N, PROD);
 printf("La moyenne des %d nombres est %.4f\n", N, (float)SOM/N);
}

d) La boucle for est la plus adéquate.

Exercice 6.2

#include <stdio.h>
main()
{
 int N;       
 int NOMB;    
 int I;       /* compteur */
 long SOM;    /* la somme à calculer */
 double PROD; /* le produit des nombres entrés */
 
 do
              {
                printf("Nombre de données : ");
                scanf("%d", &N);
              }
            while(N<1 || N>15);
 
SOM=0;
 PROD=1;
 I=1;
 do
    {
     printf("%d. nombre : ", I);
     scanf("%d", &NOMB);
     SOM  += NOMB;
     PROD *= NOMB;
     I++;
    }
 while(I<=N);
printf("La somme   des %d nombres est %ld \n", N, SOM);
 printf("Le produit des %d nombres est %.0f\n", N, PROD);
 printf("La moyenne des %d nombres est %.4f\n", N, (float)SOM/N);
 
}

On peut utiliser soit while ou do while.

Exercice 6.3

En utilisant la boucle while :
#include <stdio.h>
main()
{
 int NUM;   /* numérateur   de la division entière */
 int DENOMINATEUR;   /* dénominateur de la division entière */
 int DIV;   /* résultat de la division entière */
 int r;   /* reste    de la division entière */
 
 printf("Donnez le numérateur   : ");
 scanf("%d", &NUM);
 printf("Donnez le dénominateur : ");
 scanf("%d", & DENOMINATEUR);
 
 r=NUM;
 DIV=0;
 while(r>= DENOMINATEUR)
    {
     r-= DENOMINATEUR;
     DIV++;
    }
 
/* ou mieux encore : */
/*
 for (r=NUM, DIV=0 ; r>= DENOMINATEUR; DIV++)
      r-= DENOMINATEUR;
 */
 
 printf(" %d divisé par %d est %d reste %d\n", NUM, DENOMINATEUR, DIV, r);
 
}
En utilisant la boucle for :
#include <stdio.h>
main()
{
 int NUM;   
 int DENOMINATEUR;   
 int DIV;   
 int r;   
 
 printf("Donnez le numérateur   : ");
 scanf("%d", &NUM);
 printf("Donnez le dénominateur : ");
 scanf("%d", & DENOMINATEUR);
 
 r=NUM;
 DIV=0;
  
 
for (r=NUM, DIV=0 ; r>= DENOMINATEUR; DIV++)
      r-= DENOMINATEUR;
 
 printf(" %d divisé par %d est %d reste %d\n", NUM, DENOMINATEUR, DIV, r);
 
}

Exercice 6.4

Solution 1 : en utilisant while

#include <stdio.h>
main()
{
 int  N;      
 int  I;      
 double FACT; 
 
 do
    {
      printf("Donnez un nombre entier : ");
     scanf("%d", &N);
    }
 while (N<0);
 
 /* a */
 /* Pour N=0, le résultat sera automatiquement 0!=1 */
 I=1;
 FACT=1;
 while (I<=N)
       {
        FACT*=I;
        I++;
       }
 
 /* b */
 /* Pour N=0, le résultat sera automatiquement 0!=1 */
 /*
 for (FACT=1.0, I=1 ; I<=N ; I++)
        FACT*=I;
  */
 
 printf ("%d! = %.0f\n", N, FACT); 
}

Solution 2 : en utilisant for

#include <stdio.h>
main()
{
 int  N;      
 int  I;      
 double FACT; 
 
 do
    {
      printf("Donnez un nombre entier : ");
     scanf("%d", &N);
    }
 while (N<0);
 
I=1;
 FACT=1;
  
 
for (FACT=1.0, I=1 ; I<=N ; I++)
        FACT*=I;
  */
 
 printf ("%d! = %.0f\n", N, FACT); 
}

Exercice 6.5

#include <stdio.h>
main()
{
 int  X, N;   
 int  I;      /* Le compteur i */
 double r; 
              
 
 do
    {
      printf("Donnez  X : ");
     scanf("%d", &X);
    }
 while (X<0);
 do
    {
      printf("Donnez l'exposant N : ");
     scanf("%d", &N);
    }
 
 while (N<0);
 
 /* Pour le cas où N=0, le résultat sera 1 car X^0=1 */
 for (r=1.0, I=1 ; I<=N ; I++)
        r*=X;
 
 /* Pour le cas où X=0 et N=0 , 0^0 n'est pas défini */
 if (N==0 && X==0)
     printf("zéro exposant zéro n'est pas défini !\n");
 else
     printf("Résultat : %d ^ %d = %.0f\n", X, N, r);
  
}

 

Exercice 6.6

#include <stdio.h>
main()
{
 int N;     
 int I;     
 float s;
 
 do
   {
     printf ("Donnez le nombre de termes: ");
    scanf ("%d", &N);
   }
 
 while (N<1);
 for (s=0.0, I=1 ; I<=N ; I++)
    s += (float)1/I;
  printf("La somme des %d premiers termes est %f \n", N, s);
 
}

Exercice 6.7

#include <stdio.h>
main()
{
 int  X;      
 int  N=0;    /* Le compteur des données */
 int  s=0;  
 long p=1; 
     
 
 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)
        {
         N++;
         s+=X;
         p*=X;
        }
     else if (!X && N>0)
         {
         printf("La somme   des chiffres est %d \n", s);
         printf("Le produit des chiffres est %ld\n", p);
         printf("La moyenne des chiffres est %f \n", (float)s/N);
        }
    }
 while (X);
}

 

Exercice 6.8

#include <stdio.h>
main()
{
 int  X;      
 int  N=0;     
 long VALD=1;  
 long NOMB=0;  
 do
    {
      printf("Donnez 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);
  
}

Exercice 6.9

Solution 1 :

#include <stdio.h>
main()
{
 int  NOMB;   /* Le nombre à inverser */
 int  NINV;   /* Le nombre inversé    */
 
 do
   {
     printf("Donnez 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;
    }
 
 printf("Le nombre 'inversé' est : %d\n", NINV);
}

 

Solution 2 :

#include <stdio.h>
main()
{
 int  NOMB;   /* Le nombre à inverser */
 int  NINV;   /* Le nombre inversé    */
 
 do
   {
     printf("Donnez un nombre positif (<10000) : ", NOMB);
    scanf("%d", &NOMB);
   }
 while (NOMB<0 || NOMB>9999);
 
 NINV=0;
  
 for (NINV=0 ; NOMB>0 ; NOMB/=10)
        NINV = NINV*10 + NOMB%10;
 
 
 printf("Le nombre 'inversé' est : %d\n", NINV);
 
}

Exercice 6.10

#include <stdio.h>
main()
{
 int N;     
 float X;   
 float A;   /* coefficients du polynôme */
 float P;   /* coefficient courant du terme Horner */
 
 printf("Donnez le degré  N du polynôme   : ");
 scanf("%d", &N);
 printf("Donnez la valeur X de l'argument : ");
 scanf("%f", &X);
 
 for(P=0.0 ; N>=0 ; N--)
   {
     printf("Donnez le coefficient A%d : ", N);
    scanf("%f", &A);
    P = P*X + A;
   }
 
 printf("Valeur du polynôme pour X = %.2f : %.2f\n", X, P);
 
}

 

Exercice 6.11

#include <stdio.h>
main()
{
 int A, B;         
 int X, Y, RESTE;  
 
 do 
    {
      printf("Donnez l'entier A (non nul) : ");
     scanf("%d", &A);
    } 
 while(!A);
 do 
    {
      printf("Donnez l'entier B (non nul) : ");
     scanf("%d", &B);
    } 
 while(!B);
 
 for (RESTE=A, X=A, Y=B ; RESTE ; X=Y, Y=RESTE)
      RESTE = X%Y;
 
 printf("Le PGCD de %d et de %d est %d\n", A, B, X);
 
}

Exercice 6.12

#include <stdio.h>
main()
{
 int U1, U2, UN;    
 int N;             
 int I;             
 do
   {
     printf("Donnez le Rang du terme demandé : ");
    scanf("%d", &N);
   }
 while(N<1);
 
 U1=U2=1; /* Initialisation */ 
 if (N==1)
      UN=U1;
 else if (N==2)
      UN=U2;
 else
      {
       for (I=3 ; I<=N ; I++)
           {
            UN = U1+U2;
            U1 = U2;
            U2 = UN;
           }
      }
  printf("Valeur du terme de rang %d : %d\n", N, UN);
 
}

 

Exercice 6.13

#include <stdio.h>
main()
{
 double A;   
 double X;   
 int N;      
 int J;      
 
 do
    {
      printf("Donnez le réel positif A : ");
     scanf("%lf", &A);
    }
 while(A<0);
 do
    {
      printf("Donnez le degré de l'approximation : ");
     scanf("%d", &N);
    }
 while(N<=0 || N>=50);
 
 for(X=A, J=1 ; J<=N ; J++)
     {
      X = (X + A/X) / 2;
      printf("La %2d%s approximation de la racine carrée"
             " de %.2f est %.2f\n", J, (J==1)?"ère":"e", A, X);
     }
  
}

Exercice 6.14

#include <stdio.h>
main()
{
 int LIG;    
 int L;      
 int ESP;    
 int I;     /* I pour compter les caractères */ 
 
 do
   {
     printf("Donnez le nombres de lignes : ");
    scanf("%d", &LIG);
   }
 while (LIG<1 || LIG>20);
 
 for (L=0 ; L<LIG ; L++)
   {
    ESP = LIG-L-1;
    for (I=0 ; I<ESP ; I++)
        putchar(' ');
    for (I=0 ; I<2*L+1  ; I++)
        putchar('*');
    putchar('\n');
   }
  
}

 

Exercice 6.15

#include <stdio.h>
main()
{
 const int MAX = 10; 
 int I;              
 int J;              
 
 /* Affichage de l'en-tête */
 printf(" X*Y I");
 for (J=0 ; J<=MAX ; J++)
        printf("%4d", J);
 printf("\n");
 printf("------");
 for (J=0 ; J<=MAX ; J++)
        printf("----");
 printf("\n");
 
 /* Affichage du tableau */
 for (I=0 ; I<=MAX ; I++)
      {
       printf("%3d  I", I);
       for (J=0 ; J<=MAX ; J++)
            printf("%4d", I*J);
       printf("\n");
      }
  
}

 


 


Home- Exercices - Solutions des exercices
Copyright © 2019