EXERCICE 1 :
Écrire un programme C qui permet de saisir N entiers dans un tableau (N<=100). Le programme doit afficher ensuite la somme de ces entiers et leur maximum.
Solution
#include<stdio.h>
void main()
{
int t[100],N,i,S=0, max;
clrscr(); /* cette fonction standard de C efface l’écran d’exécution */
/* saisie des données */
printf("Tapez le nombre d’entiers = ");
scanf("%d", &N) ;
for(i=0;i<N;i++)
{printf("T[%d]= ",i);
scanf("%d", &t[i]) ;
}
/* calcul de la somme des entiers du tableau */
for(i=0;i<N;i++) S+=t[i];
printf("La somme des entiers du tableau est :%d",S) ;
/* recherche du maximum dans le tableau */
max=t[0] ;
for(i=1;i<N;i++)
if (t[i]>max) max=t[i];
printf("Le maximum est :%d",max) ;
getche() ;
}
EXERCICE 2 :
Ecrire un programme qui permet de saisir N (N<=100) réels dans un tableau ainsi qu'un réel x. Le programme doit rechercher si x se trouve dans le tableau et afficher "x se trouve dans le tableau" ou "x ne se trouve pas dans le tableau".
Solution
#include<stdio.h>
void main(){
float t[100],x;
int i,N,flag;
printf(“Tapez le nombre de réel :”);
scanf("%f",&N);
for(i=0;i<N;i++)
{printf(“t[%d]=",i);
scanf("%f”,&t[i]);
}
printf("Tapez la valeur de x : "); scanf("%f",&x);
flag=0;
i=0;
while (!flag && i<N)
if (t[i]==x) flag=1;
else i++;
if(trouve) printf("La valeur x se trouve dans le tableau") ;
else printf("La valeur x ne se trouve pas dans le tableau");
getche() ;
}
EXERCICE 3
Ecrire un programme qui permet de saisir N (0<N<=50) entiers dans un tableau T. Le programme doit éclater ce tableau en deux tableau TP et TN, TP doit contenir les entiers positifs ou nuls de T et TN les négatifs.
Solution
#include<stdio.h>
void main()
{
int T[50],A[50],B[50],i,j,k,N;
do
{printf("N=");
scanf(“%d”,&N);
} while (N<=0 || N>50) ;
for(i=0;i<N;i++)
{printf("T[%d]=",i); scanf(“%d”,&T[i]);}
j=0;k=0;
for(i=0;i<N;i++)
if(T[i]<0) {TN[j]=T[i]; j++;}
else {TP[K]=T[i]; K++;}
getche() ;
}
EXERCICE 4
Ecrire un programme qui permet de :
1 : saisir N réels dans un tableau t
2 : Calculer et afficher la moyenne des éléments de ce tableau
3 : Chercher si un réel x appartient à ce tableau ou non
4 : Trier ce tableau par ordre croissant
5 : Afficher les éléments de ce tableau
Solution
#include<stdio.h>
void main()
{ float t[100],s,moy,x,min,aux;
int i,j,pos,n,flag;
clrscr();
/*lecture des donnees*/
do
{
printf("Tapez le nombre des réels:");
scanf("%d",&n);}
while (n<=0 || n>100);
for (i=0;i<n;i++)
{printf("t[%d]=",i);
scanf("%f",&t[i]);
};
/* calcul de la moyenne des elements */
s=0;
for (i=0;i<n;i++)
s+=t[i];
moy=s/n;
printf("La moyenne des éléments est :%.2f\n",moy);
/* recherche d'un élément dans le tableau */
printf("Tapez l'élément … chercher:");
scanf("%f",&x);
flag=0;
for (i=0;i<n;i++)
if(t[i]==x) flag=1;
if (flag) printf(" %.2f appartient au tableau\n",x);
else printf(" %.2f n'appartient pas au tableau\n",x);
/* le tri des éléments du tableau */
for (i=0;i<n-1;i++)
{min=t[i];pos=i;
for (j=i+1;j<n;j++)
if (t[j]<min) {min=t[j];pos=j;}
aux=t[i];
t[i]=t[pos];
t[pos]=aux;
}
/* affichage des éléments du tableau tri‚ */
for (i=0;i<n;i++)
printf("%.2f\n",t[i]);
getche();
}
EXERCICE 5
Meme exercice que le précédent mais cette fois ci utiliser une fonction pour chaque question.
Solution
#include<stdio.h>
void saisie(float t[], int n)
{ int i;
for (i=0;i<n;i++)
{printf("t[%d]=",i);
scanf("%f",&t[i]);
};
}
float moyenne(float t[], int n)
{int i;
float s;
s=0;
for (i=0;i<n;i++)
s+=t[i];
if (n!=0) return(s/n);
}
int exist(float t[], int n, float x)
{ int i,flag=0;
for (i=0;i<n;i++)
if(t[i]==x) flag=1;
return(flag);
}
void tri(float t[], int n)
{ int i,j,pos;
float aux,min;
for (i=0;i<n-1;i++)
{min=t[i];pos=i;
for (j=i+1;j<n;j++)
if (t[j]<min) {min=t[j];pos=j;}
aux=t[i];
t[i]=t[pos];
t[pos]=aux;
}
}
void affichage(float t[], int n)
{ int i;
for (i=0;i<n;i++)
printf("%.2f\n",t[i]);
}void main()
{ float t[100],x;
int n;clrscr();
do
{printf("Tapez le nombre des r‚els:");
scanf("%d",&n);}
while (n<=0 || n>100);saisie(t,n);
printf("La moyenne des éléments est :%.2f\n",moyenne(t,n));printf("Tapez l'élément … chercher:");
scanf("%f",&x);if (exist(t,n,x)) printf(" %.2f appartient au tableau\n",x);
else printf(" %.2f n'appartient pas au tableau\n",x);tri(t,n); affichage(t,n);
getche(); }
Exemple d'exécution du programme:
EXERCICE 6
Exercice sur les nombres premiers :
Une partie d’une épreuve soumise dans la rubrique épreuves types du menu programmation de ce site.
On rappelle qu’un entier est premier si et seulement si il a une paire de diviseurs composée de 1 et lui-même (autrement dit s’il a deux diviseurs exactement).
Question 1. Écrire la fonction estPremier(n) qui prend un entier n en argument, et qui renvoie 1 si n est premier et 0 sinon. On appliquera directement la définition des nombres premiers donnée ci-dessus.
On veut maintenant calculer tous les nombres premiers inférieurs à un entier donné n. On va procéder selon deux méthodes différentes.
Question 2. Écrire la fonction petitsPremiers(n) qui prend en argument un entier n ≥ 2, et qui :
1. Range (dans l’ordre croissant) les nombres premiers inférieurs ou égaux à n dans un tableau global tpr, que l’on supposera assez grand.
2. Range dans une variable globale nbpr le nombre d’entiers rangés dans tpr.
Par exemple pour n = 17, votre fonction devra affecter à nbpr le nombre 7 et remplir le début de tpr ainsi :
2
|
3
|
5
|
7
|
11
|
13
|
17
|
……..
|
Il est assez facile de voir que, pour tester si un entier impair m (m>=3) est premier, il suffit de vérifier que m n’est divisible par aucun nombre premier compris entre 3 et racine carrée de m.
Question 3. Écrire une nouvelle fonction petitsPremiers2(n), qui donne les mêmes résultats que petitsPremiers(n) mais est plus efficace. Cette nouvelle fonction appliquera la remarque ci-dessus, les nombres premiers entre 3 et [√m] étant lus dans le tableau tpr en cours de remplissage.
Solution
#include<stdio.h>
int tpr[1000],dim;
/* les prototypes des fonctions */
int estpremier(int n);
void petitspremiers(int n);
void petitspremiers2(int n);
void affichertab(int t[],int n);
void initialiser(int t[], int n);
/**** la fonction main ****/
void main()
{ int n;
clrscr();
printf("Tapez un entier :");scanf("%d",&n);
if (estpremier(n)) printf("%d est premier\n",n);
else printf("%d n'est pas premier\n",n);
petitspremiers(n);
printf("les %d nombre premier inferieur a %d sont\n",dim,n);
affichertab(tpr,dim);printf("\n");
initialiser(tpr,dim);
petitspremiers2(n);
printf("les %d nombre premier inferieur a %d sont\n",dim,n);
affichertab(tpr,dim);
getche();
}
/*** le corps de la fonction estpremier */
int estpremier(int n)
{ int i,nd=0;
for(i=1;i<=n/2;i++)
if (n%i==0) nd++;
if (nd==1) return(1); else return(0);
}
/* le corps de la fonction petitspremiers: c'est une procédure */
void petitspremiers(int n)
{int i;
dim=0;
for (i=2;i<=n;i++)
if (estpremier(i)) {tpr[dim]=i; dim++;};
}
/* la fonction affichertab est aussi une procédure */
void affichertab(int t[], int n)
{int i;
for (i=0; i<n;i++)
printf("%d ",t[i]);
}
/* la fonction qui initialise les cases d'un tableau à zéro*/
void initialiser(int t[], int n)
{int i;
for (i=0; i<n;i++)
t[i]=0;
}
/* le corps de la fonction petitqpremiers2 */
void petitspremiers2(int n)
{int i,k;
dim=1;tpr[0]=2;
for (i=3;i<=n;i++)
if (i%2 !=0)
{ k=0;
while (i%tpr[k]!=0 && tpr[k]*tpr[k]<i)
k++;
if (tpr[k]*tpr[k]>i) {tpr[dim]=i; dim++;}
}
}
Une éxécution du programme:
EXERCICE 7
On désire traiter des matrices carrés d'entiers. Ecrire un programme C qui permet de saisir la dimension N de ces matrices (0<N<=25) et de saisir les éléments de deux matrices A et B et de réaliser les traitements suivants:
1- Afficher les deux matrices A et B sous la forme conventionnelle des matrices.
2- Calculer et afficher la somme des éléments de la matrice A.
3- Calculer la somme des deux matrices A et B et affecter le résultat à la matrice C, puis éditer ce résultat.
4- Calculer le produit des deux matrices A et B et affecter le résultat à la matrice C, puis éditer le résultat.
5- Affecter la matrice transposée de la matrice A à la matrice T et éditer le résultat.
Solution
#include <stdio.h>
void main()
{
int A[25][25]; /* matrice donnée */
int B[25][25]; /* matrice donnée */
int C[25][25]; /* matrice résultat */
int T[25][25]; /*matrice transposée*/
int N; /* dimensions des matrices */
int i, j, k; /* indices courants */
int S;
clrscr();
/* Saisie des données */
printf("Donner la dimension des matrices carr‚s A et B(max.25) : ");
scanf("%d", &N );
printf("*** 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("*** 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]);
}
/* Affichage des matrices */
printf("La matrice A :\n");
for (i=0; i<N; i++)
{
for (j=0; j<N; j++)
printf("%7d", A[i][j]);
printf("\n");
}
printf("La matrice B :\n");
for (i=0; i<N; i++)
{
for (j=0; j<N; j++)
printf("%7d", B[i][j]);
printf("\n");
}
/* Calcul de la somme des éléments de matrice A */
S=0;
for (i=0; i<N; i++)
for (j=0; j<N; j++)
S +=A[i][j];
/* Edition du résultat */
printf("La somme des éléments de la matrice A est:%d:\n",S);
/* Affectation du résultat de la somme … C */
for (i=0; i<N; i++)
for (j=0; j<N; j++)
C[i][j] =A[i][j] + B[i][j];
/* Edition du résultat */
printf("La matrice somme de A et B :\n");
for (i=0; i<N; i++)
{
for (j=0; j<N; j++)
printf("%7d", C[i][j]);
printf("\n");
}
/* Affectation du résultat de la multiplication … C */
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] =C[i][j] + A[i][k] * B[k][j];
}
/* Edition du résultat */
printf("La matrice produite de A et B :\n");
for (i=0; i<N; i++)
{
for (j=0; j<N; j++)
printf("%7d", C[i][j]);
printf("\n");
}
/* Affectation de la transposée de A … T */
for (i=0; i<N; i++)
for (j=0; j<N; j++)
{
T[j][i]=A[i][j];
}
/* Edition du résultat */
printf("La matrice transposée de A :\n");
for (i=0; i<N; i++)
{
for (j=0; j<N; j++)
printf("%7d", T[i][j]);
printf("\n");
}
getche();
}
EXERCICE 8
Même exercice que le précédent mais cette fois ci utiliser des fonctions pour réaliser les traitements demandés :
- Une fonction qui saisie une matrice carrée quelconque.
- Une fonction qui affiche une matrice carrée quelconque.
- Une fonction qui retourne la somme des éléments d'une matrice passée comme paramétre.
- Une fonction qui calcule la somme de deux matrices passées comme paramétres
- Une fonction qui calcule le produit de deux matrices passées commes parametres
- Une fonction qui calcule la transposée d'une matrice.
Solution
#include <stdio.h>
void saisir(int T[25][25],int N)
{int i,j;
for (i=0; i<N; i++)
for (j=0; j<N; j++)
{
printf("T[%d][%d] : ",i,j);
scanf("%d", &T[i][j]);
}
}
void afficher(int T[25][25], int N)
{int i,j;
for (i=0; i<N; i++)
{
for (j=0; j<N; j++)
printf("%7d", T[i][j]);
printf("\n");
}
}
int somme_elts(int T[25][25],int N)
{int i,j,S=0;
for (i=0; i<N; i++)
for (j=0; j<N; j++)
S +=T[i][j];
return(S);
}
void somme(int A[25][25], int B[25][25],int C[25][25], int N)
{int i,j;
for (i=0; i<N; i++)
for (j=0; j<N; j++)
C[i][j] =A[i][j] + B[i][j];
}
void produit(int A[25][25], int B[25][25],int C[25][25], int N)
{int i,j,k;
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] =C[i][j] + A[i][k] * B[k][j];
}
}
void transposee(int A[25][25], int T[25][25], int N)
{int i,j;
for (i=0; i<N; i++)
for (j=0; j<N; j++)
{
T[j][i]=A[i][j];
}
}
void main()
{
int A[25][25]; /* matrice donnée */
int B[25][25]; /* matrice donnée */
int C[25][25]; /* matrice résultat */
int T[25][25]; /*matrice transposée*/
int N; /* dimensions des matrices */
clrscr();
/* Saisie des données */
printf("Donner la dimension des matrices carrés A et B(max.25) : ");
scanf("%d", &N );
printf("*** Matrice A ***\n");
saisir(A,N);
printf("*** Matrice B ***\n");
saisir(B,N);
/* Affichage des matrices */
printf("La matrice A :\n");
afficher(A,N);
printf("La matrice B :\n");
afficher(B,N);
/* Calcul de la somme des éléments de matrice A */
/* Edition du résultat */
printf("La somme des éléments de la matrice A est:%d:\n",somme_elts(A,N));
/* Affectation du résultat de la somme … C */
somme(A,B,C,N);
/* Edition du résultat */
printf("La matrice somme de A et B :\n");
afficher(C,N);
/* Affectation du résultat de la multiplication … C */
produit(A,B,C,N);
/* Edition du résultat */
printf("La matrice produite de A et B :\n");
afficher(C,N);
/* Affectation de la transposée de A … T */
transposee(A,T,N);
/* Edition du r‚sultat */
printf("La matrice tranposée de A :\n");
afficher(T,N);
getche();
}
void saisir(int T[25][25],int N)
{int i,j;
for (i=0; i<N; i++)
for (j=0; j<N; j++)
{
printf("T[%d][%d] : ",i,j);
scanf("%d", &T[i][j]);
}
}
void afficher(int T[25][25], int N)
{int i,j;
for (i=0; i<N; i++)
{
for (j=0; j<N; j++)
printf("%7d", T[i][j]);
printf("\n");
}
}
int somme_elts(int T[25][25],int N)
{int i,j,S=0;
for (i=0; i<N; i++)
for (j=0; j<N; j++)
S +=T[i][j];
return(S);
}
void somme(int A[25][25], int B[25][25],int C[25][25], int N)
{int i,j;
for (i=0; i<N; i++)
for (j=0; j<N; j++)
C[i][j] =A[i][j] + B[i][j];
}
void produit(int A[25][25], int B[25][25],int C[25][25], int N)
{int i,j,k;
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] =C[i][j] + A[i][k] * B[k][j];
}
}
void transposee(int A[25][25], int T[25][25], int N)
{int i,j;
for (i=0; i<N; i++)
for (j=0; j<N; j++)
{
T[j][i]=A[i][j];
}
}
void main()
{
int A[25][25]; /* matrice donnée */
int B[25][25]; /* matrice donnée */
int C[25][25]; /* matrice résultat */
int T[25][25]; /*matrice transposée*/
int N; /* dimensions des matrices */
clrscr();
/* Saisie des données */
printf("Donner la dimension des matrices carrés A et B(max.25) : ");
scanf("%d", &N );
printf("*** Matrice A ***\n");
saisir(A,N);
printf("*** Matrice B ***\n");
saisir(B,N);
/* Affichage des matrices */
printf("La matrice A :\n");
afficher(A,N);
printf("La matrice B :\n");
afficher(B,N);
/* Calcul de la somme des éléments de matrice A */
/* Edition du résultat */
printf("La somme des éléments de la matrice A est:%d:\n",somme_elts(A,N));
/* Affectation du résultat de la somme … C */
somme(A,B,C,N);
/* Edition du résultat */
printf("La matrice somme de A et B :\n");
afficher(C,N);
/* Affectation du résultat de la multiplication … C */
produit(A,B,C,N);
/* Edition du résultat */
printf("La matrice produite de A et B :\n");
afficher(C,N);
/* Affectation de la transposée de A … T */
transposee(A,T,N);
/* Edition du r‚sultat */
printf("La matrice tranposée de A :\n");
afficher(T,N);
getche();
}
EXERCICE 9: (tableaux dynamiques)
Ecrire un programme en langage C qui utilise des tableaux dynamiques et qui :
- Permet de saisir n réels (0<n<=100) dans un tableau t
- D’afficher la moyenne des éléments du tableau t
- De compter les éléments positifs du tableau t
- D’éclater le tableau initial t en deux tableaux dynamiques tp et tn , le premier contient les éléments positifs et le deuxième contient les éléments négatifs
- Trier ces deux derniers tableaux par ordre décroissant
- Afficher les éléments des deux tableaux dans un ordre décroissant chacun
Solution
#include<stdio.h>
#include<stdlib.h>
void main()
{ float *t,*tp,*tn,moy=0,aux;
int i,j,k,nbnp,n;
clrscr();
/*lecture des donnees*/
do
{
printf("Tapez le nombre des r‚els:");
scanf("%d",&n);}
while (n<=0 || n>100);
t=malloc(n*sizeof(float));
/* pour quelque editeur c on ecrit t=(float*)malloc(n*sizeof(float))*/
for (i=0;i<n;i++)
{printf("t[%d]=",i);
scanf("%f",&t[i]);
};
/* calcul de la moyenne des elements */
moy=0;
for (i=0;i<n;i++)
moy=moy+t[i];
moy=moy/n;
printf("La moyenne des ‚l‚ments est :%.2f\n",moy);
/* eclatement du tableau en deux tableaux */
nbnp=0;
for (i=0;i<n;i++)
if (t[i]>=0) nbnp++;
tp=malloc(nbnp*sizeof(float));
tn=malloc((n-nbnp)*sizeof(float));
j=0;k=0;
for(i=0;i<n;i++)
if (t[i]>=0) {tp[j]=t[i]; j++;}
else {tn[k]=t[i]; k++;}
/* le tri des ‚l‚ments du tableau tp*/
for (i=0;i<nbnp-1;i++)
for (j=i+1;j<nbnp;j++)
if (tp[i]<tp[j])
{ aux=tp[i];
tp[i]=tp[j];
tp[j]=aux;
}
/* affichage des ‚l‚ments du tableau tp tri‚ */
printf("Liste ‚l‚ments positifs tri‚s par ordre d‚croissant:\n");
for (i=0;i<nbnp;i++)
printf("%.2f\n",tp[i]);
/* le tri des ‚l‚ments du tableau tn*/
for (i=0;i<(n-nbnp)-1;i++)
for (j=i+1;j<(n-nbnp);j++)
if (tn[i]<tn[j])
{ aux=tn[i];
tn[i]=tn[j];
tn[j]=aux;
}
/* affichage des ‚l‚ments du tableau tn tri‚ */
printf("Liste ‚l‚ments n‚gatifs tri‚s par ordre d‚croissant:\n");
for (i=0;i<(n-nbnp);i++)
printf("%.2f\n",tn[i]);
getche();
}
#include<stdlib.h>
void main()
{ float *t,*tp,*tn,moy=0,aux;
int i,j,k,nbnp,n;
clrscr();
/*lecture des donnees*/
do
{
printf("Tapez le nombre des r‚els:");
scanf("%d",&n);}
while (n<=0 || n>100);
t=malloc(n*sizeof(float));
/* pour quelque editeur c on ecrit t=(float*)malloc(n*sizeof(float))*/
for (i=0;i<n;i++)
{printf("t[%d]=",i);
scanf("%f",&t[i]);
};
/* calcul de la moyenne des elements */
moy=0;
for (i=0;i<n;i++)
moy=moy+t[i];
moy=moy/n;
printf("La moyenne des ‚l‚ments est :%.2f\n",moy);
/* eclatement du tableau en deux tableaux */
nbnp=0;
for (i=0;i<n;i++)
if (t[i]>=0) nbnp++;
tp=malloc(nbnp*sizeof(float));
tn=malloc((n-nbnp)*sizeof(float));
j=0;k=0;
for(i=0;i<n;i++)
if (t[i]>=0) {tp[j]=t[i]; j++;}
else {tn[k]=t[i]; k++;}
/* le tri des ‚l‚ments du tableau tp*/
for (i=0;i<nbnp-1;i++)
for (j=i+1;j<nbnp;j++)
if (tp[i]<tp[j])
{ aux=tp[i];
tp[i]=tp[j];
tp[j]=aux;
}
/* affichage des ‚l‚ments du tableau tp tri‚ */
printf("Liste ‚l‚ments positifs tri‚s par ordre d‚croissant:\n");
for (i=0;i<nbnp;i++)
printf("%.2f\n",tp[i]);
/* le tri des ‚l‚ments du tableau tn*/
for (i=0;i<(n-nbnp)-1;i++)
for (j=i+1;j<(n-nbnp);j++)
if (tn[i]<tn[j])
{ aux=tn[i];
tn[i]=tn[j];
tn[j]=aux;
}
/* affichage des ‚l‚ments du tableau tn tri‚ */
printf("Liste ‚l‚ments n‚gatifs tri‚s par ordre d‚croissant:\n");
for (i=0;i<(n-nbnp);i++)
printf("%.2f\n",tn[i]);
getche();
}
0 commentaires:
Enregistrer un commentaire