Académique Documents
Professionnel Documents
Culture Documents
Module Langage C
Ensa de Tanger 1
ENSA de Tanger
Ensa de Tanger 2
Présentation des fonctions en C
Ensa de Tanger 4
Présentation des fonctions en C
● Intérêt des fonctions :
Eviter d'écrire plusieurs fois une séquence d'instructions ;
en faire une fonction et l'appeler autant de fois que
nécessaire.
Début
Soit- -un
- - - -programme
---
---------
contenant un bloc
Appel du bloc
---------
d’instructions qui est
Appel du bloc
--------- répété à plusieurs
--------- ---------
--------- endroits
- - - - - - -du
--
---------
programme.
Appel du bloc
--------- ---------
--------- ---------
Appel du bloc
---------
--------- Fin
Fin
Présentation des fonctions en C
Définition d’une fonction en C
● En C un sous-programme est appelé fonction.
● Une fonction = petit bloc de programme : créer ou modifier
quelque chose dans le programme.
● Une fonction = ensemble d’instructions effectuant un calcul
sur des paramètres dont les valeurs sont “passées” à la
fonction, celle-ci s’en sert alors pour calculer un résultat
unique qu’elle retourne en fin de traitement.
● Le "résultat" ou "paramètre en sortie" n’est pas spécifié: il
s’identifie au nom de la fonction elle-même.
Présentation des fonctions en C
● Les fonctions retournent un seul résultat (comme les fonctions
mathématiques y = f(x,y,. . . ))
9
ENSA de Tanger
Ensa de Tanger 10
La syntaxe d’une fonction en C
Exemple 1
Ensa de Tanger 11
La syntaxe d’une fonction en C
Exemple 2
Ensa de Tanger 12
La syntaxe d’une fonction en C
Exemple 3
Ensa de Tanger 13
La syntaxe d’une fonction en C
syntaxe
Les
Unetype
Le mot-clef
arguments
fonctionreturn
peut
doivent
de retour comporter
est
est utilisé
être typés.
plusieurs
pour Chaque
obligatoire. sortirreturn.
de paramètre
la Elle
fonction
coupe
est
en au
précédé
premier
renvoyant
return
deun
sonrésultat.
qu’elle
type. rencontre.
14
La syntaxe d’une fonction en C
syntaxe
Entête ou prototype ou signature
de la fonction
15
La syntaxe d’une fonction en C
syntaxe
Une fonction s’écrit toujours sous la forme
ou
<type_retour> <nom_fonction> ( )
17
La syntaxe d’une fonction en C
Exemple 1
Calcul de x^y
float exposant ( float x , int y ) /* on suppose y>=0 */
{
prototype
int i; de la fonction
type de retour arguments typés
float res=1; /* Déclarations variables locales */
Syntaxe:
Ensa de Tanger 23
La syntaxe d’une fonction en C
Les arguments figurant dans l’en-tête de la fonction se
nomment des arguments muets , ou arguments formels, ils
seront utilisé dans la définition de la fonction.
Les arguments fournis lors de l’utilisation (l’appel) de la
fonction se nomment des arguments effectifs.
Ensa de Tanger 24
24
La syntaxe d’une fonction en C
exemple
float exposant ( float x , int y )
{
int i; paramètres formels
float res=1;
for (i=0 ; i<y ; i++)
res = res*x;
Affiche le résultat suivant:
return (res);
}
2^3=8
void main ( )
{
float a=2.0;
paramètres effectifs
int b = 3 ;
float c = exposant(a,b);
printf (" %g^%d = %g\n",a,b,c);
}
25
La syntaxe d’une fonction en C
return
return définit la valeur du résultat, et en même temps, elle
interrompt l’exécution de la fonction en revenant dans la
fonction qui l’a appelée.
Ensa de Tanger 26
26
La syntaxe d’une fonction en C
return: ces programmes sont équivalents.
Ensa de Tanger 27
27
ENSA de Tanger
Ensa de Tanger 28
Déclaration d’une fonction en C
Règles
La déclaration complète d’une fonction porte le nom de
prototype :
Ensa de Tanger 30
Déclaration d’une fonction en C
Règles: exemple
Correction 1 du programme.
Ensa de Tanger 31
Déclaration d’une fonction en C
Règles: exemple
Correction 2 du programme.
Ensa de Tanger 32
Déclaration d’une fonction en C
Règles
La déclaration d’une fonction peut être effectué à l’intérieur
des déclarations de toute fonction l’utilisant. (main par
exemple).
On peut utiliser des déclarations globales des fonctions , en
les faisant apparaître avant la définition de la première
fonction.
Ensa de Tanger 33
Déclaration d’une fonction en C
Règles
Il est recommandé de déclarer les fonctions en utilisant le
prototype, ce dernier sera utilisé par le compilateur :
Ensa de Tanger 34
Déclaration d’une fonction en C
Règles
Ensa de Tanger 35
Déclaration d’une fonction en C
Appel d’une fonction
- affectation:
variable = nom_fonction (paramètres);
- texte:
printf( "… texte …", nom_fonction (paramètres) );
- expression mathématique ( + , - , * , / , … )
a = b (opérateur math) nom_fonction(paramètres);
36
Exercices d’application
Exercice d’application
Donner un programme exemple qui illustre les 4 types d’affectations.
Ensa de Tanger 37
ENSA de Tanger
4- passage de paramètres en C
Ensa de Tanger 38
Passage de paramètre en C
Exemple
void echange (int x, int y)
{
int T ;
T = x;
x = y;
y = T; Affiche le résultat suivant:
printf(" x=%d et y=%d\n ",x,y);
} x = 20 et y = 10
void main ( ) {
A = 10 et B = 20
int A,B ;
A = 10;
B = 20;
echange (A,B) ;
printf("A=%d et B=%d\n ",A,B);
}
39
Passage de paramètre en C
passage de paramètres par valeur
Cas général :
carre (a);
Les modifications locales à la fonction n’affectent pas les
paramètres.
40
Passage de paramètre en C
Passage de paramètres par adresse ou par
référence
- Pour modifier la valeur d’un argument effectif par la fonction
appelée; il faut que celle-ci puisse accéder non seulement à la
valeur de la variable, mais aussi à son adresse (&variable).
41
Passage de paramètre en C
passage de paramètres par adresse
Comment réaliser ce passage ? Que doit-on utiliser ?
- Dans ce passage la fonction appelée a besoin de l'adresse de
la variable dont on veut modifier la valeur.
- Le paramètre formel doit donc être un pointeur et le paramètre
effectif une adresse ==> lors d'un appel de la fonction, il faut
envoyer l'adresse et non la valeur de la variable.
- Donc:
* la fonction appelante doit fournir l'adresse de la variable et
* la fonction appelée doit déclarer le paramètre comme
pointeur.
On peut alors atteindre la variable à l'aide du pointeur. 42
Passage de paramètre en C
exemple
void echange (int *x, int *y)
{
int T ;
T = *x;
*x = *y;
*y = T;
Affiche le résultat suivant:
printf(" x=%d et y=%d\n ",*x,*y);
} x = 20 et y = 10
A = 20 et B = 10
void main ( ) {
int A,B ;
A = 10;
B = 20;
echange (&A, &B) ;
printf("A=%d et B=%d\n ",A,B);
} 43
ENSA de Tanger
Ensa de Tanger 44
Exercice : les variables globales
Donner le résultat du programme suivant:
Ensa de Tanger 45
Exercice : les variables globales
Le programme après correction:
Ensa de Tanger 46
Les variables globales
Définition
Les variables globales sont des variables qui peuvent être
partagées par plusieurs fonctions (main entre autres).
Ensa de Tanger 47
Les variables globales
La portée des variables globales
Les variables globales ne sont connues du compilateur que
dans la partie du programme source suivant leur déclaration.
Leur portée (ou leur espace de validité) est limitée à la partie
du programme source qui suit leur déclaration.
Il est possible de déclarer des variables globales à n’importe
quel endroit du programme source qui soit extérieur aux
fonctions.
Il est recommandé de déclarer les variables globales au début
du programme source.
Ensa de Tanger 48
Les variables globales
La portée des variables globales
Les valeurs des variables globales peuvent être modifiées par
une fonction
x=17 x=17
Ensa de Tanger n=15 n=20 49
Les variables globales
Classe d’allocation des variables globales
les variables globales existent pendant toute l’exécution du
programme dans lequel elles apparaissent.
Ensa de Tanger 50
Les variables globales
La portée des variables globales
n=0 n=15
Ensa de Tanger 51
ENSA de Tanger
Ensa de Tanger 52
Les variables locales
Définition
Ensa de Tanger 53
Les variables locales
La portée des variables locales
Ensa de Tanger 54
Les variables locales
La portée des variables locales
Donner le résultat de ce programme:
n=3
La variable p de main n’a aucun rapport avec la variable p de fct1. De même, la variable n
de fct1 n’a aucun rapport avec la variable globale n.
Ensa de Tanger 55
Les variables locales
La portée des variables locales
10 3
La valeur de n est : 10
Ensa de Tanger 56
Les variables locales
La portée des variables locales
8
La valeur de n est : 5
Ensa de Tanger 57
Les variables locales
Les variables locales automatiques
Ensa de Tanger 58
Les variables locales
Les variables locales statiques
Ensa de Tanger 59
Les variables locales
Les variables locales statiques
Ensa de Tanger 60
Les variables locales
Les variables locales statiques
Ensa de Tanger 61
Les variables locales
Le cas des fonctions récursives
Le langage C autorise la récursivité des appels de fonctions:
Récursivité directe : une fonction comporte, dans sa
définition, au moins un appel à elle-même,.
Récursivité croisée : l’appel d’une fonction entraîne celui
d’une autre fonction qui, à son tour, appelle la fonction
initiale.
Ensa de Tanger 62
Les variables
Le cas des fonctions récursives
Le langage C autorise la récursivité des appels de fonctions:
Récursivité directe : une fonction comporte, dans sa
définition, au moins un appel à elle-même,.
Récursivité croisée : l’appel d’une fonction entraîne celui
d’une autre fonction qui, à son tour, appelle la fonction
initiale.
Ensa de Tanger 63
Les variables locales
Les classes d’allocation des variables
Type, portée et classe d’allocation des variables
Ensa de Tanger 64
Exercices d’application
Exercice 1
Qu’affiche le programme suivant ?
Ensa de Tanger 65
Exercices d’application
Exercice 2
Ecrire:
● une fonction, nommée f1, se contentant d’afficher "bonjour" (elle ne
possèdera aucun argument ni valeur de retour),
● une fonction, nommée f2, qui affiche "bonjour" un nombre de fois égal
à la valeur reçue en argument (int) et qui ne renvoie aucune valeur,
● une fonction, nommée f3, qui fait la même chose que f2, mais qui, de
plus, renvoie la valeur (int) 0.
Ensa de Tanger 66
Exercices d’application
Exercice 2
Ecrire:
● une fonction, nommée max2, qui donne la valeur maximal de deux
entiers.
● Ecrire une fonction max3 appelant cette fonction pour calculer le max
de trois entiers en utilisant l’opérateur conditionnel.
Ensa de Tanger 67
Exercices d’application
Exercice 4
Ecrire:
● une fonction, nommée sys2, qui donne les solutions x et y d’un
ax+by=c
système
dx+ey=f
●un programme qui permet de résoudre des systèmes à 2 inconnus
fournis par l’utilisateur.
Ensa de Tanger 68
Exercices d’application
Exercice 5
● Ecrire en langage C une fonction "premier1" qui prend en argument
un entier et retourne 1 s’il est premier.
Ensa de Tanger 69
Exercices d’application
Exercice 6
Ecrire une fonction récursive calculant la valeur de la « fonction
d’Ackermann » A définie
pour m>0 et n>0 par :
A(m,n) = A(m-1,A(m,n-1)) pour m>0 et n>0
A(0,n) = n+1 pour n>0
A(m,0) = A(m-1,1) pour m>0
Ensa de Tanger 70