Académique Documents
Professionnel Documents
Culture Documents
Fonctions
David Pointcheval
Plan
1 2 3 4
Programmation C - ENSTA - 2
Un programme
Programme (un module) =
inclusions (infos externes) types (nouveaux types dobjets) variables ( cases mmoires rserver) liste de fonctions
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 3
Blocs rptition
Au cours du programme, certaines parties interviennent plusieurs fois (affichage, calcul, etc ) Autant les crire une fois pour toutes ! dcouper le programme en petits blocs : fonctions
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 4
Les fonctions
Fonctions en-tte (vue de l extrieur) mode opratoire
Avantages
Dcouper un programme en petits morceaux indpendants aide crire un programme correct aide au dboguage (fonction par fonction) Pouvoir appeler chaque bloc plusieurs fois avec des arguments diffrents
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 6
Prototype de fonction
Le prototype dune fonction (ou en-tte) prcise la vue de lextrieur de la fonction :
le nom de la fonction les types des arguments pris en entre le type de retour
Prototypes (suite)
Exemple de prototype de fonction : double puissance(double a, int e)
Nom de la fonction Type du rsultat Premier argument type nom local
David Pointcheval LIENS - CNRS
Deuxime argument
Programmation C - ENSTA - 8
Utilisation
Pour le prototype suivant
double puissance(double a, int e)
on utilisera la fonction puissance : o x est un double, et n un int tous deux dclars et initialiss, le rsultat ira dans la variable y, de type double, dclare : affectation (ou initialisation)
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 9
y = puissance(x,n)
y = puissance(x,n)
Exemple I
La fonction puissance peut tre programme de la faon suivante :
double puissance(double a, int e) { int i; double b = 1; for (i=0; i<e; i++) b = b*a; return b; }
La fonction puissance retourne une valeur de type double il faut la stocker dans une variable de type double
double y; y = puissance(x,n);
Programmation C - ENSTA - 11
Exemple I - analyse
lappel de la fonction puissance le double 3.01 double y; est stock dans a y = puissance(3.01, 5); et lint 5 est stock dans e Le rsultat, double puissance(double a, int e) la fin de la fonction { int i; (la valeur de b) double b = 1; est stock dans y
for (i=0; i<e; i++) b = b*a; return b; }
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 13
Exemple II
Laffichage dun tableau peut tre programm de la faon suivante :
void affiche(int tab[], int n) { int i; for (i=0; i<n; i++) printf(%d ,tab[i]); printf(\n); }
Exemple II - analyse
lappel de la fonction affiche le tableau T (pointeur) int T[5] = {2, 5, 3, 9, 1}; est stock dans tab affiche(T, 5); et lint 5 void affiche(int tab[], int n) est stock dans n { int i; la fin de la fonction for (i=0; i<n; i++) (aprs les affichages), printf(%d ,tab[i]); printf(\n); on revient au main } aprs lappel la fonction, sans rien retourner
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 16
affectation y =
David Pointcheval LIENS - CNRS
Exemple III
/* incrementation.c */ #include <stdlib.h> #include <stdio.h>
int incrementation(int x) { int main(int argc, char *argv[]) x = x+1; { return x; int a,b; } a = atoi(argv[1]); b = incrementation(a); print(b = %d, a = %d\n,b,a); return 0; }
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 19
a 10 Appel de incrementation(a) x variable locale la fonction a pas modifie x a (soit x 10) x x+1 (soit x 11) int incrementation(int x) return x (soit 11) { b 11
x = x+1; return x; }
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 20
plus une fonction est courte, plus elle a de chances dtre correcte dcouper le programme en petites fonctions de moins de 20 lignes (une fentre)
Programmation C - ENSTA - 22
Utilisation de fonctions
Fichiers de headers (*.h) premier argument, un double second argument, un entier retourne le premier puissance le second Len-tte suffit dcrire une fonction cf. man
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 23
Exemple : atoi
Programmation C - ENSTA - 24