Vous êtes sur la page 1sur 5

Algorithmique et Programmation C

TD sur les Fonctions


Exercice 1
1) Ecrire une fonction qui calcul le carré d’un nombre de type double.
2) Ecrire une fonction qui calcul le cube d’un nombre de type double
a- sans utiliser la fonction précédente,
b- en utilisant la fonction précédente,
3) Ecrire la fonction main permettant de tester ces deux fonctions.

Réponse :
1)
double carre (double x)
{ return x *x; }

2)
a-
double cube (double x)
{ return x*x*x; }

b-
double cube (double x)
{ return x*carre(x); }

3)

Exercice 2

1) Ecrire une fonction qui cherche si un élément appartient à un tableau de char. Le


caractère recherché et le tableau seront les deux paramètres de la fonction.
Réponse :
boolean appartient(char car, char CH[])
{ boolean trouve = false;
int i=0 ;
while (CH[i] !=’\0’)
{ if (CH[i] == car)
{ trouve = true;
Break() ;
}
i++
}
return (trouve);
}

2) Ecrire une fonction qui compte le nombre d’occurrences d’un caractère dans un tableau,
c’est à dire le nombre de fois où un élément apparaît dans un tableau de caractères. Le
caractère recherché et le tableau seront les deux paramètres de la fonction.

Réponse :
int nbr_occurences(char car, char CH[])
{ int occ =0;

1
int i=0 ;
while (CH[i] !=’\0’)
{ if (CH[i] == car)
occ++;
i++
}
return (occ);
}

3) Ecrire la fonction main permettant de tester les deux fonctions précédentes.

Réponse :
#include<stdio.h>
#include<conio.h>
void main()
{ char CH[50] ;
char c ;
int nbr ;
printf(’’Taper une chaine de caractère (max 50 caractères)’’) ;
gets(CH) ;
printf(’’Taper un caratèère à rechercher dans la chaine’’) ;
scanf(’’%c’’,&c) ;
if (appartient(c, CH) )
printf(’’le carcatère %c appartient à la chaine saisie’’,c) ;
else
printf(’’le carcatère %c n’appartient pas à la chaine saisie’’,c) ;

nbr= nbr_occurences(c, CH) ;


printf(’’le nombre d’occurences du carcatère %c dans la chaine saisie est %d’’,c,nbr) ;
}

Exercice 3
Ecrire une fonction qui fait la division de deux entiers x et y passés en paramètres (la
fonction fonctionne également pour x ou y négatifs).

Réponse
int division(int x, int y)
{ int res = 0;
int signe = 1;
int cour, moins;
if (x<0)
{
cour = -x;
signe = -1;
}
else{
cour = x;
}
if (y<0)
{ moins = -y;

2
signe = -1 *signe;
}
else
{ moins = y;
}
if (y == 0){
printf(’’Division par 0’’;
exit(0) ;
}
while (cour>=moins)
{ cour = cour -moins;
res = res+1;
}
return (res*signe);
}

Exercice 4
1) Ecrire une fonction long Produit_Scalaire(int U[], int V[], int N) permettant de
calculer le produit scalaire de deux vecteurs d’entiers U et V de même dimension N.
Réponse
long Produit_Scalaire(int U[], int V[], int N)
{ long ps ;
int i ;
for (ps=0, i=0; i<N; i++)
ps += (long) U[i]*V[i];
return ps ;
}

2) Ecrire le programme C permettant de tester la fonction précédente avec N = 50 au


Max..
Réponse
#include <stdio.h>
#define MAX 50
long Produit_Scalaire(int [], int [], int N)
void main()
{ int U[MAX], V[MAX], N ; I ;
long PS ;

do { printf("Dimension du tableau (max.%d) : ",MAX);


scanf("%d", &N );
}while(N>MAX) ;
printf("** Saisie Premier tableau **\n");
for (I=0; I<N; I++)
{ printf("U[%d] = ?: ", I);
scanf("%d", &U[I]);
}
printf("** Saisie Deuxième tableau **\n");
for (I=0; I<N; I++)
{ printf("V[%d] = ?: ", I);
scanf("%d", &V[I]);

3
}
/* Calcul du produit scalaire */
PS = ProduitScalaire(U,V,N) ;
/* Affichage du résultat */
printf("Produit scalaire : %ld\n", PS);
}

Exercice 5 :
1) Ecrire un programme C permettant de calculer le produit de deux matrices carrées de
même dimension.
Réponse
#include <stdio.h>
void main()
{int A[50][50], B[50][50], C[50][50] ;
int N, i, j, k :
/* Saisie des données */
printf("Nombre de lignes et de colonnes (max.50) : ");
scanf("%d", &N );
printf("*** Saisie de la matrice A ***\n");
for (i=0; i<N; i++)
for (j=0; j<N; j++)
{ printf("A[%d][%d] = ?: ",i,j);
scanf("%d", &A[i][j]);
}
printf("*** Saisie de la matrice B ***\n");
for (i=0; i<N; i++)
for (j=0; j<N; j++)
{ printf("B[%d][%d] : ",i,j);
scanf("%d", &B[i][j]);
}
/* Calcul de C = AxB*/
for (i=0; i<N; i++)
for (j=0; j<N; j++)
{ C[i][j] = 0 ;
for(k = 0 ; k<N ; k++)
C[i][j] += A[i][k]*B[k][j];
}
/* Affichage des matrices */
printf("Matrice A :\n");
for (i=0; i<N; i++)
{ for (j=0; j<N; j++)
printf("%7d", A[i][j]);
printf("\n");
}
printf("Matrice B :\n");
for (i=0; i<N; i++)
{ for (j=0; j<N; j++)
printf("%7d", B[i][j]);
printf("\n");
}

4
printf("Matrice C=AxB :\n");
for (i=0; i<N; i++)
{ for (j=0; j<N; j++)
printf("%7d", C[i][j]);
printf("\n");
}
}

2) Réécrire le programme de telle sorte que la fonction main s’écrit comme suit :.

#include <stdio.h>
void main()
{int A[50][50], B[50][50], C[50][50] ;
int N, i, j, k :
printf("Nombre de lignes et de colonnes (max.50) : ");
scanf("%d", &N );
saisie_matrice(A, N);
saisie_matrice(B, N);
produit_matrice(A, B ; C ; N) ;
affiche_matrice(A, N);
affiche_matrice(B, N);
affiche_matrice(C, N) ;
}

Vous aimerez peut-être aussi