You are on page 1of 24

Ecole Nationale Polytechnique

Appel
Chapitre 2:
Main()

fonction()
Les fonctions
en C
Retour
Cours labor par: Fenineche Khadidja

Anne universitaire 2015-2016 mis jour 2017


1
Plan du chapitre

1- Notion de sous-programme
2- Exemple de fonction
3-Variables locales et variables globales
4- Dclaration et appel dune fonction en C
5- Dclaration et appel de procdure en C
6- Passage par valeur et passage par adresse
7- Exemples dutilisation de fonctions et de
procdures enC

Fenineche Khadidja 2
Objectifs du chapitre

A lissue de ce chapitre, vous serez capables de:


Dclarer et crire une fonction en C.
Appeler une fonction et lui passer les
paramtres ncessaires.
Distinguer entre variables globales et variables
locales.
Distinguer entre un appel par valeur et un
appel par adresse

Fenineche Khadidja 3
Notion de sous-programme

Un sous programme est un programme appel par


un autre et qui permet:
Une meilleure lisibilit dun programme.
Une diminution de nombre dinstructions
rptitives dans ce dernier en les remplaant par
une seule ligne (appel dun sous-programme).
Distinction entre la solution au problme majeur
rsoudre et les outils dont il a besoin (Tri dun
tableau (problme principal) peut faire appel un
sous programme de permutation de valeurs (outil
de permutation).

Fenineche Khadidja 4
Les fonctions en langage C

Les fonctions sont des sous-programmes dclars


part ou dans le programme qui les appelle.
On distingue entre:
les fonctions de la bibliothque standard qui sont
dj crites et offertes par le langage: sqrt(), strcmp,
pow(),, et
Les fonctions crites par lutilisateur lui-mme.
Lappel de ces deux types de fonctions et presque
le mme, cest la partie dclaration qui est
ncessaire dans les fonctions utilisateurs.

Fenineche Khadidja 5
4- Dclaration et appel des fonctions en langage C

Une fonction en C:
possde un nom et
est compose dun bloc dinstructions,
de paramtres (arguments) et
dune valeur retourner au
programme appelant .

Fenineche Khadidja 6
4- Dclaration et appel des fonctions en langage C

Type_retour nom_fonction(type1 argument1, type2


argument2, )
{
dclarations de variables locales /* quand cest utile*/
Bloc dintructions
Return valeur_de_retour /* a- La valeur de retour peut
tre soit une variable soit une expression. B- Pas de valeur
de retour pour les procdures*/
}
/*Le type_retour peut tre void: cas des procdures*/
/* Les arguments peuvent tre absents (void)*/

Fenineche Khadidja 7
Exemple de fonction C
Exemple dutilisation dune fonction: somme de deux entiers
#include <stdio.h> a,b,c sont appeles :
int somme(int x,int y) variables globales
{ accessibles partout dans
int z; le main().
z=x+y;
Dclaration de return z; z est une variable
la fonction } locale la fonction
somme. Manipule
int main() seulement lintrieur
{ de la fonction et elle sert
int a,b,c; comme valeur de retour.
puts("Introduisez deux entiers");
Appel de la scanf("%d%d",&a,&b); x,y sont appels :
fonction en lui c=somme(a,b); paramtres ou
livrant les arguments de la
valeurs printf("La somme est:%d",c); fonction . (Ils servent
calculer return 0; communiquer avec le
} programme appelant)
Fenineche Khadidja 8
3-Variables locales et variables globales

Les variables globales ont une porte globale dans un


programme. Tous les blocs ou les fonctions dclars suite
leur dclaration peuvent les utiliser et les modifier. Sauf si la
variable globale est passe par valeur, dans ce cas une
fonction ne peut la modifier.
Les variables locales sont dclares localement au niveau
dune fonction ou dun bloc, elles ne sont reconnues ou
modifies que localement.
Un nom dune variable locale peut tre utilis dans une autre
fonction ou un autre bloc mais les deux variables seront
diffrentes.

Fenineche Khadidja 9
Dclaration dune fonction en C

La fonction doit tre dclare avant dtre


appele:

a- soit toute entire avant le main() ou

b- travers son prototype avant la main() (le


corps de la fonction peut tre place aprs
lappel dans ce cas).

Le prototype dune fonction est: son type suivi


de son nom et de ses arguments.
Fenineche Khadidja 10
Dclaration dune fonction en C
#include <stdio.h> #include <stdio.h>
int somme(int x,int y); Cas b: Dclaration du
int somme(int x,int y) Cas a: int main() prototype avant le
{ Dclaration { main() et la fonction
int z; avant le main int a,b,c; aprs le main()
z=x+y; puts("Introduisez deux entiers");
return z; scanf("%d%d",&a,&b);
} c=somme(a,b); /* Appel */
int main() printf("La somme est:%d",c);
{ return 0;
int a,b,c; }
puts("Introduisez deux entiers"); int somme(int x,int y)
scanf("%d%d",&a,&b); {
int z;
c=somme(a,b); z=x+y;
printf("La somme est:%d",c); return z;
return 0; }
}

Fenineche Khadidja 11
5- Dclaration et appel dune procdure en C

Une procdure diffrents langages est un cas


particulier de fonctions (ne faisant pas partie
des concepts du langage C) qui:
na pas de type (void) et
qui ne retourne pas de valeur au
programme appelant, elle excute un bloc
dinstructions lappel.
Exemple: Affichage dun message, du contenu
dune variable, calcul dune expression sans
retourner sa valeur
Fenineche Khadidja 12
5- Dclaration et appel dune procdure en C
A/ Dclaration se fait comme les fonctions part
quelle est de type void
Void nom_fonction(type 1 arg1, type2,arg2,)
{
Bloc dinstructions;
[return;] /* facultatif*/
}

B/ Lappel se fait par le nom de la fonction et ses


paramtres.
Nom_fonction(param1,param2,);

Fenineche Khadidja 13
5- Dclaration et appel dune procdure en C
Exemple1: afficher le carr dun entier saisi dans le main() laide
dune procdure quon nomme affiche_carre.
#include <stdio.h>
void affiche_carre(int x)
{
int y;
y=x*x;
printf("La valeur introduite est: %d",y);
}
int main()
{
int a;
puts("Introduisez une entier");
scanf("%d",&a);
affiche_carre(a); /* a est pass comme
paramtre*/
return 0;
}
Fenineche Khadidja 14
5- Dclaration et appel dune procdure en C
Exemple 2: Saisir une #include <stdio.h>
int lire(void) /* cest une fonction */
variable laide dune {
fonction nomme lire et int x;
lafficher laide dune puts("Introduisez une entier");
scanf("%d",&x);
procdure quon return x; /* Elle retourne la valeur lue*/
nomme affiche. }
(Une fonction sans void affiche(int x) ) /* cest une procdure */
{
arguments et une printf("La valeur introduite est: %d",x);
procdure) return; /* Elle ne retourne rien*/
Remarques: }
/* programme principal*/
On ne peut utiliser la int main()
fonction lire avec un {
argument pass par int a;
a=lire(); /*appel de la fonction lire */
valeur car le scanf affiche(a); /* appel de la procdure affiche */
modifie la valeur de la return 0;
variable. } Fenineche Khadidja 15
6- Passage par valeur et passage par adresse

Le passage qui est vu dans ce chapitre est par valeur,


cest--dire que:
Les valeurs des variables sont recopies dans les
paramtres de la fonction et utilises sans tre
modifies pour effectuer des calculs ou des
affichages...
Par contre: si ont veut faire la permutation des valeurs
de deux variables quon passe par valeur, ceci ne peut
seffectuer en C. A cet effet, il faut utiliser un passage
par adresse laide de pointeurs (chapitre 4). Sauf
pour les tableaux car ils sont eux-mmes des adresses.

Fenineche Khadidja 16
6- Passage par valeur et passage par adresse
#include <stdio.h>
Le passage par void affiche(int x[], int taille)
adresse (cas des { int i;
for(i=0;i<taille;i++) printf("%d ",x[i]);
tableaux): Affichage printf("\n"); }
et tri dun tableau void trier(int x[], int taille)
laide de fonctions { int i,j,c;
for (i=0;i<taille-1;i++)
(affiche et trier) { for (j=i+1;j<taille;j++)
Remarque: un {
tableau t est lui- if (x[j]<x[i]) { c=x[i];x[i]=x[j];x[j]=c;}
}
mme une adresse }
donc la modification }
est possible pour le int main ()
{ int t[]={20,1,12,3,24};
tri. affiche(t,5);
trier(t,5);
affiche(t,5);
return 0;}
Fenineche Khadidja 17
7-Exemples dutilisation de fonctions et de procdures en C
#include <stdio.h>
Exemple 1: Afficher main()
un carr dtoiles {
(mme nombre int i,A;
void ligne(int X);
dtoiles pour printf("Donnez le nombre d'toiles afficher
chaque ct) par cote: ");
scanf("%d",&A);
On utilise dans ce for (i=1;i<=A;i++) {ligne(A);printf("\n");}
cas une procdure return 0;
qui ne retourne pas }
de valeur ******* void ligne(int X)
*******
{
*******
int i;
*******
for (i=1;i<=X;i++) putchar('*');
*******
}
*******
*******
Fenineche Khadidja 18
Exemples dutilisation de fonctions et de procdures enC
#include <stdio.h>
Exemple2: Afficher main()
un carr. Le symbole {
int i,A; char c;
est donn par void carre(int X,char s);
lutilisateur. printf("Choisir un symbole parmi: *,+,0,X: ");
c=getchar();
printf("\n");
La procdure a deux printf("Donnez le nombre de symboles afficher par
arguments en cote: ");
entre: le caractre scanf("%d",&A);
carre(A,c);
afficher et le return 0;
nombre de lignes }
afficher. void carre(int X,char s)
{
int i,j;
for (i=1;i<=X;i++) {
for (j=1;j<=X;j++) putchar(s);
printf("\n"); }
Fenineche Khadidja 19
}
Exemples dutilisation de fonctions et de procdures en C
#include <stdio.h>
Exemple3: Calculer
main()
lexpression pour un
{
x rel
double X;
double f(double x) ; /*prototype*/
f(x)=x2+(x/5)
printf("Donner un reel X: ");
scanf("%lf",&X);
Remarque sur le
printf(" le resultat de la fonction
programme: On
x2+(x/5) est: %.2lf \n",f(X));
peut galement
return 0;
dclarer une
}
variable y qui reoit
double f(double x)
f(X) avant le printf
{
return x*x+(x/5);
}
Fenineche Khadidja 20
Appel de fonctions partir dun autre fichier
#include "apel_extern.c"
#include <stdio.h>
double f(double x)
main()
{
{
return x*x+(x/5);
double X;
}
// double f(double x);
printf("Donner un reel X: ");
double f2(double x)
scanf("%lf",&X);
{
printf(" le resultat de la fonction x
return x*x*x;
puissance 3 est: %.2lf \n",f2(X));
}
printf(" le resultat de la fonction
Fichier apel_extern.c x2+(x/5) est: %.2lf \n",f(X));
return 0;
}
Fenineche Khadidja 21
Manipulation des variables globales dans une fonction
#include <stdio.h> // Exemple 1
int v; // v est ici globale dclare avant le main() pour
// quelle soit reconnue dans la fonction
void calcul()
{
v=v*v-3; // v est utilise sans tre dclare
}
int main()
{puts("saisir une valeur entire");
scanf("%d",&v);
calcul();
printf("la valeur de v devient:%d",v);
// la valeur de v va tre modifie car elle est globale
return 0;
}
Fenineche Khadidja 22
Manipulation des variables globales dans une fonction

Exemple 2: Utilisation dun appel dune fonction externe


qui utilise la variable globale
double f(double x)
{
#include <stdio.h> double u=x*v;
int v; return u;
}
#include "apel_extern.c" // fichier externe ou on utilise v qui est globale
int main()
{int w;
puts("saisir deux valeurs entieres");
scanf("%d%d",&v,&w);
printf("le calcul donne:%lf",f(w)); // Appel de f
return 0;
}
Fenineche Khadidja 23
Ressources bibliographiques

Claude DELANNOY, Langage C, Edition


Eyrolles, 2002
Rmy Malgouyres, Rita Zrour, Fabien Feschet,
Initiation lalgorithmique et la
programmation en C , Edition Dunod, 2014
El Sakaan Nadim, Programmation en langage
C , ditions pages bleues.

You might also like