Vous êtes sur la page 1sur 7

Université Mohammed V SMP4 : Module programmation

Faculté des Sciences de Rabat Pr A.RiadSolh


Printemps 2023

Neuvième série: Exercices Langage C

Les fonctions

Exercice 1

Ecrire une fonction MIN et une fonction MAX qui déterminent le minimum et le maximum de deux nombres réels.
Ecrire un programme se servant des fonctions MIN et MAX pour déterminer le minimum et le maximum de quatre
nombres réels entrés au clavier.

#include <stdio.h>
#include <stdlib.h>
main()
{
float X1,X2,X3,X4,Min,Max;
float MIN(float A, float B);
float MAX(float A, float B);
// saisie des 4 nombres
printf("\nSaisi un premier nombre: ");
scanf("%f",&X1);
Min=X1; Max=X1;
printf("\nSaisi le second nombre: ");
scanf("%f",&X2);
Min=MIN(Min,X2); Max=MAX(Max,X2);
printf("\nSaisi le troisieme nombre: ");
scanf("%f",&X3);
Min=MIN(Min,X3); Max=MAX(Max,X3);
printf("\nSaisi le quatrieme nombre: ");
scanf("%f",&X4);
Min=MIN(Min,X4); Max=MAX(Max,X4);
printf("\nlaplus petite valeur est : %f",Min);
printf("\nlaplus grande valeur est : %f",Max);
}

float MIN(float X, float Y)


{
if(X<=Y)
return(X);
else
return(Y);
}
float MAX(float X, float Y)
{
if(X>=Y)
return(X);
else
return(Y);
}
Université Mohammed V SMP4 : Module programmation
Faculté des Sciences de Rabat Pr A.RiadSolh
Printemps 2023

Exercice 2

Ecrire un programme se servant d'une fonction F pour afficher la table de valeurs de la fonction définie par
f(x) = sin(x) + ln(x)
où x est un entier compris entre 1 et 10.

#include <stdio.h>
#include <math.h>

float F(int A);


main()
{
int i;
// affichage
for(i=1;i<=10;i++)
printf("\nF(%d) = %f",i,F(i));
}

float F(int A)
{
return(sin(A)+log(A));
}

Exercice 3
Ecrire la fonction NCHIFFRES du type int qui obtient une valeur entière N (positive ou négative) du type long comme
paramètre et qui fournit le nombre de chiffres de N comme résultat.
Ecrire un petit programme qui teste la fonction NCHIFFRES:
Exemple:
Introduire un nombre entier : 6457392
Le nombre 6457392 a 7 chiffres.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int NCHIFFRES(long A);
main()
{
int n;
long L;

// saisie d'un nombre


printf("\nIntroduire un nombre entier ");
scanf("%ld",&L);
n=NCHIFFRES(L);
printf("le nombre %ld a : %d chiffres",L,n);
}

int NCHIFFRES(long A)
{
char T[20];
ltoa(A,T,10);
return(strlen(T));
}
Université Mohammed V SMP4 : Module programmation
Faculté des Sciences de Rabat Pr A.RiadSolh
Printemps 2023

Exercice 4

En mathématiques, on définit la fonction factorielle de la manière suivante:


0! = 1
n! = n*(n-1)*(n-2)* ... * 1 (pour n>0)
Ecrire une fonction FACT du type double qui reçoit la valeur N (type int) comme paramètre et qui fournit la factorielle
de N comme résultat. Ecrire un petit programme qui teste la fonction FACT.

#include <stdio.h>
#include <stdlib.h>
main()
{
int n;
long L;
long FACT(int n);
// saisie d'un nombre
printf("\nIntroduire un nombre entier ");
scanf("%d",&n);
L=FACT(n);
printf("le factoriel de %d = %ld",n,L);
}

long FACT(int n)
{
if(n==0)
return(1);
else
return(n*FACT(n-1));
}

Exercice 5

Déterminer le maximum de N éléments d'un tableau TAB d'entiers de trois façons différentes:
a) la fonction MAX1 retourne la valeur maximale
b) la fonction MAX2 retourne l'indice de l'élément maximal
Ecrire un programme pour tester les trois fonctions.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{
int i,N=100,*Pmax;
int TAB[100]={0},*P=TAB;
int Max=99,Min=1;
int MAX1(int T[100]);
int MAX2(int T[100]);

srand(time(NULL));
Université Mohammed V SMP4 : Module programmation
Faculté des Sciences de Rabat Pr A.RiadSolh
Printemps 2023

for(i=0;i<N;i++)
TAB[i]=(rand() % (Max - Min + 1)) + Min;
// affichage Tableau TAB
printf("\n- Tableau : ");
for(i=0;i<N;i++)
printf(" %2d",TAB[i]);
// première mŽthode
printf("\n- Methode 1 : MAX1 = %d",MAX1(TAB));
// Deuxieme mŽthode
printf("\n- Methode 2 : MAX2 = %d",TAB[MAX2(TAB)]);

int MAX1(int T[100])


{
int i,N=100,M1;
M1=T[0];
for(i=1;i<N;i++)
{
if(T[i]>M1)
M1=T[i];
}
return(M1);
}

int MAX2(int T[100])


{
int i,N=100,iM=0;
for(i=1;i<N;i++)
{
if(T[i]>T[iM])
iM=i;
}
return(iM);
}

Exercice 6

Ecrire la fonction INSERER qui place un élément X à l'intérieur d'un tableau qui contient N éléments triés par ordre
croissant, de façon à obtenir un tableau à N+1 éléments triés par ordre croissant. La dimension du tableau est
incrémentée dans la fonction INSERER.

#include <stdio.h>
int main(){
int N,i,X,T[100];
/* Saisi de la dimension du tableau */
printf("Introduire la dimension du tableau qui doit être < 100 : ");
scanf("%d", &N);
// Remplissage du tableau avec des valeurs tries
for(i=0;i<N;i++)
T[i]=i+1;
// Affichage du tableau initiale
Université Mohammed V SMP4 : Module programmation
Faculté des Sciences de Rabat Pr A.RiadSolh
Printemps 2023

printf("Tableau initial trié : \n");


for(i=0;i<N;i++)
printf(" %2d",T[i]);
// Saisi du nombre à insérer
printf("\nIntroduire le nombre à insérer : ");
scanf("%d", &X);
INSERER(X, T, &N);
printf("Tableau final : \n");
for(i=0;i<N;i++)
printf(" %2d",T[i]);
return 0;
}
void INSERER(int X, int *T, int *N){
// Déplacer les éléments plus grands que X d'une position vers ¨re.
int i=*N;
while(*(T+i-1)>X && i>0){
*(T+i) = *(T+i-1);
i--;
}
// Insertion de X
*(T+i)=X;
/* incrémentation de la dimension du tableau: */
(*N)++;
}

Exercice 7

Ecrire la fonction TRI_INSERTION qui utilise la fonction INSERER pour trier par ordre croissant les éléments d'un
tableau à N éléments.
Méthode: Trier le tableau de gauche à droite en insérant à chaque fois l'élément I+1 dans le tableau (déjà trié) des I
premiers éléments.

#include <stdio.h>
int main(){
int N,T[100];
/* Saisi de la dimension du tableau */
printf("Introduire la dimension du tableau qui doit être < 100 : ");
scanf("%d", &N);
// Remplissage du tableau
for(int i=0;i<N;i++){
printf("Saisir l'élément %d:",i);
scanf("%d", &T[i]);
}
printf("Tableau initial : \n");
for(int i=0;i<N;i++)
printf(" %2d",T[i]);
TRI_INSERTION(T, N);
printf("\nTableau final : \n");
for(int i=0;i<N;i++)
printf(" %2d",T[i]);
return 0;
}
void TRI_INSERTION(int *T, int N){
int i=1;
Université Mohammed V SMP4 : Module programmation
Faculté des Sciences de Rabat Pr A.RiadSolh
Printemps 2023

while (i<N)
INSERER(*(T+i), T, &i);
}
void INSERER(int X, int *T, int *N){
// Déplacer les éléments plus grands que X d'une position vers l'arrière.
int i=*N;
while(*(T+i-1)>X && i>0){
*(T+i) = *(T+i-1);
i--;
}
// Insertion de X
*(T+i)=X;
/* incrémentation de la dimension du tableau: */
(*N)++;
}

Exercice 8

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.

#include <stdio.h>
#include <stdlib.h>

void FUSION(int A[], int B[], int m, int n, int FUS[])


{
int i = 0, j = 0, k = 0;
//i pour parcourir le tableau A
//j pour parcourir le tableau B
//k pour parcourir le tableau FUS

// Parcourir les deux tableaux


while (i<m && j <n)
{
if (A[i] < B[j]){
FUS[k] = A[i];
k++;
i++;
}else
{
FUS[k] = B[j];
k++;
j++;
}
}

// Stocker les éléments restants du tableau A


while (i < m){
FUS[k] = A[i];
k++;
i++;
Université Mohammed V SMP4 : Module programmation
Faculté des Sciences de Rabat Pr A.RiadSolh
Printemps 2023

}
// Stocker les éléments restants du tableau B
while (j < n){
FUS[k] = B[j];
k++;
j++;
}
}
main()
{
int A[] = {1, 3, 5, 7};
int m = 4;

int B[] = {2, 4, 6, 8,9};


int n =5 ;

int FUS[m+n];

//l'appel de la fonction FUSION


FUSION(A, B, m, n, FUS);

printf("Le tableau après la fusion:\n");


for (int i=0; i < m+n; i++)
printf("%d\t",FUS[i]);

Vous aimerez peut-être aussi