Vous êtes sur la page 1sur 2

S1-SNIR

LANGAGE C
Cours C10
Informatique pour les Réseaux et Systèmes Techniques

1 Introduction
Nous avons jusqu'à maintenant réalisé des programmes ou tout était contenu dans la fonction main.
Cela fonctionne assez bien avec de petits programmes, mais dès que nous aurons plusieurs tâches à
réaliser les choses vont se compliquer. Ainsi, pour faciliter la mise en place du programme et éviter les
erreurs, il est préférable de scinder le programmes en plusieurs petites applications appelées fonctions.
Nous appellerons ces fonctions quand nous aurons besoin d'elles.

2 Qu'est ce qu'une fonction ?


Chaque fonction que nous allons créer aura une entrée et une sortie.
Exemple :
Fonction
Entrée "carré" Sortie

On entre 2, il ressort 4 ! On appelle argument les éléments en entrée et en sortie de la fonction. Les
arguments sont des variables locales à la fonction. Les valeurs fournies à l'appel de la fonction
(arguments réels) y sont recopiés à l'entrée dans la fonction. Les instructions de la fonction s'exécutent
du début du bloc { jusqu'à return(valeur) ou la sortie du bloc }. La valeur retournée par la fonction
est indiquée en argument de return.

3 Exemples :
1) fonction ne recevant aucun argument, et ne retournant rien. Ce n'est pas parce qu'elle ne retourne
rien qu'elle ne fait rien, ici elle affiche un message à l'écran. Elle ne reçoit aucun argument, ici parce
qu'elle n'en a pas besoin, quelquefois c'est parce qu'elle n'utilise que des variables globales. Il est à
noter que cette fonction n'a pas de return : normal, elle ne renvoie rien !

void message(void)
{
int i;
for(i=0;i<10;i++)printf("Hej Världen!\n");
}
Une fonction possède ses propres variables locales (ici i), mais n'a pas accès aux variables locales des
autres fonctions, pas même celles de main (mais aux variables globales, que je déconseille fortement).

On appelle cette fonction dans une autre par exemple à partir du main :
int main()
{
message();
return 0;
}
Cela produira l'affichage de 10 Hej Världen!

2) fonction recevant un (ou plusieurs) argument(s), et ne retournant rien. Une telle fonction a besoin
d'informations pour effectuer sa tâche, ce qui est le cas le plus courant.
On utilisera les opérateurs unaires : & (adresse de) et * (contenu de).
void insiste(int combien_de_fois, char *compliment)
{
int i;
printf("Oh que c'est ");
for(i=0;i<combien_de_fois;i++)printf("%s ",compliment);
printf("les fonctions !!!!! \n);
}

Les fonctions 1/2


S1-SNIR
LANGAGE C
Cours C10
Informatique pour les Réseaux et Systèmes Techniques

On appelle cette fonction par exemple :


int main()
{
insiste(10,"drole");
return 0;
}
Ou
int main()
{
int nombre=3;
char chaine[]="fatiguant";
insiste(nombre*2,chaine);
return 0;
}
Ou encore :
int main()
{
char adjectif [100];
scanf ("%s", adjectif);
insiste(10,adjectif);
return 0;
}

Tout ce qui importe à l'appel est qu'on donne en premier argument une valeur entière et en second une
chaîne de caractères. Leurs noms n'ont aucun rapport avec ceux utilisés dans la fonction.

3) fonction recevant un (ou plusieurs, ou aucun) argument(s), et retournant une valeur. Une telle
fonction a besoin (ou non) d'informations pour effectuer sa tâche, mais quand la tâche est terminée (en
général c'était un calcul), elle rend (retourne) le résultat (une et une seule valeur). Je vous rappelle que
les variables locales de la fonction ne sont visibles qu'à l'intérieur de la fonction, sans cela les calculs
auraient été inutiles.

float aire(float Longueur, float Largeur)


{
float Surface;
Surface=Longueur*Largeur;
return(Surface);
}
On appelle cette fonction dans une expression nécessitant un float :
int main()
{ float x;
x=aire(2,4.5);
return 0;
}
Ou encore :
int main()
{
float z=0.9, x;
printf("la surface du couloir de 10m de long pour une largeur de %f est
%f\n",z, aire(z,10));
//La fonction peut aussi s'appeler elle meme
scanf("%f", x);
float airebizarre = aire(sin(x)+aire(1.12,X), aire(2,2))
return 0;
}

4) que fait-on pour retourner plusieurs valeurs ? C'est impossible directement. Nous verrons plus tard !

Les fonctions 2/2

Vous aimerez peut-être aussi