Académique Documents
Professionnel Documents
Culture Documents
de Safi
1ère année GIM - INFORMATIQUE
LES FONCTIONS EN C
A.SOULMANI
Introduction
****************************************
Saisir un nombre: 12
return 0;
}
Déclaration d'une fonction simple
#include <stdio.h>
void ligneEtoiles()
{
int nb = 0;
while (nb < 40)
{
printf(‘*’);
nb++;
}
printf(" \n ");
}
int main()
{
double valeurLue;
int nb;
ligneEtoiles();
printf (" Saisir un nombre: ");
scanf("%f",&valeurLue);
printf (" Le carré de ce nombre est: %f \n", valeurLue * valeurLue);
ligneEtoiles();
return 0;
}
Utilisation de paramètres
Fonctions à un paramètre
#include <stdio.h>
ligneCaracteres(‘+’, 50);
Valeur de Retour
#include <stdio.h>
int main()
{
int val1, val2;
int valAbs1, valAbs2;
if (val1 >= 0)
valAbs1 = val1;
else valAbs2 = -val1;
if (val2 >= 0)
valAbs2 = val2;
else valAbs2 = -val2;
int main()
{
int val1, val2;
int valAbs1, valAbs2;
printf (" Saisir deux nombres: ");
scanf("%d %d",&val1, &val1);
valAbs1 = ValeurAbsolue(val1);
valAbs2 = ValeurAbsolue(val2);
printf (" Les valeurs absolues sont: %d ,%d",valAbs1,valAbs2);
return 0;
}
Exercice d’application:
Ecrire une fonction nommée min qui prend en paramètre deux entiers et qui renvoie le plus petit
des deux. Utiliser cette fonction dans un programme qui lit 10 entiers saisis au clavier puis affiche
la valeur minimale saisie.
Solution:
- On lit la première valeur saisie par l’utilisateur et on la considère provisoirement comme valeur minimale
- A chaque nouvelle valeur, on conserve la plus petite parmi l’ancienne valeur minimale et la nouvelle valeur lue
#include <stdio.h>
int main(){
int valeurMin;
int valeurLue;
int nbValeursLues = 1;
printf(" Entrer une valeur entiere : ");
scanf("%d ",&valeurMin);
while (nbValeursLues <= 10)
{
printf(" Entrer une valeur entiere : ");
scanf(" %d ",&valeurLue);
valeurMin = min (valeurMin, valeurLue);
nbValeursLues ++;
}
printf(" Le min vaut : %d ", valeurMin);
return 0;
}
Exemples:
i nom de la variable
var
char var = ‘a’; ‘a’
11 @2000
Portée des variables
#include <stdio.h> /* déclaration des bibliothèques */
i 0 1 2 3
tab[i] 20 5 0 100
&tab[i] 2000 2002 2004 2006
15
Passage de tableau en paramètre
void AfficheTabEntiers(int tab[5]);
int MaxTab(int tab[], int taille) int MinTab(int tab[], int taille)
{ {
int i; int i;
int max = tab[0]; int min = tab[0];
for (i = 1; i < taille; i++) for (i = 1; i < taille; i++)
{ {
if (tab[i] > max) if (tab[i] < min)
max = tab[i]; min = tab[i];
} }
return max; return min;
} }
int main()
{
int myTab[100];
int nbElements = 10;
SaisirTab(myTab, nbElements);
AfficherTab (myTab, nbElements);
printf(" Somme des elements du tableau est : %d", SommeTab(myTab, nbElements));
printf(" Moyenne des elements du tableau est : %f", MoyenneTab(myTab, nbElements));
printf(" Max des elements du tableau est : %d", MaxTab(myTab, nbElements));
printf(" Min des elements du tableau est : %d", MinTab(myTab, nbElements));
return 0;
}
Utilisation de Bibliothèques de fonctions
Prototype de la fonction
Implémentation de la fonction
assert.h ctype.h errno.h float.h limits.h math.h signal.h stdio.h stdlib.h string.h time.h
errno.h Gestion des codes d’erreurs retournés par des fonctions de la bibliothèque.
Exemples
Exemple 1: Auto-appel direct Exemple 2: Auto-appel indirect
int recFonction1(int x)
int recFonction1(int x) {
...
{ recFonction2(n);
... }
recFonction1(n); /* ****************** */
} int recFonction2(int x)
{
...
recFonction1(n);
}
La Récursivité
Déroulement d’un programme faisant appel à une fonction récurrente
int fonct(int n)
{
if (n==1)
return 1;
else n = 1 fonct(1)
return 1 + fonct(n – 1);
}
n = 2 fonct(2)
int main()
{ n = 3 fonct(3)
int n = 3;
printf("%d", fonct(n));
main()
return 0; n = 3
}
PILE
Affichage: 3
La Récursivité
Stratégie pour trouver le résultat d’un programme faisant appel à une fonction
récurrente:
fonct(3) ≡ 3
int fonct(int n)
{
if (n==1)
return 1 + fonct(2) ≡ return 3
return 1;
else
return 1 + fonct(n – 1); return 1 + fonct(1) ≡ return 2
}
int fonct(int n)
{
if (n==0) a. 4
return 1; b. 7
else c. 15
return 7 + fonct(n – 2); d. 12
}
int main()
{
printf("%d", fonct(4));
return 0;
}
La Récursivité
Exercice 2
Combien de fois la fonction get() sera appelée dans ce programme?
void get(int n)
{
if (n < 1) return; a. 15
get(n – 1); b. 25
get (n – 3); c. 35
printf("%d", n); d. 45
}
int main()
{
printf("%d", get(6));
return 0;
}
La Récursivité
Exercice 2
Combien de fois la fonction get() sera appelée dans ce programme?
int main()
{ get(2) get(0)
printf("%d", get(6));
return 0; get(1) get(-1)
}
get(0) get(-2)
Application
Ecrire une fonction récursive factorielle() int factorielle(int n)
qui calcule la factorielle d’un entier. {
if (n == 0) return 1;
else return (n * factorielle(n – 1));
▪ Relation de récurrence: n! = n * (n-1)! }
▪ Condition de sortie: 0! = 1
int main()
{ int n = 5;
printf("%d", factorielle(n));
return 0;
}
La Récursivité
Avantages et inconvénients
•Un appel de fonction prend plus de temps qu'une simple itération de boucle.
•Un appel de fonction peut utiliser une plus grande quantité de mémoire.
La Récursivité
Avantages et inconvénients
Les fonctions en algorithmique
Fonctions en C
int Factorielle(int );
❑ Fonctions avec type de retour float MoyenneTab(int [],int);
char Menu();
…
En Algorithmique
❑ Fonctions
❑ Procédures
33
Les Procédures en algorithmique
Procédure Nom_Procédure (Nom_Paramètre : Type_praramètre;……) ;
Déclaration
Nom_variable : Type_variable ;
…
Début
…
Instructions ;
…
Fin ;
Algorithme essai;
Variable I, S : entier;
Procédure Somme ;
Debut /*Début de la Procédure*/
S := 0 ;
Pour I := 1 à 100
Faire S := S + I
FinPour ;
Ecrire ('La somme des 100 premiers nombres est', S) ;
Fin /*Fin de la Procédure*/
Algorithme essai;
Variable I, S : entier;
36