Vous êtes sur la page 1sur 15

Les fonctions en C (exercices corrigés)

Exercice 1
Donner une fonction qui retourne la moyenne, le minimum et le maximum d’un tableau
unidimensionnels ;

Exercice 2
On déclare un tableau d'entiers A de dimension 10
Définir deux fonctions, remplitA et impA, permettent de remplir et imprimer le tableau.
Déclarer un pointeur vers l'élément 7, incrémenter le pointeur et la valeur pointée.
Ecrire une fonction Trie qui tri les éléments d'un tableau dans l'ordre croissant ;
Tester tous ses fonctions dans un programme principal.

Exercice 3
Écrire une fonction char * recherche_char(char* s,char c) qui renvoie un pointeur vers la
première occurrence du caractère c (le caractère passé en argument, pas le caractère ’c’) dans
la chaine s. Si ce caractère n’apparait pas dans la chaine, la fonction devra renvoyer NULL
Exercice 4
À l’aide de recherche_char, écrire une fonction int compte_char(char *s, char c) qui compte
le nombre d’occurrences de c dans s.
Exercice5
Ecrire une fonction fois_deux qui multiplie par deux un entier.
Ecrire une fonction appliquer_tableau(int f(int), int * t, int n) qui applique une fonction f,
au tableaut de taille n.
Ecrire une fonction main qui teste appliquer_tableau

corrigés :

Exercice 1:

/*Donner une fonction qui retourne la moyenne, le minimum et le maximum


d'un tableau unidimensionnels */

#include<stdio.h>

#include<conio.h>

void fonction(int *max,int *min,int *moy)

{ int i,n,t[10],s=0;

printf("donner la taille du tableaux");

scanf("%d",&n);

for(i=0;i<n;i++)

{printf("t[%d]=",i);
scanf("%d",&t[i]);

*min=t[0];

*max=t[0];

for(i=0;i<n;i++)

{ s=s+t[i];

if(t[i]<*min)

{ *min=t[i]; }

if(t[i]>*max)

{*max=t[i]; }

*moy=s/n;

main()

{ int max, min, moy;

fonction(&max,&min,&moy);

printf(" le max est %d le min est %d la moyenne est %d",max,min,moy),

getch();

Exercice2 :

#include<stdio.h>

#include<conio.h>

void remplit(int n, int t[10])

{int i;

for(i=0;i<n;i++)

{printf("donnez les valeurs du tableau t[%d]",i);

scanf("%d",&t[i]);}}

void impt( int t[10], int n)

{int i;
for(i=0;i<n;i++)

{printf("%d\t",t[i]);}}

void pointer(int*p,int t[10], int n)

{if(n>7)

{p=t+7;

for(p=t+7;p<t+n;p++)

{*p=*p+1;}}}

void tri( int t[10],int n)

{int aide,i,j;

for(i=0;i<n-1;i++)

{for(j=i+1;j<n;j++)

{if( t[i]>t[j])

{aide=t[i];

t[i]=t[j];

t[j]=aide;}}}}

main()

{int t[10],*p,n;

printf("donnez la dimention");

scanf("%d",&n);remplit( n, t);

impt( t, n);

printf("\n");

pointer(p,t, n);

tri( t,n);

impt( t, n);

getch();}

Exercice 3:

#include<stdio.h>

#include<conio.h>

#include<string.h>

char * recherche_char(char* s,char c) //pour indiqer le caractére chercher


// f contient la taille de la chaine

{ char*p;p=s;

while(*p!='\0')

{if(*p==c)

{return(p);}

else

{p++;}

return(NULL);}

int compte_char(char *s, char c)

char*p;p=s;

int k=0;

while(p=recherche_char(s,c))

{k++;

p++;}

return(k);

main()

{char s[100],c,*p;

int k;

printf("ecrire le texte \n");

gets(s);

printf("donnez la lettre \n");

scanf("%c",&c);

p=recherche_char(s,c);

puts(p);

k=compte_char(s,c);

printf("%d ",k);

getch();}

Exercice 4:
#include<stdio.h>

#include<conio.h>

#include<string.h>

char * recherche_char(char* s,char c)

{ char*p;

p=s;

while(*p!='\0')

{if(*p==c)

{return(p);}

else

{p++;}

return(NULL);}

int compte(char* s,char c)

{ char*p;p=s;

int i;

i=0;

while(p=recherche_char(p,c))

{i++;

p++;}

return(i);}

main()

{char s[100],c;

int i;

printf("ecrire le texte \n");

gets(s);

printf("donnez la lettre \n");

scanf("%c",&c);
i=compte(s,c);

printf("%d",i);
getch();}

Exercice langage C : Moyenne, minimum et maximum


Ecrire une fonction saisir qui permet saisir un tableau de réels

Ecrire une fonction afficher qui permet d’afficher les éléments du tableau

Ecrire une fonction calculer_moyenne qui permet de calculer la moyenne des éléments du tableau

Ecrire une fonction trouver_minmax qui permet de trouver le minimum et le maximum des éléments du tableau.

Ecrire le programme principal

1 /* Calcul du minimum, maximum et moyenne d'un tableau */


2
3 #include
4
5 /* Saisie au clavier des elements d'un tableau */
6 void saisie(double *tab, int nb)
7 {
8 int i;
9 printf("\n");
10 for (i=0; i<nb; i++)
11 {
12 printf ("Valeur de tab[%d] = ", i);
13 scanf ("%lf", &tab[i]);
14 }
15 return;
16 }
17
18 /* Affichage des elements d'un tableau */
19 void affiche(double *tab, int nb)
20 {
21 int i;
22 printf("\n");
23 for (i=0; i<nb; i++)
24 {
25 printf ("tab[%d] = %f\n", i, tab[i]);
26 }
27 printf("\n");
28 return;
29 }
30
31 /* Calcul de la moyenne */
32 double calculer_moyenne (double *tab, int nb)
33 {
34 double moyen, somme;
35 int i;
36 somme = 0;
37 for (i=0; i<nb; i++)
38 {
39 somme = somme + tab[i];
40 }
41 moyen = somme / nb;
42 return moyen;
43 }
44
45 /* pmin et pmax contiendront resp. le min et le max du tableau tab */
46 void chercher_min_max (double *tab, int nb, double *pmin, double *pmax)
47 {
48 double val_min, val_max;
49 int i;
50 val_min = tab[0];
51 val_max = tab[0];
52 for (i=0; i<nb; i++)
53 {
54 if (tab[i] < val_min)
55 {
56 val_min = tab[i];
57 }
58 else if (tab[i] > val_max)
59 {
60 val_max = tab[i];
61 }
62 }
63 *pmin = val_min;
64 *pmax = val_max;
65 }
66
67 int main ()
68 {
69 int nb_val;
70 double min, max,moyenne, table [10];
71
72 printf("Nombre d\'elements ? "); scanf ("%d", &nb_val);
73
74 saisie(table, nb_val);
75 affiche(table, nb_val);
76
77 moyenne = calculer_moyenne(table, nb_val);
78 printf("Moyenne = %f\n", moyenne);
79
80 chercher_min_max(table, nb_val, &min, &max);
81 printf ("Min = %f\tMax = %f\n", min, max);
82
83 return 0;
84 }
85

Exercice 7.14 Tri par sélection du maximum


#include <stdio.h>
main()
{
/* Déclarations */
int A[50]; /* tableau donné */
int N; /* dimension */
int I; /* rang à partir duquel A n'est pas trié */
int J; /* indice courant */
int AIDE; /* pour la permutation */
int PMAX; /* indique la position de l'élément */
/* maximal à droite de A[I] */

/* Saisie des données */


printf("Dimension du tableau (max.50) : ");
scanf("%d", &N );
for (J=0; J<N; J++)
{
printf("Elément %d : ", J);
scanf("%d", &A[J]);
}
/* Affichage du tableau */
printf("Tableau donné :\n");
for (J=0; J<N; J++)
printf("%d ", A[J]);
printf("\n");

/* Tri du tableau par sélection directe du maximum. */


for (I=0; I<N-1; I++)
{
/* Recherche du maximum à droite de A[I] */
PMAX=I;
for (J=I+1; J<N; J++)
if (A[J]>A[PMAX]) PMAX=J;
/* Echange de A[I] avec le maximum */
AIDE=A[I];
A[I]=A[PMAX];
A[PMAX]=AIDE;
}

/* Edition du résultat */
printf("Tableau trié :\n");
for (J=0; J<N; J++)
printf("%d ", A[J]);
printf("\n");
return 0;
}
Exercice langage C fusion de tableaux triés en fonctions
Ecrire la fonction FUSION qui construit un tableau FUS trié par ordre croissant avec les éléments de deux
tableaux A et B triés par ordre croissant. Pour deux tableaux de dimensions N et M, le tableau FUS aura la
dimension N+M. (Méthode: voir exercice 7.13)

Ecrire un programme qui teste la fonction FUSION à l'aide de deux tableaux lus au clavier et triés à l'aide de
TRI_BULLE.

Corrigé exercice langage C fusion de tableaux triés en


fonctions

1 #include <stdio.h>
2
3 main()
4 {
5 /* Prototypes des fonctions appelées */
6 void FUSION(int *A, int *B, int *FUS, int N, int M);
7 void TRI_BULLE(int *T, int N);
8 void LIRE_TAB (int *TAB, int *N, int NMAX);
9 void ECRIRE_TAB (int *TAB, int N);
10 /* Variables locales */
11 /* Les tableaux et leurs dimensions */
12 int A[100], B[100], FUS[200];
13 int N, M;
14 /* Traitements */
15 printf("*** Tableau A ***\n");
16 LIRE_TAB (A, &N, 100);
17 printf("*** Tableau B ***\n");
18 LIRE_TAB (B, &M, 100);
19 TRI_BULLE(A, N);
20 printf("Tableau A trié : \n");
21 ECRIRE_TAB (A, N);
22 TRI_BULLE(B, M);
23 printf("Tableau B trié : \n");
24 ECRIRE_TAB (B, M);
25 FUSION(A,B,FUS,N,M);
26 printf("Tableau FUS : \n");
27 ECRIRE_TAB (FUS, N+M);
28 return 0;
29 }
30
31
32 void FUSION(int *A, int *B, int *FUS, int N, int M)
33 {
34 /* Variables locales */
35 /* Indices courants dans A, B et FUS */
36 int IA,IB,IFUS;
37 /* Fusion de A et B dans FUS */
38 IA=0, IB=0; IFUS=0;
39 while ((IA<N) && (IB<M))
40 if (*(A+IA)<*(B+IB))
41 {
42 *(FUS+IFUS)=*(A+IA);
43 IFUS++;
44 IA++;
45 }
46 else
47 {
48 FUS[IFUS]=B[IB];
49 IFUS++;
50 IB++;
51 }
52 /* Si A ou B sont arrivés à la fin, alors */
53 /* copier le reste de l'autre tableau. */
54 while (IA<N)
55 {
56 *(FUS+IFUS)=*(A+IA);
57 IFUS++;
58 IA++;
59 }
60 while (IB<M)
61 {
62 *(FUS+IFUS)=*(B+IB);
63 IFUS++;
64 IB++;
65 }
66 }
67
68 void TRI_BULLE(int *T, int N)
69 {
70 /* Prototypes des fonctions appelées */
71 int RANGER(int *X, int *Y);
72 . . .
73 }
74 int RANGER(int *X, int *Y)
75 {
76 . . .
77 }
78 void LIRE_TAB (int *TAB, int *N, int NMAX)
79 {
80 . . .
81 }
82 void ECRIRE_TAB (int *TAB, int N)
83 {
84 . . .
85 }

Exercice 1
Donner une fonction qui retourne la moyenne, le minimum et le maximum d’un tableau
unidimensionnels ;

Exercice 2
On déclare un tableau d'entiers A de dimension 10
Définir deux fonctions, remplitA et impA, permettent de remplir et imprimer le tableau.
Déclarer un pointeur vers l'élément 7, incrémenter le pointeur et la valeur pointée.
Ecrire une fonction Trie qui tri les éléments d'un tableau dans l'ordre croissant ;
Tester tous ses fonctions dans un programme principal.

Exercice 3
Écrire une fonction char * recherche_char(char* s,char c) qui renvoie un pointeur vers la
première occurrence du caractère c (le caractère passé en argument, pas le caractère ’c’) dans
la chaine s. Si ce caractère n’apparait pas dans la chaine, la fonction devra renvoyer NULL
Exercice 4
À l’aide de recherche_char, écrire une fonction int compte_char(char *s, char c) qui compte
le nombre d’occurrences de c dans s.
Exercice5
Ecrire une fonction fois_deux qui multiplie par deux un entier.
Ecrire une fonction appliquer_tableau(int f(int), int * t, int n) qui applique une fonction f,
au tableaut de taille n.
Ecrire une fonction main qui teste appliquer_tableau

corrigés :

Exercice 1:

/*Donner une fonction qui retourne la moyenne, le minimum et le maximum


d'un tableau unidimensionnels */

#include<stdio.h>

#include<conio.h>

void fonction(int *max,int *min,int *moy)

{ int i,n,t[10],s=0;

printf("donner la taille du tableaux");

scanf("%d",&n);

for(i=0;i<n;i++)

{printf("t[%d]=",i);
scanf("%d",&t[i]);

*min=t[0];

*max=t[0];

for(i=0;i<n;i++)

{ s=s+t[i];

if(t[i]<*min)

{ *min=t[i]; }

if(t[i]>*max)

{*max=t[i]; }

*moy=s/n;

main()

{ int max, min, moy;

fonction(&max,&min,&moy);

printf(" le max est %d le min est %d la moyenne est %d",max,min,moy),

getch();

Exercice2 :

#include<stdio.h>

#include<conio.h>

void remplit(int n, int t[10])

{int i;

for(i=0;i<n;i++)

{printf("donnez les valeurs du tableau t[%d]",i);

scanf("%d",&t[i]);}}

void impt( int t[10], int n)

{int i;
for(i=0;i<n;i++)

{printf("%d\t",t[i]);}}

void pointer(int*p,int t[10], int n)

{if(n>7)

{p=t+7;

for(p=t+7;p<t+n;p++)

{*p=*p+1;}}}

void tri( int t[10],int n)

{int aide,i,j;

for(i=0;i<n-1;i++)

{for(j=i+1;j<n;j++)

{if( t[i]>t[j])

{aide=t[i];

t[i]=t[j];

t[j]=aide;}}}}

main()

{int t[10],*p,n;

printf("donnez la dimention");

scanf("%d",&n);remplit( n, t);

impt( t, n);

printf("\n");

pointer(p,t, n);

tri( t,n);

impt( t, n);

getch();}

Exercice 3:

#include<stdio.h>

#include<conio.h>

#include<string.h>

char * recherche_char(char* s,char c) //pour indiqer le caractére chercher


// f contient la taille de la chaine

{ char*p;p=s;

while(*p!='\0')

{if(*p==c)

{return(p);}

else

{p++;}

return(NULL);}

int compte_char(char *s, char c)

char*p;p=s;

int k=0;

while(p=recherche_char(s,c))

{k++;

p++;}

return(k);

main()

{char s[100],c,*p;

int k;

printf("ecrire le texte \n");

gets(s);

printf("donnez la lettre \n");

scanf("%c",&c);

p=recherche_char(s,c);

puts(p);

k=compte_char(s,c);

printf("%d ",k);

getch();}

Exercice 4:
#include<stdio.h>

#include<conio.h>

#include<string.h>

char * recherche_char(char* s,char c)

{ char*p;

p=s;

while(*p!='\0')

{if(*p==c)

{return(p);}

else

{p++;}

return(NULL);}

int compte(char* s,char c)

{ char*p;p=s;

int i;

i=0;

while(p=recherche_char(p,c))

{i++;

p++;}

return(i);}

main()

{char s[100],c;

int i;

printf("ecrire le texte \n");

gets(s);

printf("donnez la lettre \n");

scanf("%c",&c);
i=compte(s,c);

printf("%d",i);
getch();}

Exercice 5:

Vous aimerez peut-être aussi