Pages

lundi 7 novembre 2011

Exercices corrigés : les fonctions en langage C


Exercice 1 :

Ecrire un programme se servant d'une fonction MOYENNE du type float pour afficher la moyenne arithmétique de deux nombres réels entrés au clavier.





Solution :
#include <stdio.h>
 
main()
{
 /* Prototypes des fonctions appelées */
 float MOYENNE(float X, float Y);
 /* Variables locales */
 float A,B;
 /* Traitements */
 printf("Introduire deux nombres : ");
 scanf("%f %f", &A, &B);
 printf("La moyenne arithmétique de %.2f et %.2f est %.4f\n",
                                           A, B, MOYENNE(A,B));
 return 0;
}
 
float MOYENNE(float X, float Y)
{
 return (X+Y)/2;
}

Exercice 2 :

Ecrire deux fonctions qui calculent la valeur XN pour une valeur réelle X (type double) et une valeur entière positive N (type int) :
a) EXP1 retourne la valeur XN comme résultat.
b) EXP2 affecte la valeur XN à X.
Ecrire un programme qui teste les deux fonctions à l'aide de valeurs lues au clavier.


Solution :
#include <stdio.h>
 
main()
{
 /* Prototypes des fonctions appelées */
 double EXP1(double X, int N);
 void   EXP2(double *X, int N);
 /* Variables locales */
 double A;
 int B;
 /* Traitements */
 printf("Introduire un réel X : ");
 scanf("%lf", &A);
 printf("Introduire l'exposant positif N : ");
 scanf("%d", &B);
 /* a */
 printf("EXP1(%.2f , %d) = %f\n", A, B, EXP1(A,B));
 /* b */
 /* Comme la valeur initiale de A est perdue à l'appel */
 /* de EXP2, il faut partager l'affichage si on veut   */
 /* afficher la valeur de A avant et après l'appel !   */ 
 printf("EXP2(%.2f , %d) = ", A, B);
 EXP2(&A, B);
 printf("%f\n", A);
 return 0;
}
 
double EXP1(double X, int N)
{
 double RES;
 for (RES=1.0; N>0; N--)
     RES *= X;
 return RES;
}
 
void EXP2(double *X, int N)
{
 double AIDE;
 for (AIDE=1.0; N>0; N--)
     AIDE *= *X;
 *X = AIDE;
}

Exercice 3 :
Ecrire une fonction MIN et une fonction MAX qui déterminent le minimum et le maximum de deux nombres réels.
Ecrire un programme se servant des fonctions MIN et MAX pour déterminer le minimum et le maximum de quatre nombres réels entrés au clavier.

Solution :
#include <stdio.h>
 
main()
{
 /* Prototypes des fonctions appelées */
 double MIN(double X, double Y);
 double MAX(double X, double Y);
 /* Variables locales */
 double A,B,C,D;
 /* Traitements */
 printf("Introduire 4 réels : ");
 scanf("%lf %lf %lf %lf", &A, &B, &C, &D);
 printf("Le minimum des 4 réels est %f \n",
                                    MIN( MIN(A,B), MIN(C,D)) );  
  printf("Le maximum des 4 réels est %f \n",
                                    MAX( MAX(A,B), MAX(C,D)) ); 
  return 0;
}
 
double MIN(double X, double Y) 
{
 if (X<Y)
     return X;
 else
     return Y;
}
 
double MAX(double X, double Y)
{
 if (X>Y)
     return X;
 else
     return Y;
}
 
 /* ou bien */
/* 
double MIN(double X, double Y) 
{
 return (X<Y) ? X : Y;
}
 
double MAX(double X, double Y)
{
 return (X>Y) ? X : Y;
}
 */

Exercice 4 :
Ecrire la fonction NCHIFFRES du type int qui obtient une valeur entière N (positive ou négative) du type long comme paramètre et qui fournit le nombre de chiffres de N comme résultat.
Ecrire un petit programme qui teste la fonction NCHIFFRES:
Exemple:
         Introduire un nombre entier : 6457392
         Le nombre 6457392 a 7 chiffres.

Solution :
#include <stdio.h>
main()
{
 /* Prototypes des fonctions appelées */
 int NCHIFFRES(long N);
 /* Variables locales */
 long A;
 /* Traitements */
 printf("Introduire un nombre entier : ");
 scanf("%ld", &A);
 printf("Le nombre %ld a %d chiffres.\n",A ,NCHIFFRES(A));
 return 0;
}
 
int NCHIFFRES(long N)
{
  /* Comme N est transmis par valeur, N peut être */
 /* modifié à l'intérieur de la fonction. */
 int I;
 /* Conversion du signe si N est négatif */
 if (N<0) 
      N *= -1;
  /* Compter les chiffres */
 for (I=1; N>10; I++)
      N /= 10;
 return I;
}

Exercice 5 :
En mathématiques, on définit la fonction factorielle de la manière suivante:
0! = 1
n! = n*(n-1)*(n-2)* ... * 1 (pour n>0)
Ecrire une fonction FACT du type double qui reçoit la valeur N (type int) comme paramètre et qui fournit la factorielle de N comme résultat. Ecrire un petit programme qui teste la fonction FACT.
Solution :

#include <stdio.h>
 
main()
{
 /* Prototypes des fonctions appelées */
 double FACT(int N);
 /* Variables locales */
 int N;
 /* Traitements */
 printf("Introduire un nombre entier N : ");
 scanf("%d", &N);
 printf("La factorielle de %d est %.0f \n",N , FACT(N));
 return 0;
}
double FACT(int N)
{
  /* Comme N est transmis par valeur, N peut être */
 /* modifié à l'intérieur de la fonction. */
 double RES;
 for (RES=1.0 ; N>0 ; N--)
      RES *= N;
 return RES;
}



4 commentaires:

  1. j'arrive pas a comprendre cette N/=10 il s'agit de compter les chiffres des entiers de type long peut qlq m'aider :) ?

    RépondreSupprimer
    Réponses
    1. Bonjour Charifa,

      for (I=1; N>10; I++)
      N /= 10;
      return I;

      l'expression N/=10 est équivalente à N=N/10.
      C'est à dire tant que la valeur de N est supérieur à 10 on incrémente le compteur et on divise par 10 N.

      Bon courage.

      Supprimer

Partenaires

Computers Blogs
Ajoutez votre site

Contactez-nous

Nom

E-mail *

Message *

Tous droits resérvés-www.exercices-corriges.com Seo Blogger Templates