Vous êtes sur la page 1sur 189

REPUBLIQUE DU CAMEROUN REPUBLIC OF CAMEROON

PAIX-TRAVAIL-PATRIE PEACE-WORK-FATHERLAND
********
MINISTERE DE L'ENSEIGNEMENT SUPERIEUR MINISTRY OF HIGHER EDUCATION
******** ********
UNIVERSITE DE MAROUA UNIVERSITY OF MAROUA
******* ********
ECOLE NATIONALE SUPÉRIEURE NATIONAL ADVANCED SCHOOL OF
POLYTECHNIQUE DE MAROUA ENGINEERING OF MAROUA
******** ********
DEPARTEMENT DES ENSEIGNEMENTS DEPARTEMENT OF BASIC SCIENTIFIC
SCIENTIFIQUES DE BASE EDUCATION

B.P./P.O. Box : 46 Maroua


Tel : +237 22620890/22292852
Fax : +237-22291541/22293112
Email : institutsupsahel.uma@gmail.com
Site : http://www.uni-maroua.citi.cm

COMPTE RENDU DU TPE D’INFORMATIQUE 2


(ESB162)
ESB 1 - 5e PROMOTION ENSPM - INFOTEL

ADJIA THEOPHILE (Matricule 21D0158EP)

ENSEIGNANT
M.SAMDALLE

Année académique 2021 / 2022

1
Exercice 1
1.Ecrire un programme C qui permet d'afficher le message suivant: Bonjour.
Solution
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Bonjour\n");
return 0;
}
Preuve1.1

2. Ecrire un programme C qui permet de lire en entrée un entier constitué de


trois chiffres et d'afficher celui-ci inversé. Exemple: si l'entrée est 123 on affiche
321.
Solution
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b,c;

2
printf("donnez un entier de 3 chiffres\n");
scanf("%d",&a);
c=a;
b=(a%10)*100;
a=a/10;
b=b+(a%10)*10;
a/=10;
b+=a;
printf("le nombre %d inverse est %d\n",c,b);
return 0;
}
preuve1.2

Exercice 2
1.Ecrire un programme C qui permet de lire deux nombres réels, et d'afficher
ensuite leur produit, avec une précision de trois chiffres après la virgule.
Solution
#include <stdio.h>
#include <stdlib.h>

3
int main()
{
float x,y,p;
printf("Entrez deux reels:\n");
scanf("%f%f",&x,&y);
p=x*y;
printf("le produit de %f et %f est: %.3f\n",x,y,p);
return 0;
}
Preuve2.1

2. Ecrire un programme C qui permet de permuter le contenu de deux variables


entières en passant par une troisième variable auxiliaire. Ceci et en affichant les
deux variables avant et après permutation .
#include
<stdio.h>
#include <stdlib.h>
int main()
{
int a,b,tmp;
printf("Entrez deux entiers a et b:\n");

4
scanf("%d%d",&a,&b);
printf("Avant permutation: a = %d et b = %d.\n",a,b);
tmp=a; a=b; b=tmp;
printf("Apres permutation: a = %d et b = %d.\n",a,b);
return 0; }
Preuve2.2

Exercice 3
1. Ecrire un programme C qui lit en entrée trois entiers et affiche leur
moyenne avec une précision de deux chiffres après la virgule.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b,c;
float moy;
printf("Donnez 3 entiers:\n");
scanf("%d%d%d",&a,&b,&c);
moy=(float)(a+b+c)/3;
printf("La moyenne de ces trois entiers est: %.2f\n",moy);

5
return 0;
}
Preuve3.1

2. Ecrire un programme C qui lit en entrée un caractère alphabétique entre


a et y, qui peut être soit une majuscule ou une minuscule. Et affiche la
lettre qui vient juste après lui dans l'ordre alphabétique.
#include <stdio.h>
#include <stdlib.h>
int main()
{
char lettre;
printf("Donnez une lettre entre 'a' et 'y' ou entre 'A' et 'Y':\n");
scanf("%c",&lettre);
lettre++;
printf("La lettre suivante est: %c.\n",lettre);
return 0;
}
Preuve3.2

6
Exercice 4
Ecrire un programme C qui lit deux réels R1 et R2 qui représentent les rayons
de deux cercles concentriques, et renvoie ensuite l'aire de la surface comprise
entre les deux cercles (surface grise). Remarque: R1 peut être supérieur à R2,
comme il peut lui être inférieur.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
double R1,R2,aire1,aire2,aire;
printf("Donnez les rayons des deux cercles:\n");
scanf("%lf%lf",&R1,&R2);
aire1 = 3.14*R1*R1;
aire2 = 3.14*R2*R2;
aire = fabs(aire1-aire2);
printf("L'aire de la surface entre les deux cercles est: %.4lf\n",aire);
return 0;
}
Preuve4

7
Exercice 5
1. Ecrire un programme C qui lit deux entiers est affiche le plus grand
d'entre eux.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int a,b,max;
printf("Entrez deux entiers:\n");
scanf("%d%d",&a,&b);
max = (a+b+abs(a-b))/2;
printf("Le max de %d et %d est: %d.\n",a,b,max);
return 0;
}
Preuve5.1

8
2. Ecrire un programme C qui trouve pour un réel les deux carrés parfaits
les plus proches qui l'encadrent.
On rappelle qu'un carré parfait est un entier dont la racine carrée est aussi un
entier. Exemple: 9 = 3x3 et 4 = 2x2 sont des carrés parfaits ; or, 5 ne l’est pas.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
double x;
int a,b;
printf("Entrez un reel:\n");
scanf("%lf",&x);
a = (int)floor(sqrt(x));
a = a*a;
b = (int)ceil(sqrt(x));
b = b*b;
printf("%d <= %lf <= %d\n",a,x,b);
return 0;
}

9
Preuve5.2

exercice 6
Ecrire un programme C qui lit une fraction au format a/b où a et b sont deux
entiers, et donne son équivalent décimal avec une précision de quatre chiffres
après la virgule.
Ex: si l'utilisateur entre 3/2, le programme doit afficher: 3/2 = 1.5000
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b;
float d;
printf("Donnez une fraction:\n");
scanf("%d/%d",&a,&b);
d = (float)a/b;
printf("%d/%d = %.4f\n",a,b,d);

return 0;
}
Preuve6

10
Exercice 7
Ecrire un programme C qui lit un entier V représentant un volume en litres. Puis
calcule le nombre de canettes de 33cl que peut remplir en entier une citerne
contenant un volume V de soda.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int v,n;
printf("Entrer le volume de la citerne en litres:\n");
scanf("%d",&v);
n=(int)(v/0.33);
printf("Le nombre de cannettes que peut remplir la citerne est: %d.\n",n);
return 0;
}
Preuve7

11
Exercice 8
Ecrire un programme C qui permet de tracer la forme suivante :
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("--*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*--\n");
printf("--* *--\n");
printf("--* *-*-*-*-* *-*-*-*-* *-*-*-*-* *--\n");
printf("--* *-*-*-*-* *-*-*-*-* *-*-*-*-* *--\n");
printf("--* *-*-*-*-* *-*-*-*-* *-*-*-*-* *--\n");
printf("--* *-*-*-*-* *-*-*-*-* *-*-*-*-* *--\n");
printf("--* *-*-*-*-* *-*-*-*-* *-*-*-*-* *--\n");
printf("--* *--\n");
printf("--*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*--\n");
printf("\n\n");
return 0;
}
Preuve8

12
Exercice 9
1. Ecrire un programme C qui lit un nombre réel et affiche sa partie
fractionnaire.
Exemple : la partie fractionnaire de 3.09 est 0.09.
#include <stdio.h>
#include <stdlib.h>
int main()
{
float a,b;
printf("Entrer un nombre reel:\n");
scanf("%f",&a);
b=a-(int)a;
printf("La partie fractionnaire de %f est %f.\n",a,b);
return 0;
}
Preuve9.1

13
2. Ecrire un programme C qui lit les dimensions (nombres entiers) a, b et c
d’un parallélépipède rectangle puis calcule et affiche sa superficie.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a,b,c,s;
printf("Entrer les dimensions du parallelepipede:\n");
scanf("%d%d%d",&a,&b,&c);
s=2*(a*b+a*c+b*c);
printf("La superficie du parallelepipede est: %d\n",s);
return 0;
}
Preuve9.2

14
Exercice 10
Ecrire un programme C qui lit un entier n. Puis affiche les trois entiers impairs
qui le suivent.
Exemple : pour 5 on affiche 7 9 11, et pour 2 on affiche 3 5 7.
#include <stdio.h> #include <stdlib.h>
int main()
{
int n,m;
printf("Entrer un entier:\n");
scanf("%d",&n); m=((n+1)/2)*2;
printf("Les trois nombres impairs qui suivent %d sont: %d %d
%d.\n",n,m+1,m+3,m+5);
return 0;
}
Preuve10

15
Exercice 11
1. Ecrire un programme C qui permet de dire si un entier est pair ou impair.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a;
printf("Donnez un entier:\n");
scanf("%d",&a);
if(a%2==1) {
printf("%d est impair\n",a);
}
else {
printf("%d est pair\n",a);
}

system("pause");
return 0;
}
Preuve11.1

16
2. Ecrire un programme C qui permet de comparer deux entiers a et b, et
d'afficher selon le cas l'un des messages suivants: a=b, a>b ou a<b.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a,b;
printf("Donnez les deux entiers a comparer:\n");
scanf("%d%d",&a,&b);
if(a==b)
{
printf("%d=%d\n",a,b);
}
else
{
if(a<b)
{
printf("%d<%d\n",a,b);
}
else
{
printf("%d>%d\n",a,b);
}
}
system("pause");
return 0;
}
Preuve11.2

17
Exercice 12:
1. Ecrire un programme C qui lit trois entiers pour les afficher ensuite
dans un ordre croissant.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a,b,c;
printf("Donnez 3 entiers:\n");
scanf("%d%d%d",&a,&b,&c);
if(a>=b && a>=c)
{
if(b>=c)
printf("%d %d %d\n",c,b,a);
else
printf("%d %d %d\n",b,c,a);
}
if(b>=a && b>=c)
{
if(a>=c) printf("%d %d %d\n",c,a,b);
else
printf("%d %d %d\n",a,c,b);
}
if(c>=a && c>=b)
{
if(a>=b)
printf("%d %d %d\n",b,a,c);
else
printf("%d %d %d\n",a,b,c);
}
system("pause");
return 0;
}
Preuve12.1

18
2. Ecrire un programme C qui lit un nombre réel et détermine s’il est entier ou
non.
#include<stdio.h>
#include<stdlib.h>
int main()
{
float x;
printf("Donnez un reel:\n");
scanf("%f",&x);
if(x==(int)x)
printf("%f est un entier.\n",x);
else
printf("%f n'est pas un entier.\n",x);
system("pause");
return 0;
}
Preuve12.2

Exercice 13:
Ecrire un programme C qui lit un caractère et détermine s'il fait partie
des alphabets ou non. Et s'il l'est, dire en plus s’il est une minuscule ou
une majuscule.
#include<stdio.h>

19
#include<stdlib.h>
int main()
{
char c;
printf("Donnez un caractere:\n");
scanf("%c",&c);
if(c>='a' && c<='z')
printf("%c est une alphabet en minuscule.\n",c);
if(c>='A' && c<='Z')
printf("%c est une alphabet en majuscule.\n",c);
if( !(c>='a' && c<='z') && !(c>='A' && c<='Z'))
printf("%c n'est pas une alphabet.\n",c);
system("pause");
return 0;
}
Preuve13

Exercice 14:
Ecrire un programme C qui lit une date au format 15/09/2012 et l'affiche
sous le format suivant: 15-Septembre-2012.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int jour,mois,annee;
printf("Inscrivez une date (Ex: 15/9/2012):\n");
scanf("%d/%d/%d",&jour,&mois,&annee);
if(jour<10) printf("0%d-",jour);

20
else printf("%d-",jour);
switch(mois)
{
case 1: printf("Janvier");
break;
case 2: printf("Fevrier");
break;
case 3: printf("Mars");
break;
case 4: printf("Avril");
break;
case 5: printf("Mai");
break;
case 6: printf("Juin");
break;
case 7: printf("Juillet");
break;
case 8: printf("Aout");
break;
case 9: printf("Septembre");
break;
case 10: printf("Octobre");
break;
case 11: printf("Novembre");
break;
case 12: printf("Decembre");

21
break;
}
printf("-%d\n",annee);
system("pause");
return 0;
}
Preuve14

Exercice 15:
Ecrire un programme C qui lit un entier et dit s'il est un carré parfait ou non. On
rappelle qu'un entier est carré parfait, si sa racine carrée est entière. Ex: les
nombre 1 (1x1), 4 (2x2) et 9 (3x3) sont tous des carrés parfaits.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
float n;
printf("Entrez un entier:\n");
scanf("%f",&n);
if( sqrt(n) == (int)sqrt(n) )

22
printf("%.0f est un carre parfait.\n",n);
else
printf("%.0f n'est pas un carre parfait.\n",n);
system("pause");
return 0;
}
Preuve15

Exercice 16:
Ecrire un programme C qui lit les coordonnées des deux extrémités d'un
segment, et lit ensuite les coordonnées d'un point dans le plan et dit si ce
dernier se trouve ou non sur le segment.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
double x1,y1,x2,y2,a,b;
double dist1,dist2,dist;
printf("Entrez le x1 et y1\n");
scanf("%lf%lf",&x1,&y1);
printf("Entrez le x2 et y2\n");

23
scanf("%lf%lf",&x2,&y2);
printf("Entrez le a et b\n");
scanf("%lf%lf",&a,&b);
dist1 = sqrt( (x1-a)*(x1-a)+(y1-b)*(y1-b) );
dist2 = sqrt( (x2-a)*(x2-a)+(y2-b)*(y2-b) );
dist = sqrt( (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2) );
if( dist == dist1 + dist2 )
printf("Le point est sur le segment.\n");
else
printf("Le point n'est pas sur le segment.\n");
system("pause");
return 0;
}
Preuve16

Exercice 17:
Ecrire un programme C qui lit deux instants dans le format HH:MM:SS, et
affiche un des messages suivants: o Le premier instant vient avant le deuxième;
o Le deuxième instant vient avant le premier; o Il s'agit du même instant.
#include<stdio.h>

24
#include<stdlib.h>
int main()
{
int h1,h2;
int m1,m2;
int s1,s2;
int k=1;
printf("Entrez le premier instant:\n");
scanf("%d:%d:%d",&h1,&m1,&s1);
printf("Entrez le deuxieme instant:\n");
scanf("%d:%d:%d",&h2,&m2,&s2);
if(h1>h2) k=2;
if(h1==h2 && m1>m2) k=2;
if(h1==h2 && m1==m2 && s1>s2) k=2;
if(h1==h2 && m1==m2 && s1==s2) k=0;
switch(k)
{
case 0:
printf("Il s'agit du meme instant.\n");
break;
case 1:
printf("Le premier instant vient avant le deuxieme.\n");
break;
case 2:
printf("Le deuxieme instant vient avant le premier.\n");
}

25
system("pause");
return 0;
}
Preuve17

Exercice 18:
Ecrire un programme C qui affiche d'une manière aléatoire un des jours de la
semaine.
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a;
srand(time(NULL));
a = rand();
a = a%7;
switch(a)
{
case 0:
printf("Lundi\n");

26
break;
case 1: printf("Mardi\n");
break;
case 2: printf("Mercredi\n");
break;
case 3: printf("Jeudi\n");
break;
case 4: printf("Vendredi\n");
break;
case 5: printf("Samedi\n");
break;
case 6: printf("Dimanche\n");
break;
}
system("pause");
return 0;
}
Preuve18

Exercice 11’:
Ecrire un programme C qui lit un nombre impair n et confirme que 32 divise
(n2+3)(n2+7).
#include<stdio.h>
#include<stdlib.h>

27
int main()
{
int n,a;
printf("Entrer un entier impair\n");
scanf("%d",&n);
a=(n*n+3)*(n*n+7);
if(a%32==0)
printf("32 divise (%d^2+3)(%d^2+7)\n",n,n);
else
printf("32 ne divise pas (%d^2+3)(%d^2+7)\n",n,n);
system("pause");
return 0; }
Preuve11’

Exercice 19:
Ecrire un programme C qui lit deux entiers représentant le grand rayon a et le
petit rayon b d’une ellipse. Puis détermine si oui ou non l’aire de cette ellipse
est supérieure ou égale à 100.
#include<stdio.h>
#include<stdlib.h>
int main()
{ int a,b;

28
float aire;
printf("Entrer le grand rayon a: ");
scanf("%d",&a);
printf("Entrer le petit rayon b: ");
scanf("%d",&b);
aire=3.14*a*b;
if(aire>=100)
printf("L'aire de cette ellipse est superieure a 100.\n");
else
printf("L'aire de cette ellipse est inferieure a 100.\n");
system("pause");
return 0;
}
Preuve19

Exercice 20:
Ecrire un programme C qui lit trois entiers qui représentent les longueurs des
côtés d’un triangle, et permet de dire s’il s’agit d’un triangle équilatéral, isocèle
ou scalène.

29
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a,b,c;
printf("Donner les longueurs des 3 cotes:\n");
scanf("%d%d%d",&a,&b,&c);
if(a==b && b==c)
printf("Ce triangle est equilateral.\n");
else
if(a==b || a==c || c==b)
printf("Ce triangle est isocele.\n");
else
printf("Ce triangle est scalene.\n");
system("pause");
return 0;
}
Preuve20

Exercice 21:

30
Ecrire un programme C qui lit un caractère et détermine ensuite s’il est un
chiffre, une lettre de l’alphabet ou un autre type de caractères.
#include<stdio.h>
#include<stdlib.h>
int main()
{ char c;
printf("Saisir un caractere:\n");
scanf("%c",&c);
if((c>='a' && c<='z') || (c>='A' && c<='Z'))
printf("Le caractere '%c' est une lettre.\n",c);
else
if(c>='0' && c<='9')
printf("Le caractere '%c' est un chiffre.\n",c);
else
printf("Le caractere '%c' n'est ni un chiffre ni une lettre.\n",c);
system("pause");
return 0;
}
Preuve21

31
Exercice 22:
Ecrire un programme C qui permet de lire deux nombres réels a et b, puis un
entier n et afficher le résultat de la division de a par b avec une précision de n
(0≤n≤3) chiffres après la virgule.
#include<stdio.h>
#include<stdlib.h>
int main()
{
float a,b;
int n;
printf("Saisir deux nombres reels:\n");
scanf("%f%f",&a,&b);
printf("Entrer un entier inferieur ou egal a 3:\n");
scanf("%d",&n); switch(n)
{
case 0:
printf("Le resultat de la division est: %.0f\n",a/b);
break;
case 1:
printf("Le resultat de la division est: %.1f\n",a/b);
break;
case 2:
printf("Le resultat de la division est: %.2f\n",a/b);
break;
default:
printf("Le resultat de la division est: %.3f\n",a/b);
} system("pause");

32
return 0;
}
Preuve22

Exercice 23:
Ecrire un programme C qui définit un nombre magique (un nombre secret), et
lit des entiers à l'entrée jusqu'à ce que l'utilisateur trouve ce nombre. En lui
indiquant à chaque fois s'il est en dessus ou au-dessous du nombre magique.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int mag,a;
mag=12;
printf("Tentez votre chance:\n");
do{
scanf("%d",&a);
if(a<mag)
printf("Pas encore! essayez un nombre plus grand.\n");

33
if(a>mag)
printf("Pas encore! essayez un nombre plus petit.\n");
if(a==mag)
printf("Bravo! vous avez trouver le nombre magique.\n");
}
while(a!=mag);
system("pause");
return 0;
}
Preuve23

Exercice 24 :
Ecrire un programme C qui lit un entier puis détermine s'il est premier ou non.
On rappelle qu'un entier est dit premier s'il a exactement deux diviseurs
différents; 1 et lui même. Ex: 2, 3, 7, 17, 101 sont tous premiers, et 4, 10, 27 ne
le sont pas
#include<stdio.h>
#include<stdlib.h>

34
int main()
{
int p,i,pr;
printf("Donnez un entier:\n");
scanf("%d",&p);
if(p==0 || p==1)
printf("%d n'est pas premier.\n",p);
else
{
pr=1;
for(i=2;i<p;i++)
{
if(p%i==0) {pr=0; break;}
}
if(pr==1)
printf("%d est premier.\n",p);
else
printf("%d n'est pas premier.\n",p);
}
system("pause");
return 0;
}
Preuve24

35
Exercice 25:
Ecrire un programme C qui lit une série d'entiers positifs inférieurs à 100
terminée par 0. Et qui doit négliger toute entrée strictement supérieure à 100.
Puis calcule et affiche la somme et le max des éléments de cette série.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int som,max,a;
som=0;
max=0;
a=1;
printf("Entrez une serie d'entier, pour finir entrez 0.\n");
while(a!=0)
{
do{
scanf("%d",&a);
if(a>100)
printf("Entrez SVP un entier inferieur ou egal a 100\n");
}

36
while(a>100);
som+=a;
if(a>max) max=a;
}
printf("la somme: %d\n",som);
printf("le max: %d\n",max);
system("pause");
return 0;
}
Preuve25

Exercice 26:
Ecrire un programme C qui lit un entier et l'affiche inversé. On choisira de ne
pas afficher chiffre par chiffre mais de construire l'entier inversé puis l'afficher.
Ex: si l'entrée est 12345 on doit afficher l'entier 54321.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int r,a,b;
printf("Donner un entier positif:\n");
scanf("%d",&a);

37
b=0;
while(a>0)
{
r=a%10;
b=10*b+r;
a=a/10;
}
printf("l'inverse de l'entier donne en entree est %d\n",b);
system("pause");
return 0;
}
Preuve26

Exercice 27:
Ecrire un programme C qui lit un entier puis affiche tous les nombres premiers
qui lui sont inférieurs.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,i,p,ok;
printf("Donnez un entier:\n");

38
scanf("%d",&n);
printf("Les nombres premiers inferieurs a %d sont:\n",n);
for(p=2;p<=n;p++)
{
ok=1;
for(i=2;i<p;i++)
{
if(p%i==0) {ok=0; break;
}
}
if(ok==1) printf("%d ",p);
}
printf("\n");
system("pause");
return 0;
}
Preuve27

Exercice 28:
Ecrire un programme C qui calcule le nième terme de la suite de Fibonacci,
définie comme suit: Un=Un-1+Un-2 où U1=U0=1.

39
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,i,A,B,C;
printf("Entrez un entier:\n");
scanf("%d",&n);
A=1;
B=1;
for(i=2;i<=n;i++)
{
C=B+A;
A=B;
B=C;
}
if(n<=1)
printf("U(%d) = 1.\n",n);
else
printf("U(%d) = %d.\n",n,C);
system("pause");
return 0;
}
Preuve28

40
Exercice 29:
Ecrire un programme C qui utilise le principe de dichotomie pour trouver la
solution de l'équation x3+12x2+1=0 dans l'intervalle [-15,-10] avec une
précision de 0,00001.
#include<stdio.h>
#include<stdlib.h>
int main()
{
float a,b,m,fa,fb,fm;
a=-15;
b=-10;
while(b-a>0.000001)
{
m=a+(b-a)/2;
fa=a*a*a+12*a*a+1;
fb=b*b*b+12*b*b+1;
fm=m*m*m+12*m*m+1;

41
if(fa*fm<=0) b=m;
else
a=m;
}
fa=a*a*a+12*a*a+1;
printf("%.5f %.5f\n",a,fa);
system("pause");
return 0;
}
Preuve29

Exercice 30:
Ecrire un programme C qui permet de reproduire le schéma suivant :
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,a,b,c;
a=0;
for(i=1;i<10;i++)
{
a=a*10+i;

42
b=i+1;
c=a*9+b;
printf("%9d . 9 + %2d = %d\n",a,b,c);
}
system("pause");
return 0;
}
Preuve30

Exercice 31:
Ecrire un programme C qui approxime le nombre π à une précision de 0.00001
en utilisant la formule suivante :
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int i;
double pi,pi2;

43
pi=0;
i=0;
do{
pi2=pi;
if(i%2==1)
pi=pi-4.0/(2*i+1);
else pi=pi+4.0/(2*i+1);
i++;
}
while(fabs(pi-pi2)>0.00001);
printf("pi = %llf (precision 0.00001)\n",pi);
system("pause");
return 0;
}
Preuve31

Exercice 32:
Ecrire un programme C qui permet de calculer les nièmes termes des deux
suites réelles suivantes :

44
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int i,n;
double a,a2,b,b2;
printf("Entrez un entier: ");
scanf("%d",&n);
a=10;
b=30;
for(i=2;i<=n;i++)
{
a2=a;
b2=b;
a=(a2+b2)/2;
b=sqrt(a2+b2);
}
printf("a(%d)=%.2lf b(%d)=%.2lf\n",n,a,n,b);
system("pause");
return 0;
}
Preuve32

45
Exercice 33:
Ecrire un programme C qui lit un entier n, puis n autres entiers positifs dans un
tableau, l'affiche puis calcul la somme, le max, et le min de ses éléments.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int t[100];
int i,n,som,max,min;
printf("Donnez le nombre des elements du tableau:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Donnez l'element %d:\n",i+1);
scanf("%d",&t[i]);
}
som=0;
min=t[0];
max=t[0];

46
for(i=0;i<n;i++)
{
printf("%d ",t[i]);
som+=t[i];
if(t[i]>max)
max=t[i];
if(t[i]<min) min=t[i];
}
printf("\n");
printf("La somme est: %d\n",som);
printf("Le max est: %d\n",max);
printf("Le min est: %d\n",min);
system("pause");
return 0;
}
Preuve33

47
Exercice 34 :
Ecrire un programme C qui lit un entier n, puis n autres éléments dans un
tableau. Et, affiche ce dernier avant et après la suppression de toutes les
occurrences d'un nombre entré par l'utilisateur.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int t[100];
int i,j,n,a;
printf("Donnez le nombre des elements du tableau:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Donnez l'element %d:\t",i+1);
scanf("%d",&t[i]);

48
}
for(i=0;i<n;i++)
printf("%d ",t[i]);
printf("\n");
printf("Donnez l'element a supprimer du tableau:\n");
scanf("%d",&a);
for(i=0;i<n;i++)
{
if(t[i]==a)
{
for(j=i;j<n-1;j++)
t[j]=t[j+1];
n--;
i--;
}
}
for(i=0;i<n;i++)
printf("%d ",t[i]);
printf("\n");
system("pause");
return 0;
}
Preuve34

49
Exercice 35 :
Ecrire un programme C qui lit un entier n. Puis n autres entiers inférieurs à 100,
dans un tableau. Et affiche le nombre d'occurrences de chaque élément du
tableau de la façon suivante : Si le tableau est : 1 2 5 2 1 2, on affiche : 1 est
répété 2fois. 2 est répété 3fois. 5 est répété 1 fois. Pas nécessairement dans un
ordre précis, mais chaque élément ne doit être cité qu’une seule fois.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int t[100],occ[100];
int i,n;
printf("Donnez la taille du tableau:\n");
scanf("%d",&n);
printf("Entrez %d element(s):\n",n);
for(i=0;i<n;i++)
scanf("%d",&t[i]);

50
for(i=0;i<100;i++)
occ[i]=0;
for(i=0;i<n;i++)
occ[t[i]]++;
for(i=0;i<100;i++)
{
if(occ[i]!=0)
printf("%d est repete %d fois.\n",i,occ[i]);
}
system("pause");
return 0;
}
Preuve35

Exercice 36:
Ecrire un programme C qui construit la table de multiplication des entiers entre
1 et 9 puis l'affiche.
#include<stdio.h>
#include<stdlib.h>

51
int main()
{
int t[9][9];
int i,j;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
t[i][j]=(i+1)*(j+1);
}
}
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
printf("%2d ",t[i][j]);
}
printf("\n");
}
system("pause");
return 0;
}
Preuve36

52
Exercice 37:
Ecrire un programme C qui lit un entier n inférieur à 10, et une matrice (tableau
à deux dimensions) carrée nxn. Puis l'affiche et vérifie si tous les entiers entre 1
et n2 y sont présents ou non. Ex: la matrice 3x3 suivante vérifie cette
contrainte.

2531967 4 8
#include<stdio.h>
#include<stdlib.h>
int main()
{
int t[10][10],existe[101];
int i,j,n,k;
printf("Donnez un entier inferieur a 10:\n");
scanf("%d",&n);
printf("Entrez les elements de la matrice:\n");

53
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("t[%d][%d] = ",i,j);
scanf("%d",&t[i][j]);
}
}
for(i=1;i<=n*n;i++)
existe[i]=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",t[i][j]);
existe[t[i][j]]=1;
}
printf("\n");
}
k=1;
for(i=1;i<=n*n;i++)
{
if(existe[i]==0)
{
k=0;
break;

54
}
}
if(k==0)
printf("les entiers de 1 a %d ne sont pas tous dans la matrice.\n",n*n);
else
printf("tous les entiers de 1 a %d se trouvent dans la matrice.\n",n*n);
system("pause");
return 0;
}
Preuve37

Exercice 38:
Ecrire un programme C qui lit un tableau de taille nxm, et cherche tous les
points-col qui s'y trouvent. Un point-col est un élément qui est max sa ligne et
min sur sa colonne.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int t[100][100],min[100][100],max[100][100];
int i,j,k,n,m;
int MAX,MIN;

55
printf("Donnez le nombre de lignes et de colonnes:\n");
scanf("%d%d",&n,&m);
printf("Entrez les element du tableau:\n");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
scanf("%d",&t[i][j]);
min[i][j]=0;
max[i][j]=0;
}
for(i=0;i<n;i++)
{
MAX=t[i][0];
for(j=1;j<m;j++)
{
if(MAX<t[i][j]) MAX=t[i][j];
}
for(k=0;k<m;k++)
if(t[i][k]==MAX) max[i][k]=1;
}
for(j=0;j<m;j++)
{
MIN=t[0][j];
for(i=1;i<n;i++)
if(MIN>t[i][j])
MIN=t[i][j];

56
for(k=0;k<n;k++)
if(t[k][j]==MIN) min[k][j]=1;
}
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
if(min[i][j]==1 && max[i][j]==1)
printf("La position (%d,%d) est un point-col.\n",i,j);
}
system("pause");
return 0;
}
Preuve38

Exercice 39:
Ecrire un programme C qui lit une position (i,j) d'un tableau 8x8, rempli par des
zéros. Et marque toutes les cases des deux diagonales qui passent par cette
position en y mettant des uns.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int t[8][8];

57
int i,j;
int a,b;
for(i=0;i<8;i++)
for(j=0;j<8;j++)
t[i][j]=0;
printf("Entrez une position:\n");
scanf("%d%d",&a,&b);
i=a;
j=b;
while(i>=0 && j>=0)
{
t[i][j]=1;
i--;
j--;
}
i=a;
j=b;
while(i<8 && j<8)
{
t[i][j]=1;
i++;
j++;
}
i=a;
j=b;
while(i>=0 && j<8)

58
{
t[i][j]=1;
i--;
j++;
}
i=a;
j=b;
while(i<8 && j>=0)
{
t[i][j]=1;
i++;
j--;
}
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
printf("%d ",t[i][j]);
printf("\n");
}
system("pause");
return 0;
}
Preuve39

59
Exercice 40:
Ecrire un programme C qui lit un tableau nxn, et vérifie s'il est magique ou non.
Un tableau est dit magique, si la somme des éléments de chaque ligne, de
chaque colonne et de chaque une des deux diagonales est la même. En plus il
doit contenir tous les entiers entre 1 et n2. L'exemple suivant montre un carré
magique de dimension 3x3 :
#include<stdio.h>
#include<stdlib.h>
int main()
{
int t[15][15],v[300];
int i,j,n,som_mag,s;
int mag=1;
printf("Donnez la dimension du carre:\n");
scanf("%d",&n);
printf("Entrez les elements du carre:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&t[i][j]);
som_mag=0;

60
for(i=0;i<n;i++)
som_mag+=t[i][i];
for(i=0;i<n;i++)
{
s=0;
for(j=0;j<n;j++) s+=t[i][j];
if(s!=som_mag){ mag=0; break;}
s=0;
for(j=0;j<n;j++) s+=t[j][i];
if(s!=som_mag){ mag=0; break;}
}
s=0;
for(i=0;i<n;i++)
s+=t[i][n-i-1];
if(s!=som_mag)
mag=0;
if(mag==1)
{
for(i=1;i<=n*n;i++)
v[i]=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
if(v[t[i][j]]==1 || t[i][j]>n*n || t[i][j]<1)
{
mag=0;

61
break;
}
else
v[t[i][j]]=1;
if(mag==0)
break;
}
}
if(mag==1)
printf("Le tableau est un carre magique.\n");
else
printf("Le tableau n'est pas un carre magique.\n");
system("pause");
return 0;
}
Preuve40

Exercice 41:

62
Ecrire un programme C qui lit les dimensions n et m d'un tableau à deux
dimensions, le remplit d'une manière spirale en utilisant les entiers de
l'intervalle 1 à n*m comme indiqué sur le tableau ci-dessous:

#include<stdio.h>
#include<stdlib.h>
int main()
{
int t[15][15];
int i,j,k,n,m;
int a;
printf("Entrez les dimensions du tableau:\n");
scanf("%d%d",&n,&m);
k=1;
a=0;
while(2>0)
{
i=a;
for(j=a;j<=m-a-1;j++)
t[i][j]=k++;
if(k>n*m)
break;
j=m-a-1;
for(i=a+1;i<=n-a-2;i++)
t[i][j]=k++;
i=n-a-1;
for(j=m-a-1;j>=a;j--)

63
t[i][j]=k++;
if(k>n*m)
break;
j=a;
for(i=n-a-2;i>=a+1;i--)
t[i][j]=k++;
a++;
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%4d",t[i][j]);
printf("\n");
}
system("pause");
return 0;
}
Preuve41

Exercice 42:

64
Ecrire un programme C qui lit un tableau de taille nxm, et cherche tous les
points-col qui s'y trouvent. Un point-col est un élément qui est max sa ligne et
min sur sa colonne.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int t[100][100],min[100][100],max[100][100];
int i,j,k,n,m;
int MAX,MIN;
printf("Donnez le nombre de lignes et de colonnes:\n");
scanf("%d%d",&n,&m);
printf("Entrez les element du tableau:\n");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
scanf("%d",&t[i][j]);
min[i][j]=0;
max[i][j]=0;
}
for(i=0;i<n;i++)
{
MAX=t[i][0];
for(j=1;j<m;j++)
{
if(MAX<t[i][j]) MAX=t[i][j];
}

65
for(k=0;k<m;k++)
if(t[i][k]==MAX) max[i][k]=1;
}
for(j=0;j<m;j++)
{
MIN=t[0][j];
for(i=1;i<n;i++)
if(MIN>t[i][j])
MIN=t[i][j];
for(k=0;k<n;k++)
if(t[k][j]==MIN) min[k][j]=1;
}
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
if(min[i][j]==1 && max[i][j]==1)
printf("La position (%d,%d) est un point-col.\n",i,j);
}
system("pause");
return 0;
}
Preuve42

66
Exercice 43:
Ecrire un programme C qui lit un tableau d’entiers puis affiche une des plus
longues séquences croissantes qu’il contient.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int t[100];
int i,j,l,lmax,imax,n;
printf("Entrez le nombre d'elements: ");
scanf("%d",&n);
printf("Entrez les elements du tableau;\n");
for(i=0;i<n;i++)
scanf("%d",&t[i]);
lmax=0;
for(i=0;i<n;i++)
{
j=i+1;
while(j<n && t[j-1]<=t[j])
j++;

67
l=j-i;
if(l>lmax)
{
lmax=l;
imax=i;
}
}
printf("Une des plus longues sequences est:\n");
for(i=imax;i<imax+lmax;i++)
printf("%d ",t[i]);
printf("\n");
system("pause");
return 0;
}
Preuve43

Exercice 44:
Ecrire un programme C qui lit un tableau d’entiers, puis un entier m et déplace
les m premiers éléments du tableau vers la fin de celui-ci. Exemple :
déplacement des trois premiers éléments d’un tableau.
#include<stdio.h>
#include<stdlib.h>

68
int main()
{
int t[100],aux[100];
int i,j,m,n;
printf("Entrez le nombre d'elements: ");
scanf("%d",&n);
printf("Entrez les elements du tableau:\n");
for(i=0;i<n;i++)
scanf("%d",&t[i]);
printf("Entrez le nombre d'elements a deplacer: ");
scanf("%d",&m);
for(i=0;i<m;i++)
aux[i]=t[i];
for(i=m,j=0;i<n;i++,j++)
t[j]=t[i];
for(i=0;i<m;i++,j++)
t[j]=aux[i];
for(i=0;i<n;i++)
printf("%d ",t[i]);
printf("\n");
system("pause");
return 0;
}
Preuve44

69
Exercice 45:
Ecrire un programme C qui effectue la demi-vectorisation d’une matrice
carrée. La demi-vectorisation (vech : half vectorization) d’une matrice carrée
est une opération qui donne un vecteur constitué des éléments du triangle
inférieur, comme montré sur l’exemple suivant :
#include<stdio.h>
#include<stdlib.h>
int main()
{
int M[15][15];
int vech[200];
int i,j,k,n;
printf("Entrez la taille de la matrice carre: ");
scanf("%d",&n);
printf("Entrez les elements de la matrice:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&M[i][j]);
k=0;

70
for(j=0;j<n;j++)
for(i=j;i<n;i++,k++)
vech[k]=M[i][j];
for(i=0;i<k;i++)
printf("|%3d |\n",vech[i]);
system("pause");
return 0;
}
Preuve45

Exercice 46
Ecrire un programme C qui lit deux matrices de mêmes dimensions, et réalise
leur produit de Hadamard. Ce produit est obtenu en multipliant les coefficients
qui occupent les mêmes positions.
Solution
#include<stdio.h>
#include<stdlib.h>
int main()
{
int A[15][15],B[15][15];
int i,j,n,m;
printf("Entrez le nombre de lignes et de colonnes:\n");
scanf("%d%d",&n,&m);

71
printf("Entrez les elements de la la matrice A:\n");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&A[i][j]);
printf("Entrez les elements de la la matrice B:\n");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&B[i][j]);
printf("Le produit da Hadamard de A et B est:\n");
for(i=0;i<n;i++) {
for(j=0;j<m;j++)
printf("%4d",A[i][j]*B[i][j]);
printf("\n");
}
system("pause");
return 0;
}

Preuve 46

72
Exercice 47
Ecrire un programme C qui lit une chaîne de caractères et vérifie si elle est
palindrome ou non. On rappelle qu'une chaîne de caractères est dite
palindrome, si elle se lit de la même manière dans les deux sens. Exemple: non,
touot et 1234321 sont toutes des chaînes de caractères palindromes.
Solution
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char s[100];
int i,j,ok;

73
printf("Donnez une chaine de caracteres:\n");
scanf("%s",s);
ok=1;
for(i=0,j=strlen(s)-1;i<j;i++,j--)
{
if(s[i]!=s[j])
{
ok=0;
break; } }
if(ok==1)
printf("%s est palindrome.\n",s);
else printf("%s n'est pas palindrome.\n",s);
system("pause");
return 0;
}
Preuve 47

Exercice 48:
Ecrire un programme C qui lit deux chaînes de caractères et les affiche dans
l'ordre alphabétique, en utilisant les deux méthodes suivantes:
• En utilisant la fonction strcmp.
#include<stdio.h>
#include <string.h>

74
int main()
{ char chaine[100],chaine1[100];
printf("saisir la premiere chaine de caractere: " );
gets(chaine);
printf("\nsaisir la deuxiemme chaine de caractere: ");
gets(chaine1);
printf("\nles chaines dans l'ordre alphabetique sont:");
if(strcmp(chaine, chaine1)<0){
printf("\n");
puts(chaine);
puts(chaine1);
}else if(strcmp(chaine, chaine1)>0){
printf("\n");
puts(chaine1);
puts(chaine);
}else
printf("\nles chaines %s et %s entrer sont egaux !",chaine,chaine1);
return 0;
}
Preuve48.1

75
• Sans utiliser la fonction strcmp. Par exemple, si on donne en entrée les deux
chaînes suivantes: acb et abcd, le programme doit afficher la chaîne abcd puis
acb.
#include <stdio.h>
#include <string.h>
int main(){
int i;
char chaine1[100],chaine[100];
printf("saisir chaine et chaine1: ");
gets(chaine);
gets(chaine1);
printf("Sans utilisation de la fonction strcmp:\n");
for(i=0;i<strlen(chaine) && i<strlen(chaine1); i++)
{
if(chaine[i]==chaine1[i]) continue;
if(chaine[i]<chaine1[i]) { puts(chaine); puts(chaine1);}
else { puts(chaine1); puts(chaine);}
break;

76
}
if(i==strlen(chaine) )
{
puts(chaine); puts(chaine1);
}
else if(i==strlen(chaine1) )
{
puts(chaine1); puts(chaine);}

return 0;
}
Preuve48.2

Exercice 49:
Ecrire un programme C qui lit deux chaînes de caractères et permute leurs
contenus en utilisant les deux méthodes suivantes : • Avec la fonction strcpy; •
Sans la fonction strcpy.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()

77
{
char s1[100],s2[100],tmp[100],c;
int i;
printf("Donnez deux chaines de caracteres:\n");
gets(s1);
gets(s2);
printf("En utilisant la fonction strcpy:\n");
strcpy(tmp,s1);
strcpy(s1,s2);
strcpy(s2,tmp);
puts(s1);
puts(s2);
printf("Sans utilisation de la fonction strcpy:\n");
for(i=0;i<=strlen(s1) || i<=strlen(s2); i++)
{
c=s1[i];
s1[i]=s2[i];
s2[i]=c;
}
puts(s1);
puts(s2);
system("pause");
return 0;
}
Preuve49

78
Exercice 50:
1. Ecrire un programme C qui lit une chaîne de caractères, et transforme
chaque caractère majuscule en minuscule et vice versa.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char s[100];
int i;
gets(s);
for(i=0;i<strlen(s);i++)
{
if( 'a'<=s[i] && s[i]<='z' )
{
s[i]=s[i]-'a'+'A';
continue;
}
if( 'A'<=s[i] && s[i]<='Z' )
s[i]=s[i]-'A'+'a';

79
}
puts(s);
system("pause");
return 0;
}
Preuve50.1

2. Ecrire un programme C qui lit deux chaînes de caractères et vérifie si la


deuxième est une sous chaîne de la première ou non. Exemple: tout est une
sous chaîne de surtout.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char s[100],ch[100];
int i,j,ok,n,m;
gets(s);
gets(ch);
n=strlen(s);
m=strlen(ch);

80
ok=0;
for(i=0;i<n-m+1;i++)
{
if(s[i]==ch[0])
{
for(j=0;j<m;j++)
if(s[i+j]!=ch[j])
break;
if(j==m) ok=1;
}
if(ok==1)
break;
}
if(ok==1)
printf("'%s' est une sous chaine de '%s'.\n",ch,s);
else
printf("'%s' n'est pas une sous chaine de '%s'.\n",ch,s);
system("pause");
return 0;
}
Preuve50.2

Exercice 51:

81
Ecrire un programme C, qui lit une chaîne de caractères représentant une
phrase, et affiche dans l'ordre alphabétique toutes les lettres qui ne figurent
pas dans cette chaîne de caractères.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char s[100],c;
int t[26],i,j;
printf("Entrez une chaine de caracteres: \n");
gets(s);
for(i=0;i<26;i++)
t[i] = 0;
for(i=0;i<strlen(s);i++)
{
c = s[i];
if( !(c>='a' && c<='z') && !(c>='A' && c<='Z'))
continue;
if(c>='A' && c<='Z')
c = 'a'+(c-'A');
t[(int)(c-'a')] = 1;
}
for(i=0;i<26;i++)
{
if(t[i]==0)
printf(" %c",'a'+i);

82
}
printf("\n");
system("pause");
return 0;
}
Preuve 51

Exercice 52:
1. Ecrire un programme C qui lit une chaîne de caractères et supprime toutes
les occurrences d'un caractère entré par l'utilisateur.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char s[100];
char c;
int i,j;
printf("Entrez une chaine de caracteres:\n");
gets(s);
printf("Entrez le caractere a supprimer: ");

83
scanf("%c",&c);
for(i=0;i<strlen(s);i++)
{
if(s[i]==c)
{
for(j=i;j<strlen(s);j++)
s[j]=s[j+1];
i--;
}
}
puts(s);
system("pause");
return 0;
}
Preuve52.1

2. Ecrire un programme C qui lit une chaîne de caractères puis un ensemble de


caractères et affiche le nombre de fois que chacun d'eux a apparu dans cette
chaîne.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

84
int main()
{
char s[100],ch[100];
int i,j,n,nbr;
printf("Entrez une chaine de caracteres:\n");
gets(s);
printf("Entrez le nombre de caracteres a traiter: ");
scanf("%d",&n);
printf("Entrez les caracteres: ");
for(i=0;i<n;i++)
{
getchar();
scanf("%c",&ch[i]);
}
for(i=0;i<n;i++)
{
nbr = 0;
for(j=0;j<strlen(s);
j++)
{
if(s[j]==ch[i])
nbr++;
}
printf("Le caractere %c est repete %d fois.\n",ch[i],nbr);
}
system("pause");

85
return 0;
}
Preuve52.2

Exercice 53:
Ecrire un programme C qui lit une chaîne de caractères et calcule le nombre
d'occurrences de chacun de ses caractères.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char s[100];
int t[128];
int i,j;
printf("Donnez une chaine de caracteres:\n");
gets(s);
for(i=0;i<128;i++)
t[i]=0;
for(i=0;i<strlen(s);i++)
{

86
j=(int)s[i];
t[j]++;
}
for(i=0;i<128;i++)
{
if(t[i]!=0)
{
printf("Le caractere %c se repete %d fois.\n",(char)i,t[i]);
}
}
system("pause");
return 0;
}
Preuve53

Exercice 54:
Ecrire un programme C qui lit une liste de prénoms puis demande à l'utilisateur
d'entrer une lettre et affiche tous les prénoms commençant par cette lettre.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

87
int main()
{
char t[100][20];
int i,n;
char c;
printf("Donnez le nombre des elements de la liste: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Donnez le prenom numero %d: ",i+1);
scanf("%s",t[i]);
}
printf("Donnez un caractere: ");
getchar();
scanf("%c",&c);
printf("Les prenoms qui commencent par %c sont:\n",c);
for(i=0;i<n;i++)
{
if(t[i][0]==c)
puts(t[i]);
}
system("pause");
return 0;
}
Preuve54

88
Exercice 55:
Ecrire un programme C qui définit une structure point qui contiendra les deux
coordonnées d'un point du plan. Puis lit deux points et affiche la distance entre
ces deux derniers.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
struct point
{
float x;
float y;
};
int main()
{
struct point A,B;
float dist;
printf("Entrez les coordonnees du point A:\n");
scanf("%f%f",&A.x,&A.y);
printf("Entrez les coordonnees du point B:\n");
scanf("%f%f",&B.x,&B.y);

89
dist = sqrt( (A.x-B.x)*(A.x-B.x) + (A.y-B.y)*(A.y-B.y) );
printf("La distance entre les points A et B est: %.2f\n",dist);
system("pause");
return 0;
}
Preuve55

Exercice 56:
Ecrire un programme C qui définit une structure étudiant où un étudiant est
représenté par son nom, son prénom et une note. Lit ensuite une liste
d'étudiants entrée par l'utilisateur et affiche les noms de tous les étudiants
ayant une note supérieure ou égale à 10 sur 20.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct etudiant
{
char nom[20];
char prenom[20];
int note;

90
};
int main()
{
struct etudiant t[100];
int n,i;
printf("Donner le nombre d'etudiants:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("donnez le nom, prenom et la note de l'etudiant %d:\n",i+1);
scanf("%s%s%d",t[i].nom,t[i].prenom,&t[i].note);
}
for(i=0;i<n;i++)
{
if(t[i].note>=10)
printf("%s %s\n",t[i].nom,t[i].prenom);
}
system("pause");
return 0;
}
Preuve56

91
Exercice 57:
Ecrire un programme C, qui lit les noms complets des étudiants et leurs
moyennes dans un tableau de structures. Puis actualise ces moyennes en
ajoutant un bonus de : o 1 point pour les étudiants ayant une note strictement
inférieure à 10. o 0.5 point pour les étudiants ayant une note entre 10 et 15
incluses. N.B.: la structure doit avoir deux éléments: une chaîne de caractères
et un réel.
#include<stdio.h>
#include<stdlib.h>
struct Etudiant
{
char nom[20];
float note;

92
};
int main()
{
struct Etudiant t[100];
int n,i;
printf("Donnez le nombre d'etudiants:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
getchar();
printf("Entrez le nom complet de l'etudiant N%d:\t",i+1);
gets(t[i].nom);
printf("Entrez la note de %s:\t",t[i].nom);
scanf("%f",&t[i].note);
}
printf("\nLes notes avant l'ajout du bonus:\n");
for(i=0;i<n;i++)
printf("%s : %.2f\n",t[i].nom,t[i].note);
for(i=0;i<n;i++)
{
if(t[i].note >= 10 && t[i].note <= 15)
t[i].note+=0.5;
if(t[i].note < 10) t[i].note+=1;
}
printf("\nLes notes apres l'ajout du bonus:\n");
for(i=0;i<n;i++)

93
printf("%s : %.2f\n",t[i].nom,t[i].note);
system("pause");
return 0;
}
Preuve57

Exercice 58:
Ecrire un programme C, qui lit le nom, le prénom et l'âge de plusieurs
personnes dans un tableau de structures, puis insère une nouvelle personne
dans une position entrée par l'utilisateur.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Personne{
char nom[20];

94
char prenom[20];
int age;
};
int main()
{
struct Personne
t[100];
int n,i,k;
printf("Donnez le nombre de personnes a lire:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Entrez le nom de la personne N%d:\t",i+1);
scanf("%s",t[i].nom);
printf("Entrez le prenom de cette personne:\t");
scanf("%s",t[i].prenom);
printf("Entrez son age:\t");
scanf("%d",&t[i].age);
}
printf("\nLe tabeau avant l'insertion:\n");
for(i=0;i<n;i++)
printf("L'age de %s %s est: %d ans.\n",t[i].nom,t[i].prenom,t[i].age);
printf("\Donnez la position d'insertion souhaitee:\n");
scanf("%d",&k);
n++;
for(i=n-1;i>k;i--)

95
{
strcpy(t[i].nom, t[i-1].nom);
strcpy(t[i].prenom, t[i-1].prenom);
t[i].age = t[i-1].age;
}
printf("\nEntrez le nom de la personne a inserer:\t");
scanf("%s",t[k].nom);
printf("Entrez la prenom de cette personne:\t",t[i].nom);
scanf("%s",t[k].prenom);
printf("Entrez son age:\t",t[i].nom);
scanf("%d",&t[k].age);
printf("\nLe tableau apres l'insertion:\n");
for(i=0;i<n;i++)
printf("L'age de %s %s est: %d ans.\n",t[i].nom,t[i].prenom,t[i].age);
system("pause");
return 0;
}
Preuve58

96
Exercice 59:
Ecrire un programme C, qui lit un ensemble de villes avec leur nombre
d'habitants dans un tableau de structures, les trie et les affiche dans l'ordre
croissant des nombres d'habitants.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct ville{
char nom[20];
int nbr;
};
typedef struct
ville Ville;
int main()
{
Ville t[100];
Ville tmp;
int i,j,n;
printf("Donnez le nombre de villes:\t");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Donnez le nom de la ville N %d:\t",i+1);
scanf("%s",t[i].nom);
printf("Donnez le nombre d'habitants de cette ville:\t");
scanf("%d",&t[i].nbr);
}

97
for(i=0;i<n;i++)
printf("-- Le nombre d'habitants de %s est : %d\n",t[i].nom,t[i].nbr);
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(t[j].nbr>t[j+1].nbr)
{
strcpy(tmp.nom,t[j].nom);
tmp.nbr = t[j].nbr;
strcpy(t[j].nom,t[j+1].nom);
t[j].nbr = t[j+1].nbr;
strcpy(t[j+1].nom,tmp.nom);
t[j+1].nbr = tmp.nbr;
}
}
printf("Les villes dans l'ordre croissant du nombre d'habitants:\n");
for(i=0;i<n;i++)
printf("-- Le nombre d'habitants de %s est : %d\n",t[i].nom,t[i].nbr);
system("pause");
return 0;
}
Preuve59

98
Exercice 60:
Ecrire un programme C qui lit un ensemble de personnes avec leurs âges, dans
un tableau de structures, et supprime ensuite toutes celles qui sont âgées de
vingt ans et plus.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef
struct personne{
char nom[20];
int age;
}Personne;
int main()
{
Personne t[100];
int n,i,j;
printf("Donnez le nombre de personnes a lire:\n");
scanf("%d",&n);
for(i=0;i<n;i++)

99
{
getchar();
printf("Entrez le nom complet de la personne N%d:\t",i+1);
gets(t[i].nom);
printf("Entrez son age:\t");
scanf("%d",&t[i].age);
}
printf("\nLe tabeau avant la suppression:\n");
for(i=0;i<n;i++)
printf("L'age de %s est: %d ans.\n",t[i].nom,t[i].age);
for(i=0;i<n;i++)
{
if(t[i].age>=20)
{
for(j=i+1;j<n;j++)
{
strcpy(t[j-1].nom, t[j].nom);
t[j-1].age = t[j].age;
}
n--;
i--;
}
}
printf("\nLe tabeau apres la suppression:\n");
for(i=0;i<n;i++)
printf("L'age de %s est: %d ans.\n",t[i].nom,t[i].age);

100
system("pause");
return 0;
}
Preuve60

Exercice 61:
1. Ecrire un programme C qui définit et utilise une fonction de prototype int
Somme(int,int) qui prend en paramètres deux entiers et renvoie leur somme.
#include<stdio.h>
#include<stdlib.h>
int Somme(int a,int b)
{
int s;
s=a+b;
return s;
}
int main()
{
int Somme(int,int);

101
int a,b,som;
printf("donnez deux entiers\n");
scanf("%d%d",&a,&b);
som=Somme(a,b);
printf("%d + %d = %d\n",a,b,som);
system("pause");
return 0;
}
Preuve61.1

2. Ecrire un programme C qui définit et appelle une fonction bonjour qui affiche
le message Bonjour.
#include<stdio.h>
#include<stdlib.h>
void bonjour()
{
printf("Bonjour\n");
}
int main()

102
{
void bonjour(void);
bonjour();
system("pause");
return 0;
}
Preuve61.2

Exercice 62:
Ecrire un programme C qui détermine le max de quatre entiers à l'aide d'une
fonction Max_4, et qui doit utiliser une autre fonction Max_2 qui trouve le max
de deux entiers
#include<stdio.h>
#include<stdlib.h>
int Max_2(int a,int b)
{
if(a>b)
return a;
return b;
}
int Max_4(int a,int b,int c,int d)
{

103
int Max_2(int,int);
int max1,max2;
max1=Max_2(a,b);
max2=Max_2(c,d);
return Max_2(max1,max2);
}
int main()
{
int Max_4(int,int,int,int);
int a,b,c,d,max;
printf("Entrez quatre entiers:\n");
scanf("%d%d%d%d",&a,&b,&c,&d);
max=Max_4(a,b,c,d);
printf("les max est: %d\n",max);
system("pause");
return 0;
}
Preuve62

Exercice 63:
Ecrire un programme C qui affiche les carrés des éléments d'un tableau
d'entiers en utilisant les deux méthodes suivantes : la première se base sur une
fonction Affiche_Carre qui prends en paramètre le tableau est affiche les carrés

104
de tout ses éléments, et la deuxième utilise une fonction Carre qui affiche le
carré d'un entier entré en paramètre.
#include<stdio.h>
#include<stdlib.h>
void Afficher_Carre(int *p,int n)
{
int i;
for(i=0;i<n;i++)
printf("%d ",p[i]*p[i]);
printf("\n");
}
void Carre(int a)
{
printf("%d ",a*a);
}
int main()
{
void Afficher_Carre(int*,int);
void Carre(int);
int t[100];
int i,n;
printf("Entrez le nombre des elements du tableau:\n");
scanf("%d",&n);
printf("Entrez les elements du tableau:\n");
for(i=0;i<n;i++)
{

105
scanf("%d",&t[i]);
}
printf("En utilisant la fonction Afficher_Carre:\n");
Afficher_Carre(t,n);
printf("En utilisant la fonction Carre:\n");
for(i=0;i<n;i++)
Carre(t[i]);
printf("\n");
system("pause");
return 0;
}
Preuve63

Exercice 64:
Ecrire un programme C qui définit et utilise une fonction Permuter qui permute
les valeurs de deux variables réelles.
#include<stdio.h>
#include<stdlib.h>
void Permuter(float *p,float *q)
{

106
float tmp;
tmp = *p;
*p = *q;
*q = tmp;
}
int main()
{
float a,b;
printf("Entrez deux nombres reels:\n");
scanf("%f%f",&a,&b);
printf("Avant la permutation: a = %f et b = %f\n",a,b);
Permuter(&a,&b);
printf("Apres la permutation: a = %f et b = %f\n",a,b);
system("pause");
return 0;
}
Preuve64

Exercice 65:
Ecrire un programme C, qui définit et utilise une fonction Inserer, qui insère un
entier dans un tableau. L'entier à insérer et la position d'insertion sont lus par
cette fonction même.

107
#include<stdio.h>
#include<stdlib.h>
void Inserer(int *t,int *n)
{
int i,j,a;
printf("Entrez l'entier a inserer:\n");
scanf("%d",&a);
printf("Entrez la position d'insertion:\n");
scanf("%d",&j);
(*n)++;
for(i=*n-1;i>j;i--)
t[i]=t[i-1];
t[j]=a;
}
void Afficher(int *t,int n)
{
int i;
for(i=0;i<n;i++)
printf("%d ",t[i]);
printf("\n"); }
int main()
{
int t[100];
int i,n;
printf("Donnez le nombre des elements du tableau:\n");
scanf("%d",&n);

108
printf("Entrez les elements du tableau:\n");
for(i=0;i<n;i++)
scanf("%d",&t[i]);
printf("Le tableau avant l'insertion:\n");
Afficher(t,n);
Inserer(t,&n);
printf("Le tableau apres l'insertion:\n");
Afficher(t,n);
system("pause");
return 0;
}
Preuve65

Exercice 66 :
Ecrire un programme C qui définit et utilise une fonction de prototype char *
Reserver(int) qui réserve l'espace mémoire, d'une manière dynamique, à une
chaîne de caractères.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char * Reserver(int n)

109
{
char *p;
p=(char *)malloc(n*sizeof(char));
return p;
}
int main()
{
char *s;
int n;
printf("Entrez une taille maximale pour la chaine: ");
scanf("%d",&n);
getchar();
s=Reserver(n);
printf("Entrer une chaine de caracteres:\n");
gets(s);
printf("La chaine de caracteres entree est: ");
puts(s);
free(s);
system("pause");
return 0;
}
Preuve66

110
Exercice 67:
Ecrire un programme C qui définit quatre fonctions pour effectuer les tâches
suivantes :
o Réservation de l'espace mémoire pour un tableau d'entiers dynamique à
deux dimensions ;
o Lecture du tableau;
o Affichage du tableau;
o Libération de l'espace mémoire réservé.
#include<stdio.h>
#include<stdlib.h>
int ** Reserver(int n, int m) {
int **p;
int i;
p=(int **)malloc(n*sizeof(int *));
for(i=0;i<n;i++)
p[i]=(int *)malloc(m*sizeof(int));
return p; }
void Lire(int **p, int n, int m) {
int i,j;

111
printf("Entrez les elements du tableau:\n");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&p[i][j]);
}
void Afficher(int **p, int n, int m)
{
int i,j;
printf("Les elements du tableau:\n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%3d ",p[i][j]);
printf("\n");
}
}
void Liberer(int **p, int n)
{
int i;
for(i=0;i<n;i++)
free(p[i]);
free(p);
}
int main()
{
int **t;

112
int n,m;
int ** Reserver(int,int);
void Lire(int **,int,int);
void Afficher(int **,int,int);
void Liberer(int **,int);
printf("Entrez le nombre de lignes: ");
scanf("%d",&n);
printf("Entrez le nombre de colonnes: ");
scanf("%d",&m);
t=Reserver(n,m);
Lire(t,n,m);
Afficher(t,n,m);
Liberer(t,n);
system("pause");
return 0;
}
Preuve67

Exercice 68:
Ecrire un programme C qui définit et utilise une fonction Trier qui trie, dans un
ordre croissant, les éléments d'un tableau d'entiers.

113
#include<stdio.h>
#include<stdlib.h>
void Trier(int *p, int n)
{
int i,j,tmp;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
if(p[j]>p[j+1])
{
tmp = p[j];
p[j] = p[j+1];
p[j+1] = tmp;
}
}
int main()
{
int i,n;
int t[100];
printf("Donnez le nombre d'elements du tableau: ");
scanf("%d",&n);
printf("Entrez les elements du tableau:\n");
for(i=0;i<n;i++)
scanf("%d",&t[i]);
Trier(t,n);
printf("Le tableau trie:\n");
for(i=0;i<n;i++)

114
printf("%d ",t[i]);
printf("\n");
system("pause");
return 0;
}
Preuve68

Exercice 69:
Ecrire un programme C qui définit une fonction récursive qui calcule la somme
des entiers entre zéro et un nombre passé en paramètre.
#include<stdio.h>
#include<stdlib.h>
int Somme(int n)
{
if(n==0)
return 0;
else
return n+Somme(n-1);
}
int main()
{

115
int n;
printf("Entrez un entier: ");
scanf("%d",&n);
printf("La somme des entiers jusqu'a %d est: %d.\n",n,Somme(n));
system("pause");
return 0;
}
Preuve69

Exercice 70 :
Donner une fonction qui retourne la moyenne, le minimum et le maximum
d’un tableau unidimensionnels ;
#include <stdio.h>

int moy_min_max(int tab[20],int n){


int max,min,som=0,i;
float moy;
max=tab[0]; min=tab[0];
for(i=0;i<n;i++){
if(max<tab[i]){ max=tab[i];
}else if(min>tab[i]){ min=tab[i];}
som += tab[i];
}

116
moy=(float)som/n;
printf("\nla moyenne des elements du tableau est: %.4f\n",moy);
printf("\nle minimun des elements du tableau est: %d et le maximun est %d
",min,max);
}
int main(){
int ta[50];
int i,n;
printf("entrer la taille du tableau: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("entrer tab[%d]: ",i);
scanf("%d",&ta[i]);
}
printf("\n les elements du tableau sont: \n");
for(i=0;i<n;i++)
{
printf(" %d ",ta[i]); }
moy_min_max(ta, n);
return 0;
}
Preuve70

117
Exercice 71 :
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.
#include <stdio.h>
void remplitA(int A[10]){
int i;
for(i=0;i<10;i++){
printf("remplir A[%d]: ",i);
scanf("%d",&A[i]); }
}
void impA(int A[10]){
int i;
for(i=0;i<10;i++){
printf(" %d ",A[i]);}
printf("\n");
int *p=&A[6]; p++;
printf("\n valeur pointer est: %d \n",*p+1);

118
}

int trier(int tab[30],int n){


int i,tmp,j;
for (i=0; i <n; i++) {
j = i;
while (j > 0 && tab[j-1] > tab[j]) {
tmp = tab[j];
tab[j] = tab[j-1];
tab[j-1] = tmp;
j--;} }
for(i=0;i<n;i++){
printf(" %d ",tab[i]);}
}
int main(){
int ta[10];
printf("saisir les elements du tableau !\n");
printf("\n");
remplitA(ta);
printf("\nles elements saisit sont: \n");
impA(ta);
printf("\nle tableau trier est: \n");
trier(ta,10);
return 0;
}
Preuve71

119
Exercice 72 :
1. Ecrire une fonction fois_deux qui multiplie par deux un entier.
2. 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
#include <stdlib.h>
//qu#include <stdio.h>
estion 1 focntion fois_deux
int fois_deux(int n){
return n*2;
}
//question 2
int f(int tab[],int a){
int i;
for(i=0;i<=sizeof(tab);i++)
tab[i]=a+tab[i]; }
int appliquer_tableau(f(int t[], a),int t[],int n){
int i,b;
for(i=0;i<n;i++){
t[i]=f(t,b);}
}

120
int main(){
int n,i,ta[20];
printf("\n saisir la taille du tableau: ");
scanf("%d",&n);
//appel de la fontion fois_deux
printf("\n le double de %d est %d\n",n,fois_deux(n));
for(i=0;i<n;i++){
printf("saisir tableau[%d]: ",i);
scanf("%d",&ta[i]);
}
printf("\nles elements du tableau sont:\n");
for(i=0;i<n;i++)
{
printf(" %d ",ta[i]);
}
appliquer_tableau(f(ta,n),ta, n);

printf("\nles elements du tableau apres la fonction appliquer_tableau sont: \n");

for(i=0;i<n;i++)
{
printf(" %d ",ta[i]);
}
return 0;
}
Preuve72

121
Exercice 73 :
1. Ecrire le programme qui affiche la moyenne d’une suite d’entiers saisie par
l’utilisateur se terminant par zéro. Exemple : l’utilisateur entre 1, puis 5, puis 2,
puis 0 : affiche : 8
#include<stdio.h>

int main()
{
int k,som=0,k1=0;
do{
printf("saisir un entier:");
scanf("%d",&k);
som+=k;k1++;}
while(k!=0);
float Moy=(float)som/k1-1;
printf("la somme de ces entiers est %d et la moyenne est:%.3f",som,Moy);
return 0;
}
Preuve71.1

122
2. Ecrire un programme qui calcule et affiche la distance DIST (type double)
entre deux points A et B du plan dont les coordonnées (XA, YA) et (XB, YB) sont
entrées au clavier comm #include <stdio.h>
#include <math.h>
int main()
{
int XA, YA, XB, YB;
double DIST;
printf("Entrez les coordonnées du point A : XA,YA ");
scanf("%d,%d", &XA, &YA);
printf("Entrez les coordonnées du point B : XB,YB ");
scanf("%d,%d", &XB, &YB);
DIST=sqrt((XB-XA)*(XB-XA)+(YB-YA)*(YB-YA));
printf("La distance entre A(%d,% d) et B(%d, %d) est %lf\n",
XA, YA, XB, YB, DIST);
return 0;
}

123
Preuve73.2

Exercice 74:
Soit les deux matrices carrées d’ordre NxN et MxM.
a. Ecrire un programme qui permet de lire les éléments des deux matrices
et stocker dans des structures de données adaptées. On considère N=50
et M=50
#include <stdio.h>
int main(){
int i,j,n,m;
int mat[50][50],M[50][50];
printf("entrer la dimenssion de la 1er matrice :");
scanf("%d",&n);
//lecture des elements de la matrice
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("entrer mat[%d][%d]:",i,j);
scanf("%d",&mat[i][j]);
}
}
printf("\n");
// affichage des elements a l'ecran
printf("les elements de la matrice %d x %d sont:\n",n,n);
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%3d ",mat[i][j]);
}
printf(" \n");
}

124
printf("entrer la dimenssion de la 2eme matrice !");
scanf("%d",&m);
//lecture des elements de la matrice
for(i=0;i<m;i++){
for(j=0;j<m;j++){
printf("entrer mat[%d][%d]:",i,j);
scanf("%d",&M[i][j]);
}
}
printf("\n");
// affichage des elements a l'ecran
printf("les elements de la matrice %d x %d sont:\n",n,n);
for(i=0;i<m;i++){
for(j=0;j<m;j++){
printf("%3d ",M[i][j]);
}
printf(" \n");
}
return 0;
}
Preuve74.a

b. modifier le programme pour le calculer le déterminant de la première


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

125
int main()
{
int M[50][50];
int i,j,n,k,dis=0;
printf("\nentrer la dimenssion de la 1er matrice: ");
scanf("%d",&n);
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("entrer M[%d][%d]:",i,j);
scanf("%d",&M[i][j]);
}
}
printf("\n");
// affichage des elements a l'ecran
printf("les elements de la matrice 3x3 sont:\n");
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%3d ",M[i][j]);
}
printf(" \n");
}
//calcul du discriminant
for(i=0;i<n;i++)
{ j=1;
if(i!=0){
j=0;
}
k=2;
if(i==2)
{
k=1;
}
int p=pow(-1 , i );
dis = dis + p*((M[0][i])*((M[1][j]*M[2][k])-(M[1][k]*M[2][j])));
}
printf("\n");
printf("le determinant est:%d",dis);

126
return 0;
}
Preuve74.b

c. ajouter une fonction qui prend entrées les deux matrices, calcule et
affiche la somme des deux matrices à l’utilisateur.
#include <stdio.h>
int main(){
int i,j,n,choix,m;
int mat[50][50];
int somat[25][25];
printf("\nentrer le nombre de ligne de la matrice:");
scanf("%d",&n);
printf("\n");
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("entrer mat[%d][%d]:",i,j);
scanf("%d",&mat[i][j]);
}
}
printf("\n");
printf("les elements de la premiere matrice (%d×%d)
sont:\n",n,m);

127
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%3d ",mat[i][j]);
}
printf(" \n");
}
int k,p,a,b;
int M[10][10];
printf("entrer le nombre de ligne de la seconde matrice:");
scanf("%d",&a);
printf("\n");
for(k=0;k<a;k++){
for(p=0;p<a;p++){
printf("entrer M[%d][%d]:",k,p,k,p);
scanf("%d",&M[k][p]);
}
}
printf("\n");
printf("les elements de la seconde matrice (%d×%d) sont:\n",a,b);
for(k=0;k<a;k++){
for(p=0;p<a;p++){
printf("%3d"" ",M[k][p]);
}
printf("\n");
}
//somme des matrices
for(i=0;i<n;i++){
for(j=0;j<n;j++){
somat[i][j]=mat[i][j]+M[i][j];
}
printf("\n");
}
printf("la somme des deux matrices mat et M est:\n");
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%3d ",somat[i][j]);
}

128
printf(" \n");
}
return 0;
}
Preuve74.c

Exercice 75
Ecrire un programme en langage C qui affiche le quotient et le reste de la
division entière de deux nombres entiers entrés au clavier ainsi que le quotient
rationnel de ces nombres.
#include <stdio.h>
main()
{
int A, B;
printf("Introduisez deux nombres entiers : ");
scanf("%d %d", &A, &B);
printf("Division entiere : %d\n", A/B);
printf("Reste : %d\n", A%B);
printf("Quotient rationnel : %f\n", (float)A/B);

129
return 0;
}
Preuve75

Exercice 76
Ecrire un programme en langage C qui affiche la résistance équivalente à trois
résistances R1, R2, R3 (type double), - si les résistances sont branchées en série:
Rsér = R1+R2+R3 - si les résistances sont branchées en parallèle: Rpar =
(R1*R2*R3)/(R1*R2+R1*R3+R2*R3)
#include <stdio.h>
main()
{
double R1, R2, R3, RRES;
printf("Introduisez les valeurs pour R1, R2 et R3 : ");
scanf("%lf %lf %lf", &R1, &R2, &R3);
RRES=R1+R2+R3;
printf("Resistance resultante serielle : %f\n", RRES);
RRES=(R1*R2*R3)/(R1*R2+R1*R3+R2*R3);
printf("Resistance resultante parallele : %f\n", RRES);
return 0;
}
Preuve76

130
Exercice 77
Ecrire un programme en langage C qui calcule et affiche l'aire d'un triangle dont
il faut entrer les longueurs des trois côtés.
Utilisez la formule : S2 = P(P-A)(P-B)(P-C) où A, B, C sont les longueurs des trois
côtés (type int) et P le demi-périmètre du triangle.
#include <stdio.h>
#include <math.h>
main()
{
/* Pour ne pas perdre de précision lors de la division, */
/* déclarons P comme rationnel. */
int A, B, C;
float P;
printf("Introduisez les valeurs pour A, B et C : ");
scanf("%d %d %d", &A, &B, &C);
/* En forçant la conversion de A, les autres opérandes */
/* sont converties automatiquement. */
P=((float)A+B+C)/2;
printf("Surface du triangle S = %f\n",sqrt(P*(P-A)*(P-B)*(P-C)));
return 0;
}

131
Preuve77

Exercice 78 :
Ecrire un programme en langage C qui calcule la somme de quatre nombres du
type int entrés au clavier.
#include <stdio.h>
main()
{
int A;
long SOM;
SOM = 0;
printf("Entrez le premier nombre : ");
scanf("%d", &A);
SOM+=A;
printf("Entrez le deuxième nombre : ");
scanf("%d", &A);
SOM+=A;
printf("Entrez le troisième nombre : ");
scanf("%d", &A);
SOM+=A;

132
printf("Entrez le quatrième nombre : ");
scanf("%d", &A);
SOM+=A;
printf("La somme des nombres entrés est %ld\n", SOM);
return 0;
}
Preuve78

Exercice 79 :
Ecrire un programme en langage C qui calcule et affiche la distance DIST (type
double) entre deux points A et B du plan dont les coordonnées (XA, YA) et (XB,
YB) sont entrées au clavier comme entiers.
#include <stdio.h>
#include <math.h>
main()
{
int XA, YA, XB, YB;
double DIST;
/* Attention: La chaîne de format que nous utilisons */
/* s'attend à ce que les données soient séparées par */

133
/* une virgule lors de l'entrée. */
printf("Entrez les coordonnées du point A : XA,YA ");
scanf("%d,%d", &XA, &YA);
printf("Entrez les coordonnées du point B : XB,YB ");
scanf("%d,%d", &XB, &YB);
DIST=sqrt(pow(XA-XB,2)+pow(YA-YB,2));
printf("La distance entre A(%d,% d) et B(%d, %d) est %.2f\n",
XA, YA, XB, YB, DIST);
return 0;
}
Preuve79

Exercice 80:
Ecrire un programme en langage C qui lit un caractère au clavier et affiche le
caractère ainsi que son code numérique.
#include <stdio.h>
main()
{
int C;
printf("Introduire un caractère suivi de 'Enter'\n");
C = getchar();
printf("Le caractère %c a le code ASCII %d\n", C, C);
return 0;

134
}
Preuve80

Exercice 81:
Ecrivez un programme en langage C qui lit trois valeurs entières (A, B et C) au
clavier et qui affiche la plus grande des trois valeurs, en utilisant :
a) if – else et une variable d'aide MAX
#include <stdio.h>
main()
{
int A, B, C;
int MAX;
printf("Introduisez trois nombres entiers :");
scanf("%i %i %i", &A, &B, &C);
if (A>B)
MAX=A;
else
MAX=B;
if (C>MAX)
MAX=C;
printf("La valeur maximale est %i\n", MAX);

135
return 0;
}
Preuve81.a

b) if - else if - ... – else sans variable d'aide


#include <stdio.h>
main()
{
int A, B, C;
printf("Introduisez trois nombres entiers :");
scanf("%i %i %i", &A, &B, &C);
printf("La valeur maximale est ");
if (A>B && A>C)
printf("%i\n",A);
else if (B>C)
printf("%i\n",B);
else
printf("%i\n",C);
return 0;
}
Preuve81.b

136
c) les opérateurs conditionnels et une variable d'aide MAX
#include <stdio.h>
main()
{
int A, B, C;
int MAX;
printf("Introduisez trois nombres entiers :");
scanf("%i %i %i", &A, &B, &C);
MAX = (A>B) ? A : B;
MAX = (MAX>C) ? MAX : C;
printf("La valeur maximale est %i\n", MAX);
return 0;
}
Preuve81.c

d) les opérateurs conditionnels sans variable d'aide

137
#include <stdio.h>
main()
{
int A, B, C;
printf("Introduisez trois nombres entiers :");
scanf("%i %i %i", &A, &B, &C);
printf("La valeur maximale est %i\n",(A>((B>C)?B:C)) ? A : ((B>C)?B:C));
return 0;
}
Preuve81.d

Exercice 82:
Écrivez un programme en langage C qui lit trois valeurs entières (A, B et C) au
clavier. Triez les valeurs A, B et C par échanges successifs de manière à obtenir :
val(A) val(B) val(C) Affichez les trois valeurs.
#include <stdio.h>
main()
{
/* Tri par ordre décroissant de trois entiers
en échangeant les valeurs
*/
int A, B, C, AIDE;
printf("Introduisez trois nombres entiers :");

138
scanf("%i %i %i", &A, &B, &C);
printf("Avant le tri : \tA = %i\tB = %i\tC = %i\n", A, B, C);
/* Valeur maximale -> A */
if (A<B)
{
AIDE = A;
A = B;
B = AIDE;
}
if (A<C)
{
AIDE = A;
A = C;
C = AIDE;
}
/* trier B et C */
if (B<C)
{
AIDE = B;
B = C;
C = AIDE;
}
printf("Après le tri : \tA = %i\tB = %i\tC = %i\n", A, B, C);
return 0;
}
Preuve82

139
Exercice 83:
Ecrivez un programme en langage C qui lit deux valeurs entières (A et B) au
clavier et qui affiche le signe du produit de A et B sans faire la multiplication.
#include <stdio.h>
main()
{
/* Afficher le signe du produit de deux entiers sans
faire la multiplication
*/
int A, B;
printf("Introduisez deux nombres entiers :");
scanf("%i %i", &A, &B);
if ((A>0 && B>0) || (A<0 && B<0))
printf("Le signe du produit %i * %i est positif\n", A, B);
else if ((A<0 && B>0) || (A>0 && B<0))
printf("Le signe du produit %i * %i est négatif\n", A, B);
else
printf("Le produit %i * %i est zéro\n", A, B);
return 0;
}

140
Preuve83

Exercice 84:
Ecrivez un programme en langage C qui lit deux valeurs entières (A et B) au
clavier et qui affiche le signe de la somme de A et B sans faire l'addition.
Utilisez la fonction fabs de la bibliothèque<math.h>.
#include <stdio.h>
#include <math.h>
main()

{
/* Afficher le signe de la somme de deux entiers sans
faire l'addition
*/
int A, B;
printf("Introduisez deux nombres entiers :");
scanf("%i %i", &A, &B);
if ((A>0 && B>0) || (A<0 && B>0 && fabs(A)<fabs(B))
|| (A>0 && B<0 && fabs(A)>fabs(B)))
printf("Le signe de la somme %i + %i est positif\n",A,B);
else if ((A<0 && B<0) || (A<0 && B>0 && fabs(A)>fabs(B))
|| (A>0 && B<0 && fabs(A)<fabs(B)))
printf("Le signe de la somme %i + %i est négatif\n",A,B);

141
else
printf("La somme %i + %i est zéro\n", A, B);
return 0;
}
Preuve84

Exercice 85:
Ecrivez un programme en langage C qui calcule les solutions réelles d'une
équation du second degréax2+bx+c = 0.
#include <stdio.h>
#include <math.h>
main()
{
/* Calcul des solutions réelles d'une équation du second degré */
int A, B, C;
double D; /* Discriminant */
printf("Calcul des solutions réelles d'une équation du second \n");
printf("degré de la forme ax^2 + bx + c = 0 \n\n");
printf("Introduisez les valeurs pour a, b, et c : ");
scanf("%i %i %i", &A, &B, &C);

/* Calcul du discriminant b^2-4ac */


D = pow(B,2) - 4.0*A*C;

142
/* Distinction des différents cas */
if (A==0 && B==0 && C==0) /* 0x = 0 */
printf("Tout réel est une solution de cette équation.\n");
else if (A==0 && B==0) /* Contradiction: c # 0 et c = 0 */
printf("Cette équation ne possède pas de solutions.\n");
else if (A==0) /* bx + c = 0 */
{
printf("La solution de cette équation du premier degré est :\n");
printf(" x = %.4f\n", (double)C/B);
}
else if (D<0) /* b^2-4ac < 0 */
printf("Cette équation n'a pas de solutions réelles.\n");
else if (D==0) /* b^2-4ac = 0 */
{
printf("Cette équation a une seule solution réelle :\n");
printf(" x = %.4f\n", (double)-B/(2*A));
}
else /* b^2-4ac > 0 */
{
printf("Les solutions réelles de cette équation sont :\n");
printf(" x1 = %.4f\n", (-B+sqrt(D))/(2*A));
printf(" x2 = %.4f\n", (-B-sqrt(D))/(2*A));
}
return 0;
}
Preuve85

143
Exercice 86:
Ecrivez un programme en langage C qui lit N nombres entiers au clavier et qui
affiche leur somme, leur produit et leur moyenne. Choisissez un type approprié
pour les valeurs à afficher. Le nombre N est à entrer au clavier. Résolvez ce
problème,
a) en utilisant while,
#include <stdio.h>
main()
{
int N; /* nombre de données */
int NOMB; /* nombre courant */
int I; /* compteur */
long SOM; /* la somme des nombres entrés */
double PROD; /* le produit des nombres entrés */

printf("Nombre de données : ");


scanf("%d", &N);

SOM=0;
PROD=1;
I=1;

144
while(I<=N)
{
printf("%d. nombre : ", I);
scanf("%d", &NOMB);
SOM += NOMB;
PROD *= NOMB;
I++;
}

printf("La somme des %d nombres est %ld \n", N, SOM);


printf("Le produit des %d nombres est %.0f\n", N, PROD);
printf("La moyenne des %d nombres est %.4f\n", N, (float)SOM/N);
return 0;
}
Preuve86.a

b) en utilisant do - while,
#include <stdio.h>
main()
{
int N; /* nombre de données */

145
int NOMB; /* nombre courant */
int I; /* compteur */
long SOM; /* la somme des nombres entrés */
double PROD; /* le produit des nombres entrés */

printf("Nombre de données : ");


scanf("%d", &N);

SOM=0;
PROD=1;
I=1;
do
{
printf("%d. nombre : ", I);
scanf("%d", &NOMB);
SOM += NOMB;
PROD *= NOMB;
I++;
}
while(I<=N);
printf("La somme des %d nombres est %ld \n", N, SOM);
printf("Le produit des %d nombres est %.0f\n", N, PROD);
printf("La moyenne des %d nombres est %.4f\n", N, (float)SOM/N);
return 0;
}
Preuve86.b

146
c) en utilisant for.
#include <stdio.h>
main()
{
int N; /* nombre de données */
int NOMB; /* nombre courant */
int I; /* compteur */
long SOM; /* la somme des nombres entrés */
double PROD; /* le produit des nombres entrés */

printf("Nombre de données : ");


scanf("%d", &N);

for (SOM=0, PROD=1, I=1 ; I<=N ; I++)


{
printf("%d. nombre : ", I);
scanf("%d", &NOMB);
SOM += NOMB;
PROD *= NOMB;
}

147
printf("La somme des %d nombres est %ld \n", N, SOM);
printf("Le produit des %d nombres est %.0f\n", N, PROD);
printf("La moyenne des %d nombres est %.4f\n", N, (float)SOM/N);
return 0;
}
Preuve86.c

d) Laquelle des trois variantes est la plus naturelle pour ce problème?


La structure for est la plus compacte et celle qui exprime le mieux l'idée de
l'algorithme. D'autre part, elle permet d'intégrer très confortablement
l'initialisation et l'incrémentation des variables dans la structure.
Exercice 87:
Calculez par des soustractions successives le quotient entier et le reste de la
division entière de deux entiers entrés au clavier.
#include <stdio.h>
main()
{
int NUM; /* numérateur de la division entière */
int DEN; /* dénominateur de la division entière */
int DIV; /* résultat de la division entière */
int RES; /* reste de la division entière */

148
printf("Introduisez le numérateur : ");
scanf("%d", &NUM);
printf("Introduisez le dénominateur : ");
scanf("%d", &DEN);

RES=NUM;
DIV=0;
while(RES>=DEN)
{
RES-=DEN;
DIV++;
}

/* ou mieux encore : */
/*
for (RES=NUM, DIV=0 ; RES>=DEN ; DIV++)
RES-=DEN;
*/

printf(" %d divisé par %d est %d reste %d\n", NUM, DEN, DIV, RES);
return 0;
}
Preuve87

149
Exercice 88:
Calculez la factorielle N! = 1*2*3*...*(N-1)*N d'un entier naturel N en
respectant que 0!=1.
a) Utilisez while,
#include <stdio.h>
main()
{
int N; /* La donnée */
int I; /* Le compteur */
double FACT; /* La factorielle N! - Type double à */
/* cause de la grandeur du résultat. */

do
{
printf("Entrez un entier naturel : ");
scanf("%d", &N);
}
while (N<0);

/* a */
/* Pour N=0, le résultat sera automatiquement 0!=1 */

150
I=1;
FACT=1;
while (I<=N)
{
FACT*=I;
I++;
}

printf ("%d! = %.0f\n", N, FACT);


return 0;
}
Preuve88.a

b) Utilisez for.
#include <stdio.h>
main()
{
int N; /* La donnée */
int I; /* Le compteur */
double FACT; /* La factorielle N! - Type double à */
/* cause de la grandeur du résultat. */

do

151
{
printf("Entrez un entier naturel : ");
scanf("%d", &N);
}
while (N<0);
for (FACT=1.0, I=1 ; I<=N ; I++)
FACT*=I;

printf ("%d! = %.0f\n", N, FACT);


return 0;
}
Preuve88.b

Exercice 89:
Calculez par multiplications successives XN de deux entiers naturels X et N
entrés au clavier.
#include <stdio.h>
main()
{
int X, N; /* Les données */
int I; /* Le compteur */
double RESU; /* Type double à cause de la */

152
/* grandeur du résultat. */

do
{
printf("Entrez l'entier naturel X : ");
scanf("%d", &X);
}
while (X<0);
do
{
printf("Entrez l'exposant N : ");
scanf("%d", &N);
}
while (N<0);

/* Pour N=0, le résultat sera automatiquement X^0=1 */


for (RESU=1.0, I=1 ; I<=N ; I++)
RESU*=X;

/* Attention: Pour X=0 et N=0 , 0^0 n'est pas défini */


if (N==0 && X==0)
printf("zéro exposant zéro n'est pas défini !\n");
else
printf("Résultat : %d ^ %d = %.0f\n", X, N, RESU);
return 0;
}

153
Preuve89

Exercice 90:
Calculez la somme, le produit et la moyenne d'une suite de chiffres non nuls
entrés au clavier, sachant que la suite est terminée par zéro. Retenez
seulement les chiffres (0, 1 ... 9) lors de l'entrée des données et effectuez un
signal sonore si les données sortent de ce domaine.
#include <stdio.h>
main()
{
int X; /* Le chiffre courant */
int N=0; /* Le compteur des données */
int SOM=0; /* La somme actuelle */
long PROD=1; /* Le produit actuel - Type long à */
/* cause de la grandeur du résultat. */

do
{
/* Saisie des données (pour perfectionnistes) */
printf("Entrez le %d%s chiffre : ", (N+1), (N)?"e":"er");
scanf("%d", &X);

154
if (X<0||X>9)
printf("\a");
else if (X)
{
N++;
SOM+=X;
PROD*=X;
}
else if (!X && N>0)
{/* Seulement si au moins un chiffre a été accepté */
printf("La somme des chiffres est %d \n", SOM);
printf("Le produit des chiffres est %ld\n", PROD);
printf("La moyenne des chiffres est %f \n", (float)SOM/N);
}
}
while (X);
return 0;
}
Preuve90

155
Exercice 91:
Calculez le nombre lu à rebours d'un nombre positif entré au clavier en
supposant que le fichier d'entrée standard contient une suite de chiffres non
nuls, terminée par zéro (Contrôlez s'il s'agit vraiment de chiffres). Exemple:
Entrée: 1 2 3 4 0 Affichage: 4321
#include <stdio.h>
main()
{
int X; /* Le chiffre courant */
int N=0; /* Le compteur des décimales */
long VALD=1; /* Valeur de la position décimale courante */
long NOMB=0; /* Le nombre résultat */
do
{
printf("Entrez le %d%s chiffre : ", (N+1), (N)?"e":"er");
scanf("%d", &X);

if (X<0||X>9)
printf("\a");

156
else if (X)
{
NOMB += VALD*X;
N++;
VALD *= 10;
}
else
printf("La valeur du nombre renversé est %ld\n", NOMB);
}
while (X);
return 0;
}
Preuve91

Exercice 92 :
Calculez le nombre lu à rebours d'un nombre positif entré au clavier en
supposant que le fichier d'entrée standard contient le nombre à inverser.
Exemple: Entrée: 1234 Affichage: 4321
#include <stdio.h>

157
main()
{
int NOMB; /* Le nombre à inverser */
int NINV; /* Le nombre inversé */
/* Attention: en utilisant le type int, il est impossible */
/* d'inverser correctement des nombres comme 10033 ... */
do
{
printf("Entrez un nombre positif (<10000) : ", NOMB);
scanf("%d", &NOMB);
}
while (NOMB<0 || NOMB>9999);

NINV=0;
while(NOMB>0)
{
NINV *= 10;
NINV += NOMB%10;
NOMB /= 10;
}

/* Autre possibilité : */
/* for (NINV=0 ; NOMB>0 ; NOMB/=10)
NINV = NINV*10 + NOMB%10;
*/
printf("Le nombre 'inversé' est : %d\n", NINV);

158
return 0;
}
Preuve92

Exercice 93 :
Calculez le P.G.C.D. de deux entiers naturels entrés au clavier en utilisant
l'algorithme d'EUCLIDE.
#include <stdio.h>
main()
{
int A, B; /* données */
int X, Y, RESTE; /* var. d'aide pour l'algorithme d'Euclide */

do
{
printf("Entrer l'entier A (non nul) : ");
scanf("%d", &A);
}
while(!A);
do

159
{
printf("Entrer l'entier B (non nul) : ");
scanf("%d", &B);
}
while(!B);

for (RESTE=A, X=A, Y=B ; RESTE ; X=Y, Y=RESTE)


RESTE = X%Y;

printf("Le PGCD de %d et de %d est %d\n", A, B, X);


return 0;
}
Preuve93

Exercice 94 :
Ecrire un programme en langage C qui lit la dimension N d'un tableau T du type
int(dimension maximale: 50 composantes), remplit le tableau par des valeurs
entrées au clavier et affiche le tableau. Calculer et afficher ensuite la somme
des éléments du tableau.
#include <stdio.h>
main()
{
/* Déclarations */
int T[50]; /* tableau donné */

160
int N; /* dimension */
int I; /* indice courant */
long SOM; /* somme des éléments - type long à cause */
/* de la grandeur prévisible du résultat. */

/* Saisie des données */


printf("Dimension du tableau (max.50) : ");
scanf("%d", &N );
for (I=0; I<N; I++)
{
printf("Elément %d : ", I);
scanf("%d", &T[I]);
}
/* Affichage du tableau */
printf("Tableau donné :\n");
for (I=0; I<N; I++)
printf("%d ", T[I]);
printf("\n");
/* Calcul de la somme */
for (SOM=0, I=0; I<N; I++)
SOM += T[I];
/* Edition du résultat */
printf("Somme de éléments : %ld\n", SOM);
return 0;
}
Preuve94

161
Exercice 95 :
Ecrire un programme en langage C qui lit la dimension N d'un tableau T du type
int(dimension maximale: 50 composantes), remplit le tableau par des valeurs
entrées au clavier et affiche le tableau. Effacer ensuite toutes les occurrences
de la valeur 0 dans le tableau T et tasser les éléments restants. Afficher le
tableau résultant.
#include <stdio.h>
main()
{
/* Déclarations */
int T[50]; /* tableau donné */
int N; /* dimension */
int I,J; /* indices courants */

/* Saisie des données */


printf("Dimension du tableau (max.50) : ");
scanf("%d", &N );
for (I=0; I<N; I++)
{

162
printf("Elément %d : ", I);
scanf("%d", &T[I]);
}
/* Affichage du tableau */
printf("Tableau donné : \n");
for (I=0; I<N; I++)
printf("%d ", T[I]);
printf("\n");
/* Effacer les zéros et comprimer : */
/* Copier tous les éléments de I vers J et */
/* augmenter J pour les éléments non nuls. */
for (I=0, J=0 ; I<N ; I++)
{
T[J] = T[I];
if (T[I]) J++;
}
/* Nouvelle dimension du tableau ! */
N = J;
/* Edition des résultats */
printf("Tableau résultat :\n");
for (I=0; I<N; I++)
printf("%d ", T[I]);
printf("\n");
return 0;
}
Preuve95

163
Exercice 96:
Ecrire un programme en langage C qui lit la dimension N d'un tableau T du type
int(dimension maximale: 50 composantes), remplit le tableau par des valeurs
entrées au clavier et affiche le tableau.
Ranger ensuite les éléments du tableau T dans l'ordre inverse sans utiliser de
tableau d'aide.
Afficher le tableau résultant.
Idée: Echanger les éléments du tableau à l'aide de deux indices qui parcourent
le tableau en commençant respectivement au début et à la fin du tableau et qui
se rencontrent en son milieu.

#include <stdio.h>
main()
{
/* Déclarations */
int T[50]; /* tableau donné */
int N; /* dimension */
int I,J; /* indices courants */
int AIDE; /* pour l'échange */

/* Saisie des données */

164
printf("Dimension du tableau (max.50) : ");
scanf("%d", &N );
for (I=0; I<N; I++)
{
printf("Elément %d : ", I);
scanf("%d", &T[I]);
}
/* Affichage du tableau */
printf("Tableau donné : \n");
for (I=0; I<N; I++)
printf("%d ", T[I]);
printf("\n");
/* Inverser le tableau */
for (I=0, J=N-1 ; I<J ; I++,J--)
/* Echange de T[I] et T[J] */
{
AIDE = T[I];
T[I] = T[J];
T[J] = AIDE;
}
/* Edition des résultats */
printf("Tableau résultat :\n");
for (I=0; I<N; I++)
printf("%d ", T[I]);
printf("\n");
return 0;

165
}
Preuve96

Exercice 97 :
Ecrire un programme en langage C qui lit la dimension N d'un tableau T du
type int(dimension maximale: 50 composantes), remplit le tableau par des
valeurs entrées au clavier et affiche le tableau. Copiez ensuite toutes les
composantes strictement positives dans un deuxième tableau TPOS et toutes
les valeurs strictement négatives dans un troisième tableau TNEG. Afficher les
tableaux TPOS et TNEG.
#include <stdio.h>
main()
{
/* Déclarations */
/* Les tableaux et leurs dimensions */
int T[50], TPOS[50], TNEG[50];
int N, NPOS, NNEG;
int I; /* indice courant */

/* Saisie des données */


printf("Dimension du tableau (max.50) : ");
scanf("%d", &N );

166
for (I=0; I<N; I++)
{
printf("Elément %d : ", I);
scanf("%d", &T[I]);
}
/* Affichage du tableau */
printf("Tableau donné :\n");
for (I=0; I<N; I++)
printf("%d ", T[I]);
printf("\n");
/* Initialisation des dimensions de TPOS et TNEG */
NPOS=0;
NNEG=0;
/* Transfer des données */
for (I=0; I<N; I++)
{ if (T[I]>0) {
TPOS[NPOS]=T[I];
NPOS++;
}
if (T[I]<0) {
TNEG[NNEG]=T[I];
NNEG++;
}
}
/* Edition du résultat */
printf("Tableau TPOS :\n");

167
for (I=0; I<NPOS; I++)
printf("%d ", TPOS[I]);
printf("\n");
printf("Tableau TNEG :\n");
for (I=0; I<NNEG; I++)
printf("%d ", TNEG[I]);
printf("\n");
return 0;
}
Preuve97

Exercice 98 :
Ecrire un programme en langage C qui lit les dimensions L et C d'un tableau T à
deux dimensions du type int (dimensions maximales: 50 lignes et 50 colonnes).
Remplir le tableau par des valeurs entrées au clavier et afficher le tableau ainsi
que la somme de tous ses éléments.
#include <stdio.h>
main()
{
/* Déclarations */

168
int T[50][50]; /* tableau donné */
int L, C; /* dimensions */
int I, J; /* indices courants */
long SOM; /* somme des éléments - type long à cause */
/* de la grandeur prévisible du résultat. */

/* Saisie des données */


printf("Nombre de lignes (max.50) : ");
scanf("%d", &L );
printf("Nombre de colonnes (max.50) : ");
scanf("%d", &C );
for (I=0; I<L; I++)
for (J=0; J<C; J++)
{
printf("Elément[%d][%d] : ",I,J);
scanf("%d", &T[I][J]);
}
/* Affichage du tableau */
printf("Tableau donné :\n");
for (I=0; I<L; I++)
{
for (J=0; J<C; J++)
printf("%7d", T[I][J]);
printf("\n");
}
/* Calcul de la somme */

169
for (SOM=0, I=0; I<L; I++)
for (J=0; J<C; J++)
SOM += T[I][J];
/* Edition du résultat */
printf("Somme des éléments : %ld\n", SOM);
return 0;
}
Preuve98

Exercice 99 :
Ecrire un programme en langage C qui lit les dimensions L et C d'un tableau T à
deux dimensions du type int (dimensions maximales: 50 lignes et 50 colonnes).
Remplir le tableau par des valeurs entrées au clavier et afficher le tableau ainsi
que la somme de chaque ligne et de chaque colonne en n'utilisant qu'une
variable d'aide pour la somme.
printf("\n");
}
/* Calcul et affichage de la somme des lignes */
for (I=0; I<L; I++)
{
for (SOM=0, J=0; J<C; J++)

170
SOM += T[I][J];
printf("Somme - ligne %d : %ld\n",I,SOM);
}
/* Calcul et affichage de la somme des colonnes */
for (J=0; J<C; J++)
{
for (SOM=0, I=0; I<L; I++)
SOM += T[I][J];
printf("Somme - colonne %d : %ld\n",J,SOM);
}
return 0;
}
Preuve99

Exercice 100 :

171
Ecrire un programme en langage C qui transfère un tableau M à deux
dimensions L et C (dimensions maximales: 10 lignes et 10 colonnes) dans un
tableau V à une dimension L*C. Exemple:
/ \ |abcd| / \ | e f g h | ==> | a b c d e f g
hijkl| |ijkl | \ / \ /
#include <stdio.h>
main()
{
/* Déclarations */
int M[10][10]; /* tableau à 2 dimensions */
int V[100]; /* tableau à 1 dimension */
int L, C; /* dimensions */
int I, J; /* indices courants */

/* Saisie des données */


printf("Nombre de lignes (max.10) : ");
scanf("%d", &L );
printf("Nombre de colonnes (max.10) : ");
scanf("%d", &C );
for (I=0; I<L; I++)
for (J=0; J<C; J++)
{
printf("Elément[%d][%d] : ",I,J);
scanf("%d", &M[I][J]);
}
/* Affichage du tableau 2-dim */
printf("Tableau donné :\n");

172
for (I=0; I<L; I++)
{
for (J=0; J<C; J++)
printf("%7d", M[I][J]);
printf("\n");
}
/* Transfer des éléments ligne par ligne */
for (I=0; I<L; I++)
for (J=0; J<C; J++)
V[I*C+J] = M[I][J];
/* Affichage du tableau 1-dim */
printf("Tableau résultat : ");
for (I=0; I<L*C; I++)
printf("%d ", V[I]);
printf("\n");
return 0;
}
Preuve100

Exercice 101:

173
Ecrire un programme en langage C qui calcule le produit scalaire de deux
vecteurs d'entiers U et V (de même dimension).
#include <stdio.h>
main()
{
/* Déclarations */
int U[50],V[50]; /* tableau donné */
int N; /* dimension */
int I; /* indice courant */
long PS; /* produit scalaire */
/* Saisie des données */
printf("Dimension du tableau (max.50) : ");
scanf("%d", &N );
printf("** Premier tableau**\n", I);
for (I=0; I<N; I++)
{
printf("Elément %d : ", I);
scanf("%d", &U[I]);
}
printf("** Deuxième tableau**\n", I);
for (I=0; I<N; I++)
{
printf("Elément %d : ", I);
scanf("%d", &V[I]);
}
/* calcul du produit scalaire */

174
for (PS=0,I=0; I<N; I++)
PS+=(long)U[I]*V[I];
/* édition du résultat */
printf("Produit scalaire:%ld\n",PS);
return 0;
}
Preuve101

Exercice 102:
Ecrire un programme en langage C qui détermine la plus grande et la plus
petite valeur dans un tableau d'entiers A. Afficher ensuite la valeur et la
position du maximum et du minimum. Si le tableau contient plusieurs maxima
ou minima, le programme retiendra la position du premier maximum ou
minimum rencontré.
#include <stdio.h>
main()
{
/* Déclarations */
int A[50]; /* tableau donné */
int N; /* dimension */

175
int I; /* indice courant */
int MIN; /* position du minimum */
int MAX; /* position du maximum */
/* Saisie des données */
printf("Dimension du tableau (max.50) : ");
scanf("%d", &N );
for (I=0; I<N; I++)
{
printf("Elément %d : ", I);
scanf("%d", &A[I]);
}
/* Affichage du tableau */
return 0;
}
Preuve102

Exercice 103 :
Ecrire un programme en langage C qui lit 5 mots, séparés par des espaces et
qui les affiche ensuite dans une ligne, mais dans l'ordre inverse. Les mots sont
mémorisés dans 5 variables M1, ... ,M5.
Exemple voici une petite phrase ! ! phrase petite une voici
#include <stdio.h>
main()
{

176
char M1[30], M2[30], M3[30], M4[30], M5[30];
printf("Entrez 5 mots, séparés par des espaces :\n");
scanf ("%s %s %s %s %s", M1, M2, M3, M4, M5);
printf("%s %s %s %s %s\n",M5, M4, M3, M2, M1);
return 0;
}
Preuve103

Exercice 104 :
Ecrire un programme en langage C qui lit une ligne de texte (ne dépassant pas
200 caractères) la mémorise dans une variable TXT et affiche ensuite :
a) la longueur L de la chaîne.
#include <stdio.h>
main()
{
/* Déclarations */
char TXT[201]; /* chaîne donnée */
int I,J; /* indices courants */
int L; /* longueur de la chaîne */
int C; /* compteur des lettres 'e' */
int AIDE; /* pour l'échange des caractères */

177
/* Saisie des données */
printf("Entrez une ligne de texte (max.200 caractères) :\n");
gets(TXT); /* L'utilisation de scanf est impossible pour */
/* lire une phrase contenant un nombre variable de mots. */

/* a) Compter les caractères */


/* La marque de fin de chaîne '\0' est */
/* utilisée comme condition d'arrêt. */
for (L=0; TXT[L]; L++)
;
printf("Le texte est composé de %d caractères.\n",L);
return 0;
}
Preuve104.1

b) le nombre de 'e'contenus dans le texte.


#include <stdio.h>
main()
{
/* Déclarations */
char TXT[201]; /* chaîne donnée */
int I,J; /* indices courants */
int L; /* longueur de la chaîne */

178
int C; /* compteur des lettres 'e' */
int AIDE; /* pour l'échange des caractères */

/* Saisie des données */


printf("Entrez une ligne de texte (max.200 caractères) :\n");
gets(TXT); /* L'utilisation de scanf est impossible pour */
/* lire une phrase contenant un nombre variable de mots. */
/* b) Compter les lettres 'e' dans le texte */
C=0;
for (I=0; TXT[I]; I++)
if (TXT[I]=='e') C++;
printf("Le texte contient %d lettres \'e\'.\n",C);
return 0;
}
Preuve104.2

c)toute la phrase à rebours, sans changer le contenu de la variable TXT.


#include <stdio.h>
main()
{
/* Déclarations */
char TXT[201]; /* chaîne donnée */

179
int I,J; /* indices courants */
int L; /* longueur de la chaîne */
int C; /* compteur des lettres 'e' */
int AIDE; /* pour l'échange des caractères */

/* Saisie des données */


printf("Entrez une ligne de texte (max.200 caractères) :\n");
gets(TXT); /* L'utilisation de scanf est impossible pour */
/* lire une phrase contenant un nombre variable de mots. */
/* c) Afficher la phrase à l'envers */
for (I=L-1; I>=0; I--)
putchar(TXT[I]); /* ou printf("%c",TXT[I]); */
putchar('\n'); /* ou printf("\n"); */
return 0;
}
Preuve104.3

d) toute la phrase à rebours, après avoir inversé l'ordre des caractères dans TXT
: voici une petite phrase ! ! esarhp etitep enu iciov
#include <stdio.h>
main()

180
{
/* Déclarations */
char TXT[201]; /* chaîne donnée */
int I,J; /* indices courants */
int L; /* longueur de la chaîne */
int C; /* compteur des lettres 'e' */
int AIDE; /* pour l'échange des caractères */

/* Saisie des données */


printf("Entrez une ligne de texte (max.200 caractères) :\n");
gets(TXT); /* L'utilisation de scanf est impossible pour */

/* d) Inverser l'ordre des caractères */


for (I=0,J=L-1 ; I<J ; I++,J--)
{
AIDE=TXT[I];
TXT[I]=TXT[J];
TXT[J]=AIDE;
}
puts(TXT); /* ou printf("%s\n",TXT); */
return 0;
}
Preuve104.4

181
Exercice 105 :
Ecrire un programme en langage C qui lit un texte TXT (de moins de 200
caractères) et qui enlève toutes les apparitions du charactère 'e' en tassant les
éléments restants. Les modifications se feront dans la même variable TXT.
Exemple: Cette ligne contient quelques lettres e.
Ctt lign contint qulqus lttrs.
#include <stdio.h>
main()
{
/* Déclarations */
char TXT[201]; /* chaîne donnée */
int I,J; /* indices courants */

/* Saisie des données */


printf("Entrez une ligne de texte (max.200 caractères) :\n");
gets(TXT);
/* Eliminer les lettres 'e' et comprimer : */
/* Copier les caractères de I vers J et incrémenter J */
/* seulement pour les caractères différents de 'e'. */
for (J=0,I=0 ; TXT[I] ; I++)
{
TXT[J] = TXT[I];
if (TXT[I] != 'e') J++;

182
}
/* Terminer la chaîne !! */
TXT[J]='\0';
/* Edition du résultat */
puts(TXT);
return 0;
}
Preuve105

Exercice 106 :
Ecrire un programme en langage C qui demande l'introduction du nom et du
prénom de l'utilisateur et qui affiche alors la longueur totale du nom sans
compter les espaces. Employer la fonction strlen.
#include <stdio.h>
#include <string.h>
main()
{
char NOM[40], PRENOM[40];
printf("Introduisez votre nom et votre prénom: \n");
scanf("%s %s", NOM, PRENOM);
printf("\nBonjour %s %s !\n", NOM, PRENOM);

183
printf("Votre nom est composé de %d lettres.\n",
strlen(NOM) + strlen(PRENOM));
/* ou bien
printf("Votre nom est composé de %d lettres.\n",
strlen(strcat(NOM,PRENOM)));
*/
return 0;
}
Preuve106

Exercice 107 :
Ecrire un programme en langage C qui lit un verbe régulier en "er" au clavier et
qui en affiche la conjugaison au présent de l'indicatif de ce verbe. Contrôlez s'il
s'agit bien d'un verbe en "er" avant de conjuguer. Utiliser les fonctions gets,
puts, strcat et strlen.
#include <stdio.h>
#include <string.h>
main()
{
/* Déclarations */
char VERB[20]; /* chaîne contenant le verbe */
char AFFI[30]; /* chaîne pour l'affichage */

184
int L; /* longueur de la chaîne */
/* Saisie des données */
printf("Verbe : ");
gets(VERB);

/* Contrôler s'il s'agit d'un verbe en 'er' */


L=strlen(VERB);
if ((VERB[L-2]!='e') || (VERB[L-1]!='r'))
puts("\aCe n'est pas un verbe du premier groupe.!");
else
{
/* Couper la terminaison 'er'. */
VERB[L-2]='\0';
/* Conjuguer ... */
AFFI[0]='\0';
strcat(AFFI, "je ");
strcat(AFFI, VERB);
strcat(AFFI, "e");
puts(AFFI);

AFFI[0]='\0';
strcat(AFFI, "ils ");
strcat(AFFI, VERB);
strcat(AFFI, "ent");
puts(AFFI);

185
}
return 0;
}
Preuve107

Exercice 108 :
Ecrire un programme en langage C qui lit deux chaînes de caractères CH1 et
CH2 et qui copie la première moitié de CH1 et la première moitié de CH2 dans
une troisième chaîne CH3. Afficher le résultat.
a)Utiliser les fonctions spéciales de <string>.
#include <stdio.h>
#include <string.h>
main()
{
/* Déclarations */
char CH1[100], CH2[100]; /* chaînes données */
char CH3[100]=""; /* chaîne résultat */

/* Saisie des données */


printf("Introduisez la première chaîne de caractères : ");
gets(CH1);
printf("Introduisez la deuxième chaîne de caractères : ");

186
gets(CH2);
/* Traitements */
strncpy(CH3, CH1, strlen(CH1)/2);
strncat(CH3, CH2, strlen(CH2)/2);
/* Affichage du résultat */
printf("Un demi \"%s\" plus un demi \"%s\" donne \"%s\"\n",CH1, CH2, CH3);
return 0;
}
Preuve108.1

b) Utiliser uniquement les fonctions getset puts.


#include <stdio.h>
main()
{
/* Déclarations */
char CH1[100], CH2[100]; /* chaînes données */
char CH3[100]=""; /* chaîne résultat */
int L1,L2; /* longueurs de CH1 et CH2 */
int I; /* indice courant dans CH1 et CH2 */
int J; /* indice courant dans CH3 */

187
/* Saisie des données */
puts("Introduisez la première chaîne de caractères : ");
gets(CH1);
puts("Introduisez la deuxième chaîne de caractères : ");
gets(CH2);
/* Détermination les longueurs de CH1 et CH2 */
for (L1=0; CH1[L1]; L1++) ;
for (L2=0; CH2[L2]; L2++) ;
/* Copier la première moitié de CH1 vers CH3 */
for (I=0 ; I<(L1/2) ; I++)
CH3[I]=CH1[I];
/* Copier la première moitié de CH2 vers CH3 */
J=I;
for (I=0 ; I<(L2/2) ; I++)
{
CH3[J]=CH2[I];
J++;
}
/* Terminer la chaîne CH3 */
CH3[J]='\0';

/* Affichage du résultat */
puts("Chaîne résultat : ");
puts(CH3);
return 0; }
Preuve108.2

188
189

Vous aimerez peut-être aussi