Vous êtes sur la page 1sur 5

Module : Algorithmique et programmation C

Licence : LASTIC
Tuteur : Mme O. Belkahla Driss

Corrigé Série N°2 – Chapitre 1 Notions Algorithmiques


Exercice n°1 :
Ecrire un programme qui lit trois valeurs entières (A, B et C) au clavier et qui
affiche la plus grande des trois valeurs.
Solution :
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);
return 0;
}
b) if - else if - ... - else sans variable d'aide

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);
c) opérateurs conditionnels et une variable d'aide MAX

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;
Module : Algorithmique et programmation C
Licence : LASTIC
Tuteur : Mme O. Belkahla Driss

printf("La valeur maximale est %i\n", MAX);


d) opérateurs conditionnels sans variable d'aide

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

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 négatif\n", A, B);
else
printf("Le produit %i * %i est zéro\n", A, B);
return 0;
}

Exercice n°3 :
Ecrire un programme qui calcule la somme de 4 nombres entiers en utilisant la boucle while.

Solution :
#include <stdio.h>
/* introduits au clavier.*/
main()
{
int NOMBRE, SOMME, COMPTEUR;
/* Initialisation des variables */
SOMME = 0;
Module : Algorithmique et programmation C
Licence : LASTIC
Tuteur : Mme O. Belkahla Driss

COMPTEUR = 0;
/* Lecture des données */
while (COMPTEUR < 4)
{
/* Lire la valeur du nombre suivant */
printf("Entrez un nombre entier :");
scanf("%i", &NOMBRE);
/* Ajouter le nombre au résultat */
SOMME += NOMBRE;
/* Incrémenter le compteur */
COMPTEUR++;
}
/* Impression du résultat */
printf("La somme est: %i \n", SOMME);
return 0;
}

Exercice n°4 :
Ecrire un programme 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,
b) en utilisant do - while,
c) en utilisant for.
Laquelle des trois variantes est la plus naturelle pour ce problème?

Solution :
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;
while(I<=N)
{
printf("%d. nombre : ", I);
Module : Algorithmique et programmation C
Licence : LASTIC
Tuteur : Mme O. Belkahla Driss

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

b) en utilisant do - while,
Remplacez le bloc de traitement (en gras) de (a) par :

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.
Remplacez le bloc de traitement (en gras) de (a) par :

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


{
printf("%d. nombre : ", I);
scanf("%d", &NOMB);
SOM += NOMB;
PROD *= NOMB;
}
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 n°5 :
Compléter la 'meilleure' des trois versions de l'exercice précédent :
Répéter l'introduction du nombre N jusqu'à ce que N ait une valeur entre 1 et 15.
Quelle structure répétitive utilisez-vous? Pourquoi?
Module : Algorithmique et programmation C
Licence : LASTIC
Tuteur : Mme O. Belkahla Driss

Solution :
Remplacer les lignes

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


scanf("%d", &N);
par

do
{
printf("Nombre de données : ");
scanf("%d", &N);
}
while(N<1 || N>15);
Quelle structure répétitive utilisez-vous? Pourquoi?

Comme il n'y pas d'initialisation ni de réinitialisation de variables, nous avons le choix entre
while et do - while. Comme l'introduction du nombre de données doit toujours être exécuté
(au moins une fois), le plus naturel sera l'utilisation de la structure do - while.

Vous aimerez peut-être aussi