Vous êtes sur la page 1sur 25

Les fonctions

C++ ne permet que des fonctions (pas


de procédures).

Une procédure peut être écrite en


utilisant une fonction ne renvoyant
pas de valeur.

1
Définition des fonctions

type identificateur(paramètres)
{
... // Instructions de la fonction.
}

 type est le type de la valeur renvoyée,


 identificateur est le nom de la fonction,
 Paramètres est une liste de paramètres.

2
Syntaxe de la liste des paramètres

type variable [= valeur] [, type variable [= valeur] [...]]

 type est le type du paramètre (variable) qui le suit


 valeur est sa valeur par défaut.

La valeur par défaut d’un paramètre est la valeur que ce


paramètre prend lors de l’appel de la fonction si aucune
autre valeur n’est fournie.

Note: L’initialisation des paramètres de fonctions n’est


possible qu’en C++.

3
La valeur renvoyée par la fonction est spécifiée en utilisant la
commande return, dont la syntaxe est :
return valeur ;

Exemple: Définition de fonction somme


int somme (int i, int j)
{
return i+j;
}

 Si une fonction ne renvoie pas de valeur, on lui donnera le type


void.
 Si elle ne prend pas de paramètres, sa liste de paramètres sera
void ou n’existe pas.
 Il n’est pas nécessaire de mettre une instruction return à la fin
d’une fonction qui ne renvoie pas de valeur.
4
Appel des fonctions

 L’appel d’une fonction se fait en donnant son


nom, puis les valeurs de ses paramètres entre
parenthèses.
Attention ! Même s’il n’y a pas de paramètres, il
faut mettre les parenthèses, sinon la fonction
n’est pas appelée.

Exemple:
int i=somme(2,3); // appel de la fonction somme
5
 Si la déclaration comprend des valeurs par
défaut, ces valeurs sont utilisées lorsque ces
paramètres ne sont pas fournis lors de
l’appel.

 Si un paramètre est manquant, alors tous les


paramètres qui le suivent doivent aussi
l’être.

 Il en résulte que seuls les derniers


paramètres d’une fonction peuvent avoir
des valeurs par défaut.
6
Exemple :
int test (int i = 0, int j = 2)
{
return i/j ;
}

 L’appel de la fonction test(8) est valide. Comme on ne


précise pas le dernier paramètre, j est initialisé à 2. Le résultat est
donc 4.

 De même, l’appel test() est valide : dans ce cas i =0 et j =2.

 En revanche, il est impossible d’appeler la fonction test en


ne précisant que la valeur de j.

 Enfin, l’expression int test(int i=0, int j) {...} serait invalide,


car si on ne passait pas deux paramètres, j ne serait pas initialisé.7
Déclaration des fonctions (prototypage)

Le rôle des déclarations est de signaler l’existence des


fonctions au compilateur afin de les utiliser, tout en
reportant leurs définitions plus loin ou dans un autre
fichier.
 Toute fonction doit être déclarée avant d’être appelée
pour la première fois. La définition d’une fonction fait
office de déclaration.
 Il existe des cas où une fonction doit être appelée dans
une autre fonction définie avant elle. Comme cette
fonction n’est pas définie au moment de l’appel, elle
doit être déclarée.
 il est courant d’avoir à appeler une fonction définie
dans un autre fichier que celui d’où se fait l’appel. 8
Syntaxe:
type identificateur(paramètres) ;

Exemple:
int Min(int, int) ; //Déclaration de la fonction minimum définie plus loin

int main(void) //Fonction principale


{
int i = Min(2,3); //Appel de la fonction Min, déjà déclarée.
return 0;
}

int Min(int i, int j) /* Définition de la fonction min. */


{
if (i<j) return i;
else return j;
}

9
Fonctions inline

Ce sont des fonctions dont le code est incorporé


par le compilateur dans le module objet
correspondant à chaque appel.
Exemple:
inline double cube(double x)
{return x*x*x;}

NOTE: Une fonction inline est définie en même


temps qu’elle est déclarée.
10
Variables locales
 Les variables locales sont celles déclarées
à l’intérieur de la fonction.
Elles sont différentes des variables de
mêmes noms qui pourraient exister dans
une autre partie du programme.
 Les variables déclarées en dehors de toute
fonction sont des variables globales.
Les variables locales perdent leurs valeurs
une fois la fonction terminée.
11
Exemple: (A essayer en TP)

#include<iostream>
Using namespace std;
int x=1,y= 2; // variables globales
void var_local(void); // prototype de la fonction
/************************/
main()
{
cout<<"avant d'appeler la fonction var_local, x="<<x <<"et y ="<<y<<"\n";
var_local();
cout<<"après l'appel de la fonction var_local,x="<<x <<"et y ="<<y<<"\n";
return 0;
}
/*******************************/
void var_local(void) // définition de la fonction
{int x=88, y=99; // variables locales
cout<<"dans la fonction var_local, x="<<x <<« et y = "<<y<<"\n";
}
12
Variables statiques
Une variable statique, et généralement initialisée, maintient sa valeur entre
les appels des fonctions.
Exemple: (A essayer en TP)

include<iostream>
Using namespace std;
double mean (double x)
{static double N=0;
static double S=0;
N++;
S+=x;
return S/N;}
/*******************************/
main()
{cout<<"mean(1)= " <<mean(1)<<"\n";
cout<<"mean(2)= " <<mean(2)<<"\n";
cout<<"mean(4)= " <<mean(4)<<"\n";
cout<<"mean(10)= " <<mean(10)<<"\n";
cout<<"mean(11)= " <<mean(11)<<"\n";
return 0;
13
}
Surcharge des fonctions
(function overloading)

 Caractéristique unique du C++


 Plusieurs fonctions ayant le même nom mais
différents types de paramètres peuvent être
déclarées.
 La liste de ces types s’appelle la signature de
la fonction.

14
Exemple1:
#include <iostream>
Using namespace std;

void inc(int& i) /*********PREMIERE DEFINITION********/


{
i+=1;
}

void inc(float& x) /*********DEUXIEME DEFINITION********/


{
x+=1;
}

void inc(char& c) /*********TROISIEME DEFINITION********/


{
c+=1;
} 15
main() /*************FONCTION PRINCIPALE******/
{
char c='A';
int i=10;
float x=10.2;
cout<<"c="<<c<<"\n"<<"i="<<i<<"\n"<<"x="<<x<<"\n";
inc(c);
inc(i);
inc(x);
cout<<"valeurs des variables après exécution:\n "
<<"c="<<c<<"\n"<<"i="<<i<<"\n"<<"x="<<x;
return 0;
}

16
Exemple2:
#include <iostream>
Using namespace std;

// Surcharge de la fonction abs de 2 façons


int abs (int n);
double abs (double n);

int main( ) {
cout<< "valeur absolue de -10: "<< abs(-10)<< "\n";
cout<<"valeur absolue de -10.01:"<<abs(-10.01)<<"\n";
return 0;
}
// abs( )pour entiers
int abs (int n) {
cout << "Pour les entiers abs( )\n";
return n<0 ? -n : n;
}
// abs( ) pour réels double précision
double abs (double n) {
cout << "pour les réels double précision abs( )\n";
return n<0 ? -n : n;
} 17
La fonction main

 Lorsqu’un programme est chargé, son


exécution commence par l’appel d’une
fonction spéciale.
 Cette fonction doit impérativement s’appeler
"main" (principal en anglais) pour que le
compilateur puisse savoir que c’est cette
fonction qui marque le début du programme.
 La valeur 0 retournée par la fonction main
indique que tout s’est déroulé correctement.

18
Les fonctions d’entrée-sortie de base

 printf ("print formatted" en anglais): permet


d’afficher des données à l’écran.
 scanf "scan formatted ": permet de les lire
à partir du clavier.
 Elles attendent toutes les deux une chaîne de
caractères au premier paramètre.
 Elles sont définies dans le fichier <cstdio.h>

19
La fonction printf

Syntaxe:
printf(chaîne de format [, valeur [, valeur [...]]])

La chaîne de format peut contenir du texte, mais


surtout elle doit contenir autant de formateurs
que de variables à afficher.
Les formateurs sont placés dans le texte là où les
valeurs des variables doivent être affichées.

20
La syntaxe des formateurs est la suivante :

%[[indicateur]...][largeur][.précision][taille] type

 Un formateur commence donc toujours par le


caractère %.

 Pour afficher ce caractère (%) sans faire un


formateur, il faut le dédoubler (%%).

21
Le type de la variable à afficher est aussi obligatoire.
Type de données à afficher Caractère de formatage

Entier décimal signé d


Entier décimal non signé u ou i
Entier octal non signé o
Entier hexadécimal non signé x (avec les caractères ’a’ à ’f’)
ou X
(avec les caractères ’A’ à ’F’)
Flottants f, e, g, E ou G
Caractère c
Chaîne de caractères s
Pointeur p

22
La fonction scanf

Syntaxe:

scanf(chaîne de format, &variable [, &variable [...]]) ;

& indique une référence

23
Exemple: (A tester en TP)
#include <cstdio>
int main ()
{
char str [80];
int i;
printf ("Entrez votre nom de famille: ");
scanf ("%s",str);
printf ("Entrez votre âge: ");
scanf ("%d",&i);
printf ("Mr./Mme %s a %d ans.\n",str,i);
printf ("Votre âge en hexadécimal est %#x (%d).\n",i,i);
return 0; ?
}
24
Exemple

#include <cstdio> // Autorise l’emploi de printf et de scanf.


long double x, y;
int main(void)
{
printf("Calcul de moyenne\n"); /* Affiche le titre. */
printf("Entrez le premier nombre : ");
scanf("%Lf", &x); /* permet de saisir le premier nombre. */
printf("\nEntrez le deuxième nombre : ");
scanf("%Lf", &y); /* saisie du deuxième nombre. */
printf("\nLa valeur moyenne de %Lf et de %Lf est %Lf.\n",
x, y, (x+y)/2);
return 0;
}
25

Vous aimerez peut-être aussi