Exercice d'application langage C avec correction

Exercice (1) - lecture d'un caractère

Ecrire un programme qui lit un caractère au clavier et affiche le caractère ainsi que son code numérique:

a) en employant getchar et printf,

b) en employant getch et printf.

Solution :

1. 

Ecrire un programme qui lit un caractère au clavier et affiche le caractère ainsi que son code numérique :

a) en employant getchar et printf,

#include
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;
}

b) en employant getch et printf.

#include
#include
main()
{
int C;
printf("Introduire un caractère \n");
C = getch();
printf("Le caractère %c a le code ASCII %d\n", C, C);
return 0;
}

Exercice (2) -  lecture formatée de données : 

En vous référant aux exemples du chapitre 4.2, écrivez un programme qui lit la date du clavier et écrit les données ainsi que le nombre de données correctement reçues sur l'écran.

Exemple:

Introduisez la date (jour mois année): 11 11 1991

données reçues : 3
jour : 11
mois : 11
année : 1991

* Testez les réactions du programme à vos entrées. Essayez d'introduire des nombres de différents formats et différentes grandeurs.

* Changez la partie format du programme de façon à séparer les différentes données par le symbole '-' .

Solution :

#include
main()
{
int JOUR, MOIS, ANNEE, RECU;
printf("Introduisez la date (JOUR, MOIS, ANNéE) : ");
RECU=scanf("%i %i %i", &JOUR, &MOIS, &ANNEE);
printf("\ndonnées reçues : %i\njour : %i\nmois :
%i\nannee : %i\n", RECU, JOUR, MOIS, ANNEE);
return 0;
}

Changez la partie format du programme de façon à séparer les différentes données par le symbole '-'.

. . .
RECU=scanf("%i-%i-%i", &JOUR, &MOIS, &ANNEE);
. . .

Exercice (3) : 

1. Ecrire un programme qui permute et affiche les valeurs de trois variables A, B, C de type entier qui sont entrées au clavier :

A ==> B , B ==> C , C ==> A

2. Ecrire un programme 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.

Solution :

1. 

#include
main()
{
int A, B, C, AIDE;
printf("Introduisez trois nombres (A, B, C) : ");
scanf("%i %i %i", &A, &B, &C);
/* Affichage à l'aide de tabulations */
printf("A = %i\tB = %i\tC = %i\n", A, B, C);
AIDE=A;
A=C;
C=B;
B=AIDE;
printf("A = %i\tB = %i\tC = %i\n", A, B, C);
return 0;
}

2.

#include
main()
{
int A, B;
printf("Introduisez deux nombres entiers : ");
scanf("%i %i", &A, &B);
printf("Division entiere : %i\n", A/B);
printf("Reste : %i\n", A%B);
printf("Quotient rationnel : %f\n", (float)A/B);
return 0;
}

Remarque: Conversion des types

Pour obtenir un résultat rationnel, il faut qu'au moins l'une des deux opérandes soit d'un type rationnel. Si nous convertissons la valeur de l'opérande A en float à l'aide de l'opérateur de conversion forcée, alors la valeur de la deuxième opérande B est convertie automatiquement en float. Le résultat de la division est du type float et doit être représenté par le spécificateur de format %f (ou %e).

Remarquez bien que la conversion forcée concerne uniquement la valeur de la variable A ! La valeur de B est convertie automatiquement.

D'autre part, si nous écrivions:

(float)(A/B)

nous n'obtiendrions pas le résultat désiré, parce que la conversion se ferait seulement après la division !

Exercice (4) :

1. Ecrire un programme 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:

2. Ecrire un programme 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.

Solution :

1.

#include
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;
}

En affichant immédiatement le résultat du calcul, nous n'avons pas besoin de la variable d'aide RRES:

#include
main()
{
double R1, R2, R3;
printf("Introduisez les valeurs pour R1, R2 et R3 : ");
scanf("%lf %lf %lf", &R1, &R2, &R3);
printf("Resistance resultante serielle : %f\n",
R1+R2+R3);
printf("Resistance resultante parallele : %f\n",
(R1*R2*R3)/(R1*R2+R1*R3+R2*R3));
return 0;
}

2.

#include
#include
main()
{
/* Pour ne pas perdre de précision lors de la division, */
/* déclarons P comme rationnel. */
int A, B, C;
double P; /* ou bien: float P; */
printf("Introduisez les valeurs pour A, B et C : ");
scanf("%i %i %i", &A, &B, &C);
/* En forçant la conversion de A, les autres opérandes */
/* sont converties automatiquement. */
P=((double)A+B+C)/2;
printf("Surface du triangle S = %f\n",
sqrt(P*(P-A)*(P-B)*(P-C)));
return 0;
}

Exercice (5) : Les codes ASCII

Ecrire un programme qui affiche les codes ASCII des lettres et des chiffres sous la forme suivante :
 

Solution :

Exercice (6) : triangle des étoiles

Affichez un triangle isocèle formé d'étoiles de N lignes (N est fourni au clavier):

Nombre de lignes : 8

*
***
*****
*******
*********
***********
*************
***************

Solution:

#include
main()
{
int LIG; /* nombre de lignes */
int L; /* compteur des lignes */
int ESP; /* nombre d'espaces */
int I; /* compteur des caractères */

do
{
printf("Nombres de lignes : ");
scanf("%d", &LIG);
}
while (LIG20);

for (L=0 ; L{
ESP = LIG-L-1;
for (I=0 ; Iputchar(' ');
for (I=0 ; Iputchar('*');
putchar('\n');
}
return 0;
}

Exercice (7) : L'utilisation de cin et de cout


Cet exercice a pour but de vérifier les points techniques suivants :

  • La notion de variables et leur déclaration.
  • L'utilisation de cin et de cout.
  • Le choix d'une structure de contrôle adaptée au problème !

Travail à Faire:

Ecrire un programme qui demande à l'utilisateur de taper un entier et qui affiche GAGNE si l'entier est entre 56 et 78 bornes incluses PERDU sinon.

Solution :

#include
using namespace std;

int main()
{

int a;
cout"Tapez un entier : ";cin>>a;
if((a>=56)&&(a
cout "Appuyez sur une touche pour continuer ..." endl;
cin.ignore();
cin.get();
return EXIT_SUCCESS;
}

Exercice (8) : Calcul le plus petit entier

Cet exercice a pour but de vérifier les points techniques suivants :

  • Utilisation simple du for.
  • Etude d'un algorithme usuel : Calcul le plus petit entier.
  • Modélisation d'un problème simple issu des mathématiques.

Travail à Faire :

Ecrire un programme qui demande à l’utilisateur de taper 10 entiers et qui affiche le plus petit de ces entiers.

Solution :

#include

using namespace std;

int main()

{

int i,ppt,x;

for(i=0;i{

cout>x;

if(i==0)ppt=x;else if(x
}

cout
return 0;

}

Exercice (9) : Pile d'entiers

Une pile est un ensemble dynamique d’éléments où le retrait se fait d’une façon particulière. En effet, lorsque l’on désire enlever un élément de l’ensemble, ce sera toujours le dernier inséré qui sera retiré. Un objet pile doit ré pondre aux fonctions suivantes:

  • Initialiser une pile
  • Empiler un élément sur la pile (push)
  • Dépiler un élément de la pile (pop)

Pour cela nous allons supposer que les éléments à empiler sont de type int.

Le programme main comprend la définition d'une classe pile et un programme de test qui crée deux piles p1 et p2, empile dessus des valeurs entières et les dépiler pour vérifier les opérations push et pop.

Solution :

Découverte et travail des classes. Utilisation d'un constructeur et d'un destructeur.
#include

class pile

{

int *tab;

int k; //indice de la 1er position vide

int max;

pile (int taille =100);

~pile();

int push int x; //empiler X

int full();

int empty ();

int pop; int &x; //dépiler le dernier éllement
.
.
.
.
}

Exercice (10) : Calcul d'une suite récurrente

Cet exercice a pour but de vérifier les points techniques suivants :

  • Utilisation simple du for.
  • Etude d'un algorithme usuel : Calcul d'une suite récurrente.
  • Modélisation d'un problème simple issu des mathématiques.

Travail à Faire :

Ecrire un programme qui demande à l'utilisateur de taper un entier N et qui calcule u(N) défini par :
u(0)=1
u(1)=1
u(n+1)=u(n)+u(n-1)

Solution : 

#include

using namespace std;

int main()
{
int i,u=1,v=1,w,N;

cout>N;

w=1;

for(i=2;i{
w=u+v;

u=v;

v=w;

}

cout
return 0;

}

Exercice (11) : la suite hongroise

Cet exercice a pour but de vérifier les points techniques suivants :

  • Utilisation du while.
  • Lire précisément un énoncé.
  • Modélisation assez complexe d'un problème issu des mathématiques.

Travail à Faire :

On considère la suite hongroise : u(0)=a (a entier)
si u(n) pair alors u(n+1)=u(n)/2 sinon u(n+1)=3*u(n)+1

Pour toutes les valeurs a, il existe un entier N tel que u(N)=1 (conjecture admise).

a) Ecrire un programme qui demande à l'utilisateur de taper a et qui affiche toutes les valeurs de u(n) de n=1 à n=N.

Solution :

#include
using namespace std;

int main()
{
int a,n,u;
cout>a;
n=0;
u=a;

while(u!=1)
{
if(u%2==0)u=u/2; else u=3*u+1;
n++;
cout}
return 0;
}

Exercice (12) : Calculer la somme des cubes de 5^3 à N^3

Cet exercice a pour but de vérifier les points techniques suivants :

  • Utilisation simple du for.
  • Etude d'un algorithme usuel : calcul d'une somme.
  • Modélisation d'un problème simple issu des mathématiques.

Travail à Faire :

Ecrire un programme qui demande à l'utilisateur de taper un entier N et qui calcule la somme des cubes de 5^3 à N^3.

Solution :

#include

using namespace std;

int main()

{
int N;

double somme;

cout > N;

if (N>=5) {

for (int i=5; i
}

cout
cin.ignore();

cin.get();

return EXIT_SUCCESS;

}

Exercice (13) : Recherche du nombre d'éléments vérifiant une propriété

Cet exercice a pour but de vérifier les points techniques suivants :

  • Utilisation simple de tableaux.
  • Un algorithme simple sur un tableau : Recherche du nombre d'éléments vérifiant une propriété.

Travail à Faire :

Écrire un programme qui demande à l'utilisateur de saisir 10 entiers stockés dans un tableau.
Le programme doit afficher le nombre d'entiers supérieurs ou égaux à 10.

Solution :

#include

using namespace std;

const int N=10;

int main()
{
int t[10],i,nb=0;

for(i=0;i>t[i];}

for(i=0;i=10)nb++;

cout

return 0;

}

Exercice (14) - calcul d'un polynôme de degré N :

Calculer pour une valeur X donnée du type float la valeur numérique d'un polynôme de degré n:

P(X) = AnXn + An-1Xn-1 + ... + A1X + A0 

Les valeurs des coefficients An, ... , A0 seront entrées au clavier et mémorisées dans un tableau A de type float et de dimension n+1.

a) Utilisez la fonction pow() pour le calcul.

b) Utilisez le schéma de Horner qui évite les opérations d'exponentiation:

Solution combinée:

#include
#include
main()
{
float A[20];/* tableau des coefficients de P */
int I; /* indice courant */
int N; /* degré du polynôme */
float X; /* argument */
float P; /* résultat */

/* Saisie du degré N et de l'argument X */
printf("Entrer le degré N du polynôme (max.20) : ");
scanf("%d", &N);
printf("Entrer la valeur X de l'argument : ");
scanf("%f", &X);
/* Saisie des coefficients */
for (I=0 ; I{
printf("Entrer le coefficient A%d : ", I);
scanf("%f", &A[I]);
}

/* a) Calcul à l'aide de pow
for (P=0.0, I=0 ; IP += A[I]*pow(X,I); */

/* b) Calcul de Horner */
for (P=0.0, I=0 ; IP = P*X + A[I];

/* Edition du résultat */
printf("Valeur du polynôme pour X = %.2f : %.2f\n", X, P);
return 0;
}

Article publié le 02 Janvier 2011 Mise à jour le Mardi, 08 Novembre 2022 13:48 par Salim KHALIL