Exercice moyenne, minimum, maximum et allocation dynamique
Bonjour,
J'ai un exercice simple à faire mais mon programme plante :
On souhaite stocker dans un tableau les moyennes de tous les étudiants d’une promotion et
afficher le minimum, le maximum et la moyenne des valeurs du tableau qui sont des réels compris
entre 0 et 20.
Le nombre d'étudiants d'une promotion pouvant varier d'une année sur l'autre, il faut que cette valeur
soit saisie au clavier.
2.1. Écrivez en langage C la définition d’une fonction qui a en paramètre le tableau et permet la
saisie des moyennes au clavier.
2.2. Écrivez en langage C la définition d’une fonction qui a en paramètre le tableau, qui
détermine le minimum, le maximum et la moyenne des éléments du tableau puis transmet ces trois
résultats à la fonction appelante.
2.3. Écrivez en langage C un programme qui :
- permet la saisie au clavier du nombre d’étudiants d’une promotion, limité à 150 ;
- gère dynamiquement en mémoire un tableau de réels ;
- permet la saisie au clavier de toutes les moyennes de la promotion et l’affichage du minimum, du
maximum et de la moyenne des valeurs du tableau en appelant les fonctions définies précédemment.
Voici mon programme :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
#include <stdio.h>
#include <stdlib.h>
void saisie_moyennes(double tableau[],int nbre)
{
int i, ok;
for(i=0;i<nbre;i++)
do
{
printf("Veuillez saisir la moyenne numero %d : (entre 0 et 20)",i+1);
ok = scanf("%lg",tableau[i]);
while( getchar( ) != '\n' );
} while (!ok || tableau[i] < 0 || tableau[i] > 20);
}
void calcul(double tableau[],int nbre,double* mini,double* maxi,double* moyenne)
{
double somme;
int i;
somme = 0;
for(i=0;i<nbre;i++)
{
somme = somme + tableau[i];
}
*moyenne = somme / nbre;
*mini = tableau[i];
*maxi = tableau[i];
for(i=0;i<nbre;i++)
{
if (tableau[i] < *mini) *mini = tableau[i];
if (tableau[i] > *maxi) *maxi = tableau[i];
}
}
int main()
{
int nbre, ok;
double* moyenne;
double* mini;
double* maxi;
do
{
printf("Combien de moyennes voulez vous saisir : (de 1 a 150) ");
ok = scanf("%d",&nbre);
while( getchar( ) != '\n' );
} while (!ok || nbre > 150 || nbre <1);
double* tableau = malloc(nbre * sizeof(double));
if (!tableau)
{
printf("Erreur\n");
exit(1);
}
else
{
saisie_moyennes(tableau,nbre);
calcul(tableau,nbre,&moyenne,&mini,&maxi);
printf("La moyenne est %f, le minimum est %f, le maximum est %f",*moyenne,*mini,*maxi);
}
free(tableau);
return 0;
} |
Pouvez-vous m'aider ? Merci !