Chapitre 9
Les fonctions
Sahar TRIGUI 219 2024-2025
Introduction
Un programme en C peut être découper en plusieurs parties.
Ces parties sont appelées des modules (programmation
modulaire).
Les modules en langage C sont appelés des fonctions.
Une fonction est une suite d’instructions regroupées sous un
même nom.
La fonction principale en C est appelée main. Elle peut
appeler une ou plusieurs autres fonctions appelées fonctions
secondaires.
Toute fonction secondaire peut appeler d’autres fonctions
secondaires.
Sahar TRIGUI 220 2024-2025
Définition d’une fonction
La définition d’une fonction est donnée par une structure
identique à celle du fonction main (entête et corps).
entête
type nom_fonction(type1 arg1, type2 arg2,…)
{ … //déclaration des variables locales
corps … //liste d’instructions
}
type : c’est le type de la valeur retournée par la fonction .
Les arguments de la fonction sont appelés paramètres
formels
Sahar TRIGUI 221 2024-2025
Définition d’une fonction
Les paramètres formels peuvent être de différents types.
Le corps de la fonction commence par la déclaration des variables
locales. Il se termine par l’instruction: return(expression);
La valeur de retour de la fonction est la valeur de l’expression .
Le type de la valeur retournée est le même que le type spécifié dans
l’entête de la fonction.
Remarques:
Le nom d’une fonction doit respecter les mêmes règles pour le choix
des noms des variables.
Si la fonction n’a pas de valeur à retourner, son type est void. Dans ce
cas l’instruction de retour est: return; (on peut omettre cette
instruction)
Si la fonction n’a pas d’arguments, on remplace la liste des
paramètres par le mots clé void ou tout simplement on met ().
Sahar TRIGUI 222 2024-2025
Définition d’une fonction
Exemple:
int somme(int a, int b) void affiche_tabl(int *tab, int n) int puissance(int a, int n)
{ { {
return (a+b); int i; if(n==0)
} for (i=0;i<n;i++) return 1;
{ else
Ou bien printf("%d\n",tab[i]); return
int somme(int a, int b) } (a*puissance(a,n-1));
{ return; }
int res; }
res=a+b;
return (res);
}
Sahar TRIGUI 223 2024-2025
Définition d’une fonction
Pas de retour et pas d’arguments Pas de retour et avec arguments
void nom_fonction (){ void nom_fonction (type1 arg1,…){
Instructions ; Instructions ;
} }
Avec retour et pas d’arguments Avec retour et avec arguments
type_retour nom_fonction (){ type_retour nom_fonction (type1 arg1,…){
Instructions ; Instructions ;
return resultat ; return resultat ;
} }
Sahar TRIGUI 224 2024-2025
Définition d’une fonction
Pas de retour et avec arguments
Avec retour et avec arguments
Sahar TRIGUI 225 2024-2025
Appel d’une fonction
L’appel d’une fonction se fait selon le syntaxe suivant:
nom_fonction(paramètre1, paramètre2,…)
Les paramètres utilisés lors de l’appel d’une fonction sont
appelés paramètres effectifs. Leurs valeurs seront utilisés pour
le traitement.
Remarque:
Lors de l’appel d’une fonction, l’ordre et le type des paramètres
doivent coïncider avec ceux données dans l’entête de la
fonction.
exemple
Sahar TRIGUI 226 2024-2025
Appel d’une fonction
Pas de retour et pas d’arguments Pas de retour et avec arguments
nom_fonction () ; nom_fonction (arg1, arg2,…) ;
Avec retour et pas d’arguments Avec retour et avec arguments
X= nom_fonction () ; X= nom_fonction (arg1, arg2,…) ;
X=Y/ nom_fonction () ; X=Y/ nom_fonction (arg1, arg2,…) ;
printf (nom_fonction () ); printf (nom_fonction (arg1, arg2,…) );
Sahar TRIGUI 227 2024-2025
Déclaration d’une fonction
Une fonction secondaire est déclarée avant la fonction
principale main par son prototype qui retourne le type de la
fonction et celui de ses paramètres.
type nom_fonction(type1, type2,…);
La déclaration d’une fonction peut ce faire aussi de la
manière suivante:
type nom_fonction(type1 arg1, type2 arg2,…);
La définition d’une fonction secondaire se fait soit avant soit
après la fonction principale main.
Sahar TRIGUI 228 2024-2025
Déclaration d’une fonction
Remarques:
L’imbrication des fonctions en C est interdite.
Si une fonction est définie après son premier appel, elle doit
être obligatoirement déclarer avant la fonction appelante.
Ainsi, le compilateur connaisse la fonction au moment ou elle
est appelée.
Sahar TRIGUI 229 2024-2025
Déclaration d’une fonction
Exemples:
#include<stdio.h> #include<stdio.h>
int somme(int a, int b) int somme(int a, int b) ;
{ /*int somme(int , int ) ;*/
return (a+b); main()
} {
main() int x=2,y=5;
{
int x=2,y=5; printf("%d+%d=%d",x,y,somme(x,y));
printf("%d+%d=%d",x,y,somme(x,y)); }
} int somme(int a, int b)
{
return (a+b);
}
Sahar TRIGUI 230 2024-2025
Exercice
Ecrire une fonction qui permet de calculer le carré d’un
nombre passé en paramètre. Ecrire la fonction main qui teste
cette fonction.
Sahar TRIGUI 231 2024-2025
Les variables
Variables locales
On appelle variable locale toute variable déclarée à l’intérieur
d’une fonction.
Par défaut, les variables locales sont temporaires. Elles sont
allouées dynamiquement lors de l’exécution.
L’emplacement mémoire d’une variable locale sera libérer a la
fin de l’exécution et la variable sera perdue.
Variables globales
On appelle variable globale toute variable déclarée à l’extérieur
de toutes fonctions.
Toutes les variables globales sont connues au compilateur dans le
programme qui suit sa déclaration et peuvent être utilisées par
toutes les fonctions du programme.
Une variable globale occupe le même espace mémoire, alloué
lors de la compilation, durant toute l’exécution.
Sahar TRIGUI 232 2024-2025
Les variables
Remarques
Si plusieurs variables locales ou globales ont le même nom,
elles ne sont pas confondues. La dernière définition est celle
considérée.
Les variables locales à une fonction ont une durée de vie
limitée à une seule exécution de cette fonction. Leurs valeurs
ne sont pas conservées d’un appel à un autre.
Une variable locale est déclarée statique (static), sa valeur
reste conservée d’un appel à un autre. Elle est initialisée à
zéro lors de la compilation.
Sahar TRIGUI 233 2024-2025
Les variables
Exemples:
int n=0; int n=10; int n=0;
void fonction() void fonction() void fonction()
//définition //définition //définition
{ { {
n++; int n=0; static int n;
printf("n= %d\n",n); n++; n++;
return; printf("n= %d\n",n); printf("n= %d\n",n);
} return; return;
} }
main()
{ main() main()
int i; { {
for(i=0;i<5;i++) int i; int i;
fonction(); //appel for(i=0;i<5;i++) for(i=0;i<5;i++)
} fonction(); //appel fonction(); //appel
} }
Sahar TRIGUI 234 2024-2025
Passage des paramètres d’une
fonction
Passage par valeur
Lors de l’appel d’une fonction, les valeurs des paramètres
effectifs sont copiées et la fonction utilise seulement cette copie.
Si la fonction modifie la valeur de ses paramètres, seulement la
copie sera modifiée et ainsi la valeur des paramètres effectifs est
inchangée.
Dans ce cas, les paramètres de la fonction sont transmis par
valeur.
Sahar TRIGUI 235 2024-2025
Passage des paramètres d’une
fonction
Exemple:
void permuter (int a, int b)
{ int t;
printf(" avant permutation \n a=%d \t b=%d \n ",a,b);
t=a;
a=b;
b=t;
printf(" après permutation \n a=%d \t b=%d \n ",a,b);
}
main()
{ int x=5, y=9;
printf(" avant l’appel de la fonction \n x=%d \t y=%d \n ",x,y);
permuter(x,y);
printf (" après l’appel de la fonction \n x=%d \t y=%d \n ",x,y);
}
Sahar TRIGUI 236 2024-2025
Passage des paramètres d’une
fonction
Passage par adresse
Le passage par adresse permet la modification des valeurs des
paramètres effectifs.
Dans ce cas, il faut utiliser l’adresse des objets comme
paramètres lors de l’appel de la fonction.
Exemple:
void decrementer(int *nombre) main()
{ {
(*nombre)--; int n=10;
printf("nombre= %d\n", *nombre); printf("n= %d\n",n);
} decrementer(&n);
printf("n= %d\n",n);
}
Sahar TRIGUI 237 2024-2025
Passage des paramètres d’une
fonction
Exemple:
void permuter (int *a, int *b)
{ int t;
printf(" avant permutation \n a=%d \t b=%d \n ",*a,*b);
t=*a;
*a=*b;
*b=t;
printf(" après permutation \n a=%d \t b=%d \n ",*a,*b);
}
main()
{ int x=5, y=9;
printf(" avant l’appel de la fonction \n x=%d \t y=%d \n ",x,y);
permuter(&x,&y);
printf (" après l’appel de la fonction \n x=%d \t y=%d \n ",x,y);
}
Sahar TRIGUI 238 2024-2025
Exercice
Ecrire un programme qui permet de saisir 10 nombre réels
stockés dans un tableau T.
Ecrire les fonction qui permet de calculer la somme, le produit
et la moyenne de ces nombres.
Ecrire une fonction qui détermine et affiche les éléments
négatifs et positifs du tableau.
Ecrire une fonction qui permet d’inverser les éléments du
tableau et de le renvoyer.
Sahar TRIGUI 239 2024-2025