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);
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));
Exercice 2:
crivez un programme en langage C qui lit trois valeurs entires (A, B et C) au clavier. Triez les valeurs A,
B et C par changes successifs de manire obtenir :
val(A) val(B) val(C)
Affichez les trois valeurs.
#include <stdio.h>
main()
{
/* Tri par ordre dcroissant de trois entiers
en changeant les valeurs
*/
int A, B, C, AIDE;
printf("Introduisez trois nombres entiers :");
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("Aprs le tri : \tA = %i\tB = %i\tC = %i\n", A, B, C);
return 0;
Exercice 3:
Ecrivez un programme en langage C qui lit deux valeurs entires (A et B) au clavier et qui
affiche le signe du produit de A et B sans faire la multiplication.
Solution :
#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 ngatif\n", A, B);
else
printf("Le produit %i * %i est zro\n", A, B);
return 0;
}
Exercice 4:
Ecrivez un programme en langage C qui lit deux valeurs entires (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
bibliothque <math.h>.
Solution :
#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 ngatif\n",A,B);
else
printf("La somme %i + %i est zro\n", A, B);
return 0;
}
Exercice 5:
Ecrivez un programme en langage C qui calcule les solutions relles d'une quation du
second degr ax2+bx+c = 0.
Solution :
#include <stdio.h>
#include <math.h>
main()
{
/* Calcul des solutions relles d'une quation du second degr */
int A, B, C;
double D; /* Discriminant */
printf("Calcul des solutions relles 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);
Exercice 1:
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. Rsolvez ce problme,
a) en utilisant while,
b) en utilisant do - while,
c) en utilisant for.
d) Laquelle des trois variantes est la plus naturelle pour ce problme?
Solution :
a) en utilisant while,
#include <stdio.h>
main()
{
int N; /* nombre de donnes */
int NOMB; /* nombre courant */
int I; /* compteur */
long SOM; /* la somme des nombres entrs */
double PROD; /* le produit des nombres entrs */
SOM=0;
PROD=1;
I=1;
while(I<=N)
{
printf("%d. nombre : ", I);
scanf("%d", &NOMB);
SOM += NOMB;
PROD *= NOMB;
I++;
}
b) en utilisant do - while,
#include <stdio.h>
main()
{
int N; /* nombre de donnes */
int NOMB; /* nombre courant */
int I; /* compteur */
long SOM; /* la somme des nombres entrs */
double PROD; /* le produit des nombres entrs */
SOM=0;
PROD=1;
I=1;
do
{
printf("%d. nombre : ", I);
scanf("%d", &NOMB);
SOM += NOMB;
PROD *= NOMB;
I++;
}
while(I<=N);
c) en utilisant for.
main()
{
int N; /* nombre de donnes */
int NOMB; /* nombre courant */
int I; /* compteur */
long SOM; /* la somme des nombres entrs */
double PROD; /* le produit des nombres entrs */
Exercice 2:
Calculez par des soustractions successives le quotient entier et le reste de la division entire
de deux entiers entrs au clavier.
Solution :
#include <stdio.h>
main()
{
int NUM; /* numrateur de la division entire */
int DEN; /* dnominateur de la division entire */
int DIV; /* rsultat de la division entire */
int RES; /* reste de la division entire */
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;
}
Exercice 3:
Calculez la factorielle N! = 1*2*3*...*(N-1)*N d'un entier naturel N en respectant que
0!=1.
a) Utilisez while,
b) Utilisez for.
Solution :
do
{
printf("Entrez un entier naturel : ");
scanf("%d", &N);
}
while (N<0);
/* a */
/* Pour N=0, le rsultat sera automatiquement 0!=1 */
I=1;
FACT=1;
while (I<=N)
{
FACT*=I;
I++;
}
do
{
printf("Entrez un entier naturel : ");
scanf("%d", &N);
}
while (N<0);
Solution :
#include <stdio.h>
main()
{
int X, N; /* Les donnes */
int I; /* Le compteur */
double RESU; /* Type double cause de la */
/* grandeur du rsultat. */
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);
Exercice 5:
Solution :
#include <stdio.h>
main()
{
int N; /* nombre de termes calculer */
int I; /* compteur pour la boucle */
float SOM; /* Type float cause de la prcision du rsultat. */
do
{
printf ("Nombre de termes: ");
scanf ("%d", &N);
}
while (N<1);
for (SOM=0.0, I=1 ; I<=N ; I++)
SOM += (float)1/I;
printf("La somme des %d premiers termes est %f \n", N, SOM);
return 0;
}
Exercice 6:
Calculez la somme, le produit et la moyenne d'une suite de chiffres non nuls entrs
au clavier, sachant que la suite est termine par zro. Retenez seulement les chiffres
(0, 1 ... 9) lors de l'entre des donnes et effectuez un signal sonore si les donnes
sortent de ce domaine.
Solution :
#include <stdio.h>
main()
{
int X; /* Le chiffre courant */
int N=0; /* Le compteur des donnes */
int SOM=0; /* La somme actuelle */
long PROD=1; /* Le produit actuel - Type long */
/* cause de la grandeur du rsultat. */
*/
do
{
/* Saisie des donnes (pour perfectionnistes) */
printf("Entrez le %d%s chiffre : ", (N+1), (N)?"e":"er");
scanf("%d", &X);
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;
}
Exercice 7:
Calculez le nombre lu rebours d'un nombre positif entr au clavier en supposant
que le fichier d'entre standard contient une suite de chiffres non nuls, termine par
zro (Contrlez s'il s'agit vraiment de chiffres). Exemple: Entre: 1 2 3 4 0 Affichage:
4321
Solution :
#include <stdio.h>
main()
{
int X; /* Le chiffre courant */
int N=0; /* Le compteur des dcimales */
long VALD=1; /* Valeur de la position dcimale courante */
long NOMB=0; /* Le nombre rsultat */
do
{
printf("Entrez le %d%s chiffre : ", (N+1), (N)?"e":"er");
scanf("%d", &X);
if (X<0||X>9)
printf("\a");
else if (X)
{
NOMB += VALD*X;
N++;
VALD *= 10;
}
else
printf("La valeur du nombre renvers est %ld\n", NOMB);
}
while (X);
return 0;
}
Exercice 8:
Solution :
#include <stdio.h>
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;
*/
Exercice 9:
Calculez le P.G.C.D. de deux entiers naturels entrs au clavier en utilisant l'algorithme
d'EUCLIDE.
Solution :
#include <stdio.h>
main()
{
int A, B; /* donnes */
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
{
printf("Entrer l'entier B (non nul) : ");
scanf("%d", &B);
}
while(!B);
Solution :
#include <stdio.h>
main()
{
/* Dclarations */
int T[50]; /* tableau donn */
int N; /* dimension */
int I; /* indice courant */
long SOM; /* somme des lments - type long cause */
/* de la grandeur prvisible du rsultat. */
Exercice 2:
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 entres
au clavier et affiche le tableau.
Effacer ensuite toutes les occurrences de la valeur 0 dans le tableau T et tasser les
lments restants. Afficher le tableau rsultant.
Solution :
#include <stdio.h>
main()
{
/* Dclarations */
int T[50]; /* tableau donn */
int N; /* dimension */
int I,J; /* indices courants */
/* Saisie des donnes */
printf("Dimension du tableau (max.50) : ");
scanf("%d", &N );
for (I=0; I<N; I++)
{
printf("Elment %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 zros et comprimer : */
/* Copier tous les lments de I vers J et */
/* augmenter J pour les lments 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 rsultats */
printf("Tableau rsultat :\n");
for (I=0; I<N; I++)
printf("%d ", T[I]);
printf("\n");
return 0;
}
Exercice 3:
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 entres
au clavier et affiche le tableau.
Ranger ensuite les lments du tableau T dans l'ordre inverse sans utiliser de
tableau d'aide. Afficher le tableau rsultant.
Ide: Echanger les lments du tableau l'aide de deux indices qui parcourent le
tableau en commenant respectivement au dbut et la fin du tableau et qui se
rencontrent en son milieu.
Solution :
#include <stdio.h>
main()
{
/* Dclarations */
int T[50]; /* tableau donn */
int N; /* dimension */
int I,J; /* indices courants */
int AIDE; /* pour l'change */
Exercice 4:
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 entres
au clavier et affiche le tableau.
Copiez ensuite toutes les composantes strictement positives dans un deuxime
tableau TPOS et toutes les valeurs strictement ngatives dans un troisime tableau
TNEG. Afficher les tableaux TPOS et TNEG.
Solution :
#include <stdio.h>
main()
{
/* Dclarations */
/* Les tableaux et leurs dimensions */
int T[50], TPOS[50], TNEG[50];
int N, NPOS, NNEG;
int I; /* indice courant */
Exercice 5:
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 entres au clavier et afficher le tableau ainsi que
la somme de tous ses lments.
Solution :
#include <stdio.h>
main()
{
/* Dclarations */
int T[50][50]; /* tableau donn */
int L, C; /* dimensions */
int I, J; /* indices courants */
long SOM; /* somme des lments - type long cause */
/* de la grandeur prvisible du rsultat. */
Exercice 6:
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 entres 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.
Solution :
#include <stdio.h>
main()
{
/* Dclarations */
int T[50][50]; /* tableau donn */
int L, C; /* dimensions */
int I, J; /* indices courants */
long SOM; /* somme des lments - type long cause */
/* de la grandeur prvisible des rsultats. */
Exercice 7:
Ecrire un programme en langage C qui transfre 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 h i j k l |
|ijkl | \ /
\ /
Solution :
#include <stdio.h>
main()
{
/* Dclarations */
int M[10][10]; /* tableau 2 dimensions */
int V[100]; /* tableau 1 dimension */
int L, C; /* dimensions */
int I, J; /* indices courants */
Solution :
#include <stdio.h>
main()
{
/* Dclarations */
int U[50], V[50]; /* tableaux donns */
int N; /* dimension */
int I; /* indice courant */
long PS; /* produit scalaire */
/* Saisie des donnes */
printf("Dimension des tableaux (max.50) : ");
scanf("%d", &N );
printf("** Premier tableau **\n");
for (I=0; I<N; I++)
{
printf("Elment %d : ", I);
scanf("%d", &U[I]);
}
printf("** Deuxime tableau **\n");
for (I=0; I<N; I++)
{
printf("Elment %d : ", I);
scanf("%d", &V[I]);
}
/* Calcul du produit scalaire */
for (PS=0, I=0; I<N; I++)
PS += (long)U[I]*V[I];
/* Edition du rsultat */
printf("Produit scalaire : %ld\n", PS);
return 0;
}
Exercice 9:
Ecrire un programme en langage C qui dtermine 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.
Solution :
#include <stdio.h>
main()
{
/* Dclarations */
int A[50]; /* tableau donn */
int N; /* dimension */
int I; /* indice courant */
int MIN; /* position du minimum */
int MAX; /* position du maximum */
/* Saisie des donnes */
printf("Dimension du tableau (max.50) : ");
scanf("%d", &N );
for (I=0; I<N; I++)
{
printf("Elment %d : ", I);
scanf("%d", &A[I]);
}
/* Affichage du tableau */
Solution :
#include <stdio.h>
main()
{
char M1[30], M2[30], M3[30], M4[30], M5[30];
printf("Entrez 5 mots, spars 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;
}
Exercice 2 :
Ecrire un programme en langage C qui lit une ligne de texte (ne dpassant pas 200
caractres) la mmorise dans une variable TXT et affiche ensuite:
a) la longueur L de la chane.
b) le nombre de 'e' contenus dans le texte.
c) toute la phrase rebours, sans changer le contenu de la
variable TXT.
d) toute la phrase rebours, aprs avoir invers l'ordre des
caractres dans TXT:
voici une petite phrase !
! esarhp etitep enu iciov
Solution :
#include <stdio.h>
main()
{
/* Dclarations */
char TXT[201]; /* chane donne */
int I,J; /* indices courants */
int L; /* longueur de la chane */
int C; /* compteur des lettres 'e' */
int AIDE; /* pour l'change des caractres */
Exercice 3 :
Ecrire un programme en langage C qui lit un texte TXT (de moins de 200 caractres)
et qui enlve toutes les apparitions du charactre 'e' en tassant les lments
restants. Les modifications se feront dans la mme variable TXT.
Exemple:
Cette ligne contient quelques lettres e.
Ctt lign contint qulqus lttrs .
Solution :
#include <stdio.h>
main()
{
/* Dclarations */
char TXT[201]; /* chane donne */
int I,J; /* indices courants */
Exercice 4 :
Ecrire un programme en langage C qui demande l'introduction du nom et du prnom
de l'utilisateur et qui affiche alors la longueur totale du nom sans compter les
espaces. Employer la fonction strlen.
Solution :
#include <stdio.h>
#include <string.h>
main()
{
char NOM[40], PRENOM[40];
printf("Introduisez votre nom et votre prnom: \n");
scanf("%s %s", NOM, PRENOM);
printf("\nBonjour %s %s !\n", NOM, PRENOM);
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;
}
Exercice 5 :
Ecrire un programme en langage C qui lit un verbe rgulier en "er" au clavier et qui
en affiche la conjugaison au prsent de l'indicatif de ce verbe. Contrlez s'il s'agit
bien d'un verbe en "er" avant de conjuguer. Utiliser les fonctions gets, puts, strcat et
strlen.
Solution :
#include <stdio.h>
#include <string.h>
main()
{
/* Dclarations */
char VERB[20]; /* chane contenant le verbe */
char AFFI[30]; /* chane pour l'affichage */
int L; /* longueur de la chane */
...
AFFI[0]='\0';
strcat(AFFI, "ils ");
strcat(AFFI, VERB);
strcat(AFFI, "ent");
puts(AFFI);
}
return 0;
}
Exercice 6 :
Ecrire un programme en langage C qui lit deux chanes de caractres CH1 et CH2
et qui copie la premire moiti de CH1 et la premire moiti de CH2 dans une
troisime chane CH3. Afficher le rsultat.
a) Utiliser les fonctions spciales de <string>.
b) Utiliser uniquement les fonctions gets et puts.
Solution :
a) Utiliser les fonctions spciales de <string>.
#include <stdio.h>
#include <string.h>
main()
{
/* Dclarations */
char CH1[100], CH2[100]; /* chanes donnes */
char CH3[100]=""; /* chane rsultat */
/* Traitements */
strncpy(CH3, CH1, strlen(CH1)/2);
strncat(CH3, CH2, strlen(CH2)/2);
/* Affichage du rsultat */
printf("Un demi \"%s\" plus un demi \"%s\" donne \"%s\"\n",CH1, CH2, CH3);
return 0;
}
/* Affichage du rsultat */
puts("Chane rsultat : ");
puts(CH3);
return 0;
}
Solution :
Soit P un pointeur qui 'pointe' sur un tableau A:
int A[] = {12, 23, 34, 45, 56, 67, 78, 89, 90};
int *P;
P = A;
Exercice 2 :
Ecrire un programme en langage C qui lit un entier X et un tableau A du type int au clavier et limine toutes
les occurrences de X dans A en tassant les lments restants. Le programme utilisera les pointeurs P1 et
P2 pour parcourir le tableau.
Solution :
#include <stdio.h>
main()
{
/* Dclarations */
int A[50]; /* tableau donn */
int N; /* dimension du tableau */
int X; /* valeur liminer */
int *P1, *P2; /* pointeurs d'aide */
Exercice 3 :
Ecrire un programme en langage C qui range les lments d'un tableau A du type int dans l'ordre inverse.
Le programme utilisera des pointeurs P1 et P2 et une variable numrique AIDE pour la permutation des
lments.
Solution :
#include <stdio.h>
main()
{
/* Dclarations */
int A[50]; /* tableau donn */
int N; /* dimension du tableau */
int AIDE; /* pour la permutation */
int *P1, *P2; /* pointeurs d'aide */
/* Saisie des donnes */
printf("Dimension du tableau (max.50) : ");
scanf("%d", &N );
for (P1=A; P1<A+N; P1++)
{
printf("Elment %d : ", P1-A);
scanf("%d", P1);
}
/* Affichage du tableau */
for (P1=A; P1<A+N; P1++)
printf("%d ", *P1);
printf("\n");
/* Inverser la tableau */
for (P1=A,P2=A+(N-1); P1<P2; P1++,P2--)
{
AIDE = *P1;
*P1 = *P2;
*P2 = AIDE;
}
/* Edition du rsultat */
for (P1=A; P1<A+N; P1++)
printf("%d ", *P1);
printf("\n");
return 0;
}
Exercice 4 :
Ecrire un programme en langage C qui lit deux tableaux d'entiers A et B et leurs dimensions N et M au
clavier et qui ajoute les lments de B la fin de A. Utiliser deux pointeurs PA et PB pour le transfer et
afficher le tableau rsultant A.
Solution :
#include <stdio.h>
main()
{
/* Dclarations */
int A[100], B[50]; /* tableaux */
int N, M; /* dimensions des tableaux */
int *PA,*PB; /* pointeurs d'aide */
Exercice 5 :
Ecrire de deux faons diffrentes, un programme en langage C qui vrifie sans utiliser une
fonction de <string>, si une chane CH introduite au clavier est un palindrome:
a) en utilisant uniquement le formalisme tableau
b) en utilisant des pointeurs au lieu des indices numriques
Rappel: Un palindrome est un mot qui reste le mme qu'on le lise de gauche droite ou de
droite gauche:
Solution :
a) en utilisant uniquement le formalisme tableau
#include <stdio.h>
main()
{
/* Dclarations */
char CH[101]; /* chane donne */
int I,J; /* indices courants */
int PALI; /* indicateur logique: */
/* vrai si CH est un palindrome */
/* Affichage du rsultat */
if (PALI)
printf("La chane \"%s\" est un palindrome.\n", CH);
else
printf("La chane \"%s\" n'est pas un palindrome.\n", CH);
return 0;
}
Exercice 6 :
Solution :
#include <stdio.h>
main()
{
/* Dclarations */
char CH[101]; /* chane donne */
char *P; /* pointeur d'aide */