Exercice 1 :
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); 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?
On peut dire que 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 2
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), donc le plus naturel sera l’utilisation de la structure do – while.