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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
#include<stdlib.h>
#include<stdio.h>
int main()
{
int nbnotes,nbeleves, i=0, j=0;
float note=0;
float temp=0;
/* -ed- pas facile de taper 'en aveugle'... */
puts("Nombre d'eleves");
scanf("%d",&nbeleves);
/* -ed-
fflush(stdin);
n'existe pas en C.
fflush() n'est défini que pour les flux sortants...
bidouille infame:
*/
(void) getchar();
/* -ed- Les VLA sont C99.
Je ne connais pas d'implementation gratuite
conforme sur ce point.
*/
int tab_nbnotes[nbeleves];
float tab_notes[nbeleves][100];
float tab_moys[nbeleves];
/* -ed-
while (note != -1)
Un float ne peut pas etre compare a un entier.
Il faut faire la difference absolue et comparer a FLT_EPSILON
(<float.h>) ou, ici, tout simplement >=0
*/
puts("Notes (-1 pour terminer)");
while (note >= 0)
{
/* -ed- ajout */
printf("%2d : ", i + 1);
fflush (stdout);
scanf("%f",¬e);
(void) getchar();
/* -ed-
if (note < 0)
Tu voulais sans doute dire
*/
if (note >= 0)
{
tab_notes[j][i] = note;
}
i++;
}
/* -ed-
J'ai pas compris a quoi servait ce bazar...
i=0;
tab_nbnotes[j]=0;
for(i=0;i<=100;i++)
{
if(tab_notes[j][i] > 0)
{
tab_nbnotes[j]++;
}
}
*/
tab_nbnotes[j] = i;
/* -ed-
for(i=0;i<=100;i++)
Debordement du tableau (i<100)
Le tableau n'etant pas initialise,
le resultat est indertermine.
Il faut donc se limiter au nombre de notes.
*/
nbnotes = tab_nbnotes[j];
for (i = 0; i < nbnotes; i++)
{
temp += tab_notes[j][i];
}
/* -ed-
tab_moys[j] = temp/tab_nbnotes[j];
Simplification. Le nombre de notes, c'est nbnotes...
Il faut donc se proteger de nbnotes==0...
*/
if (nbnotes != 0)
{
tab_moys[j] = temp/nbnotes;
printf ("La moyenne de l'eleve %d est %f (%d notes)\n"
, j
, tab_moys[j]
, nbnotes
);
}
return 0;
} |
Partager