Chapitre 7
2011/2012
Les fonctions
La programmation modulaire
2011/2012
2
fonctions
Fonctions
2011/2012
3
type nom_fonction (type1 arg1,…, typeN argN)
{
instructions constituant le corps de la fonction return (expression)
}
return.
Fonctions : exemples
2011/2012
4
Appel d’une fonction
2011/2012
5
{ double z;
int A[5] = {1, 2, 3, 4, 5};
z=Som(2.5, 7.3);
AfficheTab(A,5);
}
Déclaration des fonctions
2011/2012
6
type nom_fonction (type1,…, typeN)
Déclaration des fonctions : exemple
2011/2012
7
#include<stdio.h>
float ValeurAbsolue(float); //prototype de la fonction ValeurAbsolue
main( )
{ float x=-5.7,y;
y= ValeurAbsolue(x);
printf("La valeur absolue de %f est : %f \n " , x,y);
}
//Définition de la fonction ValeurAbsolue
float ValeurAbsolue(float a)
{
if (a<0) a=-a; return a;
}
Variables locales et globales
2011/2012
8
Variables locales et globales : remarques
2011/2012
9
Variables locales et globales : exemple
2011/2012
10
#include<stdio.h> int x = 7;
int f(int); int g(int); main( )
{ printf("x = %d\t", x);
{ int x = 6; printf("x = %d\t", x); }
printf("f(%d) = %d\t", x, f(x));
printf("g(%d) = %d\t", x, g(x));
}
int f(int a) { int x = 9; return (a + x); }
int g(int a) { return (a * x); } Qu’affiche ce programme?
x=7
x=6 f(7)=16
g(7) = 49
Variables locales et globales : exemple
2011/2012
11
#include<stdio.h> void f(void);
int i; main( )
{ int k = 5; i=3; f(); f();
printf("i = %d et k=%d \n", i,k); } void f(void) { int k = 1;
printf("i = %d et k=%d \n", i,k); i++;k++;}
Qu’affiche ce programme?
i=3 et k=1 i=4 et k=1 i=5 et k=5
2011/2012
argc (argument count)
argv (argument vector).
2011/2012
2011/2012
2011/2012
2011/2012
test 2 8
argv[0]=" test", argv[1]= "2" et argv[2] ="8".
2011/2012
Paramètres d'une fonction
2011/2012
18
Transmission des paramètres en C
2011/2012
19
{ x=x+1;
*y =*y+1; } main( )
{ int n = 3, m=3; Increment (n, &m);
printf(“n = %d et m=%d \n", n,m); }
Résultat :
n=3 et m= 4
Exemples
2011/2012
20
Une fonction qui échange le contenu de deux variables : void Echange (float *x, float *y)
{ float z;
z = *x;
*x = *y;
*y = z;
}
main()
{ float a=2,b=5; Echange(&a,&b); printf("a=%f,b=%f\n ",a,b);
}
Récursivité
2011/2012
21
int fact (int n )
{ if (n==0)
/*cas trivial*/
return (1);
else
return (n* fact(n-1) );
}
Remarque : l’ordre de calcul est l’ordre inverse de l’appel de la fonction
Fonctions récursives : exercice
2011/2012
22
de la suite de Fibonacci définie par :
U(0)=U(1)=1 U(n)=U(n-1)+U(n-2)
int Fib (int n)
{
if (n==0 || n==1)
return (1);
else
return ( Fib(n-1)+Fib(n-2));
}
Fonctions récursives : exercice (suite)
2011/2012
23
int Fib (int n)
{ int i, AvantDernier, Dernier, Nouveau; if (n==0 || n==1) return (1); AvantDernier=1; Dernier =1;
for (i=2; i<=n; i++)
{ Nouveau= Dernier+ AvantDernier; AvantDernier = Dernier;
Dernier = Nouveau;
}
return (Nouveau);
}
Remarque: la solution récursive est plus facile à écrire
Chapitre 8
2011/2012
Les Chaînes de caractères
Chaînes de caractères
2011/2012
25
Déclaration
2011/2012
26
Exemple : char NOM [15];
Initialisation
2011/2012
27
Traitement des chaînes de caractères
2011/2012
28
Fonctions de la bibliothèque <stdio.h>
2011/2012
29
Exemple : char ch[ ]= " Bonsoir " ;
printf(" %s ", ch);
<Chaîne> et provoque un retour à la ligne.
Exemple : char *ch= " Bonsoir " ;
puts(ch); /*équivalente à printf("%s\n ", ch);*/
Fonctions de la bibliothèque <stdio.h>
2011/2012
30
Exemple : char Nom[15];
printf("entrez votre nom");
scanf(" %s ", Nom);
Remarque : le nom d'une chaîne de caractères est le représentant de l'adresse du premier caractère de la chaîne, il ne doit pas être précédé de &
Exemple : char phrase[100];
printf("entrez une phrase"); gets(phrase);
Fonctions de la bibliothèque <string.h>
2011/2012
31
printf(“%d”,strlen(s)); //affiche 4
Exemple : char ch1[20]=" Bonne ", *ch2=" chance ";
strcat(ch1, ch2) ;
printf(" %s", ch1); // affiche Bonne chance
Fonctions de la bibliothèque <string.h>
2011/2012
32
Exemple : char ch[10];
strcpy(ch, " Bonjour ");
puts(ch); // affiche Bonjour
Fonctions de la bibliothèque <stdlib.h>
2011/2012
33
<stdlib> contient des fonctions pour la conversion de nombres en chaînes de caractères et vice-versa.
(si aucun caractère n’est valide, ces fonctions retournent 0) Exemple : int x, float y;
char *s= " 123 ", ch[]= " 4.56 "; x=atoi(s); y=atof(ch); // x=123 et y=4.56
Exemple : char ch[30]; int p=18;
itoa(p, ch, 2); // ch= " 10010 ";