Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
La programmation modulaire et les fonctions
CHAPITRE VI
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
La programmation modulaire et les fonctions
1) Définition et utilisation d’une fonction en C
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
La programmation modulaire et les fonctions
1) Définition et d’utilisation d’une fonction en C
#include <stdio.h>
/***** le programme principal (fonction main) *****/
main()
{
float fexple (float, int, int) ; /* déclaration de fonction fexple */
float x = 1.5 ;
float y, z ;
int n = 3, p = 5, q = 10 ;
/* appel de fexple avec les arguments x, n et p */
y = fexple (x, n, p) ;
printf ("valeur de y : %e\n", y) ;
/* appel de fexple avec les arguments x+0.5, q et n-1 */
z = fexple (x+0.5, q, n-1) ;
printf ("valeur de z : %e\n", z) ;
}
/*************** la fonction fexple ****************/
float fexple (float x, int b, int c)
{
float val ; /* déclaration d’une variable "locale" à fexple */
val = x * x + b * x + c ;
return val ;
}
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
La programmation modulaire et les fonctions
1) Définition et d’utilisation d’une fonction en C
#include <stdio.h>
/***** le programme principal (fonction main) *****/
main()
{
float fexple (float, int, int) ; /* déclaration de fonction fexple */
float x = 1.5 ;
float y, z ;
int n = 3, p = 5, q = 10 ;
/* appel de fexple avec les arguments x, n et p */
y = fexple (x, n, p) ;
printf ("valeur de y : %e\n", y) ;
/* appel de fexple avec les arguments x+0.5, q et n-1 */
z = fexple (x+0.5, q, n-1) ;
printf ("valeur de z : %e\n", z) ;
}
/*************** la fonction fexple ****************/
float fexple (float x, int b, int c)
{
float val ; /* déclaration d’une variable "locale" à fexple */
val = x * x + b * x + c ;
return val ;
}
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
La programmation modulaire et les fonctions
1) Définition et d’utilisation d’une fonction en C
#include <stdio.h>
/***** le programme principal (fonction main) *****/
main()
{
float fexple (float, int, int) ; /* déclaration de fonction fexple */
float x = 1.5 ;
float y, z ;
int n = 3, p = 5, q = 10 ;
/* appel de fexple avec les arguments x, n et p */
y = fexple (x, n, p) ;
printf ("valeur de y : %e\n", y) ;
/* appel de fexple avec les arguments x+0.5, q et n-1 */
z = fexple (x+0.5, q, n-1) ;
printf ("valeur de z : %e\n", z) ;
}
/*************** la fonction fexple ****************/
float fexple (float x, int b, int c)
{
float val ; /* déclaration d’une variable "locale" à fexple */
val = x * x + b * x + c ;
return val ;
}
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
La programmation modulaire et les fonctions
1) Définition et d’utilisation d’une fonction en C
#include <stdio.h>
/***** le programme principal (fonction main) *****/
main()
{
float fexple (float, int, int) ; /* déclaration de fonction fexple */
float x = 1.5 ;
float y, z ;
int n = 3, p = 5, q = 10 ;
/* appel de fexple avec les arguments x, n et p */
y = fexple (x, n, p) ;
printf ("valeur de y : %e\n", y) ;
/* appel de fexple avec les arguments x+0.5, q et n-1 */
z = fexple (x+0.5, q, n-1) ;
printf ("valeur de z : %e\n", z) ;
}
/*************** la fonction fexple ****************/
float fexple (float x, int b, int c)
{
float val ; /* déclaration d’une variable "locale" à fexple */
val = x * x + b * x + c ;
return val ;
}
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
La programmation modulaire et les fonctions
1) Définition et d’utilisation d’une fonction en C
#include <stdio.h>
/***** le programme principal (fonction main) *****/
main()
{
float fexple (float, int, int) ; /* déclaration de fonction fexple */
float x = 1.5 ;
float y, z ;
int n = 3, p = 5, q = 10 ;
/* appel de fexple avec les arguments x, n et p */
y = fexple (x, n, p) ;
printf ("valeur de y : %e\n", y) ;
/* appel de fexple avec les arguments x+0.5, q et n-1 */
z = fexple (x+0.5, q, n-1) ;
printf ("valeur de z : %e\n", z) ;
}
/*************** la fonction fexple ****************/
float fexple (float x, int b, int c)
{
float val ; /* déclaration d’une variable "locale" à fexple */
val = x * x + b * x + c ;
return val ;
}
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
La programmation modulaire et les fonctions
1) Définition et d’utilisation d’une fonction en C
float fexple (float x, int b, int c)
| | | | |
Type de la valeur de retour
Nom de la fonction
Premier Argument (type float)
Deuxième Argument (type int)
Troisième Argument (type int)
La fonction a besoin d’une variable de type float nommée val (c’est une variable locale à la fonction fexple)
Précise la valeur que fournira la fonction à la fin de son travail
Déclaration : prévient le compilateur que fexple est une fonction et précise les types
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
La programmation modulaire et les fonctions
2) Quelques règles
z = fexple (x+0.5, q, n-1) ;
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
La programmation modulaire et les fonctions
2) Quelques règles
float fexple (float x, int b, int c)
{
return (x * x + b * x + c) ;
}
double absom (double a, double b)
{
double s ;
s = a + b ;
if (s>0) return (s) ;
else return (-s) ;
}
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
La programmation modulaire et les fonctions
2) Quelques règles
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
La programmation modulaire et les fonctions
2) Quelques règles
Naturellement, la définition d’une telle fonction ne doit, contenir aucune instruction return
void sansval (int) ; // Déclaration
void sansval (int n)
float tirage (void) ; // Déclaration
float tirage (void)
void message (void) ; // Déclaration
void message (void)
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
La programmation modulaire et les fonctions
3) Les fonctions et leurs déclarations
ht
main()
{
float fexple (float, int, int) ; /* déclaration de la fonc. fexple */
.....
y = fexple (x, n, p) ;
.....
}
float fexple (float x, int b, int c) ;
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
La programmation modulaire et les fonctions
3) Les fonctions et leurs déclarations
float fexple (float, int, int) ;
main()
{
.....
}
void f1 (...)
{
.....
}
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
La programmation modulaire et les fonctions
4) Les arguments sont transmis par valeur
#include <stdio.h>
main()
{
void echange (int a, int b) ;
int n=10, p=20 ;
printf ("avant appel : %d %d\n", n, p) ;
echange (n, p) ;
printf ("après appel : %d %d", n, p) ;
}
void echange (int a, int b)
{
int c ;
printf ("début echange : %d %d\n", a, b) ;
c = a ;
a = b ;
b = c ;
printf ("fin echange : %d %d\n", a, b) ;
}
avant appel : 10 20
début echange : 10 20
fin echange : 20 10
après appel : 10 20
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
La programmation modulaire et les fonctions
4) Les arguments sont transmis par valeur
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
La programmation modulaire et les fonctions
5) Les variables globales
#include <stdio.h>
int i ;
main()
{
void optimist (void) ;
for (i=1 ; i<=5 ; i++)
optimist() ;
}
void optimist(void)
{
printf ("il fait beau %d fois\n", i) ;
}
il fait beau 1 fois
il fait beau 2 fois
il fait beau 3 fois
il fait beau 4 fois
il fait beau 5 fois
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
La programmation modulaire et les fonctions
5) Les variables globales
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
La programmation modulaire et les fonctions
5) Les variables globales
main()
{
....
}
int n ;
float x ;
fct1 (...)
{
....
}
fct2 (...)
{
....
}
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
La programmation modulaire et les fonctions
6) Les variables locales
int n ;
main()
{
int p ;
....
}
fct1 ()
{
int p ;
int n ;
}
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
La programmation modulaire et les fonctions
6) Les variables locales
#include <stdio.h>
main()
{
void fct(void) ;
int n ;
for ( n=1 ; n<=5 ; n++)
fct() ;
}
void fct(void)
{
static int i ;
i++ ;
printf ("appel numéro : %d\n", i) ;
}
appel numéro : 1
appel numéro : 2
appel numéro : 3
appel numéro : 4
appel numéro : 5
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
La programmation modulaire et les fonctions
Fonction récursive de calcul de factorielle
6) Les variables locales
long fac (int n)
{
if (n>1) return (fac(n-1)*n) ;
else return(1) ;
}
Écrire une fonction qui se contente de comptabiliser le nombre de fois où elle a été appelée en affichant seulement un message de temps en temps, à savoir :
● au premier appel : *** appel 1 fois ***
● au dixième appel : *** appel 10 fois ***
● au centième appel : *** appel 100 fois ***
● et ainsi de suite pour le millième, le dix millième appel...
● On supposera que le nombre maximal d’appels ne peut dépasser la capacité d’un long
Fonctions Récursives
Ecrire un programme complet permettant de calculer la somme de
1×2 + 2×3 + 3×4 + . . . + n×(n+1).