Problème avec mon code C
Résolu
sonic1ne
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
sonic1ne Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
sonic1ne Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
Bonjour, Je programme en C depuis peu de temp et j'essaie de coder un petit programme en c qui affiche le nom, prénom, l'âge des élèves d'une classe ainsi que leur notes scolaires et la moyenne de celles-ci. Mon problème et, que je ne trouve pas comment on fais la somme des notes de chaque élèves dans le champ notes d'un tableau de structure, et ensuite afficher la moyenne de cette somme.
Voici le code :
et voici ce que j'obtient comme résultat :
Le résultat que j'aimerez obtenir et du genre : moyenne élève1 = 14,6 et moyenne1 élève2 = 12,4.
Quelqu'un pourrait-il m'indiqué ce qui foire dans mon code. Merci.
Voici le code :
#include <stdio.h> #include <string.h> #define TAILLE_NOM 10 #define TAILLE_PRENOM 2*TAILLE_NOM #define NB_NOTES 5 #define MAX_ETUDIANTS 50 main() { int i,j, nbelements, nbeleves,finir_saisie ; /* declaration du type etudiant */ struct etudiant { char nom[TAILLE_NOM] ; char prenom[TAILLE_PRENOM] ; float notes[NB_NOTES]; float somme[NB_NOTES]; int age; } ; /* declaration du tableau des eleves */ struct etudiant tab_eleves[MAX_ETUDIANTS]; /* === DEBUT DU PROGRAMME === */ i=0; finir_saisie=0; /* boucle de saisie */ while (! finir_saisie) { printf("Entrez un nom ( nom=fin pour terminer):"); scanf("%s",tab_eleves[i].nom); finir_saisie=((strcmp(tab_eleves[i].nom,"fin"))==0); /* si la saisie n'est pas finie */ /* on demande le reste des informations */ if (! finir_saisie) { printf("Entrez un prénom:"); scanf("%s",tab_eleves[i].prenom); printf("Entrez un âge:"); scanf("%d",&tab_eleves[i].age); /* --- saisie des notes --- */ printf("Entrez les %d notes :", NB_NOTES); for (j=0; j<NB_NOTES; j++) { scanf("%f", &tab_eleves[i].notes[j]); tab_eleves[i].somme[j] += tab_eleves[i].notes[j]; /* --- calcul de la moyenne --- */ tab_eleves[i].somme[j] /= NB_NOTES; } i++ ; } printf("\n"); } /* on met a jour la variable de controle du tableau */ nbeleves = i ; nbelements = j; /* boucle de verification */ printf("\n----- Vérification saisie ------\n"); for (i=0; i<nbeleves; i++) { printf("\neleve %2d : ",i); printf("%10s %10s ",tab_eleves[i].nom,tab_eleves[i].prenom); printf("%2d \n", tab_eleves[i].age); printf("Notes :"); for (j=0; j<NB_NOTES; j++) printf("%6.2f", tab_eleves[i].notes[j]); printf("\nMoyenne :"); for (j=0; j<nbelements; j++) { printf("%6.2f", tab_eleves[i].somme[j]); } printf("\n"); } printf("\n"); }
et voici ce que j'obtient comme résultat :
Entrez un nom ( nom=fin pour terminer):nom1 Entrez un prénom:prenom1 Entrez un âge:30 Entrez les 5 notes :10 12.5 15 15.5 20 Entrez un nom ( nom=fin pour terminer):nom2 Entrez un prénom:prenom2 Entrez un âge:35 Entrez les 5 notes :12 15 10 16 9 Entrez un nom ( nom=fin pour terminer):fin ----- Vérification saisie ------ eleve 0 : nom1 prenom1 30 Notes : 10.00 12.50 15.00 15.50 20.00 Moyenne : 2.00 2.50 3.00 3.10 4.00 eleve 1 : nom2 prenom2 35 Notes : 12.00 15.00 10.00 16.00 9.00 Moyenne : 2.40 3.00 2.00 3.20 1.80
Le résultat que j'aimerez obtenir et du genre : moyenne élève1 = 14,6 et moyenne1 élève2 = 12,4.
Quelqu'un pourrait-il m'indiqué ce qui foire dans mon code. Merci.
A voir également:
- Problème avec mon code C
- Code ascii - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code blocks - Télécharger - Langages
3 réponses
jvois pas pourquoi tu utilises un tableau pour stocker la somme une variable float suffit
essaye ça
essaye ça
#include <stdio.h> #include <string.h> #define TAILLE_NOM 10 #define TAILLE_PRENOM 2*TAILLE_NOM #define NB_NOTES 5 #define MAX_ETUDIANTS 50 main() { int i,j, nbelements, nbeleves,finir_saisie ; /* declaration du type etudiant */ struct etudiant { char nom[TAILLE_NOM] ; char prenom[TAILLE_PRENOM] ; float notes[NB_NOTES]; float somme; int age; } ; /* declaration du tableau des eleves */ struct etudiant tab_eleves[MAX_ETUDIANTS]; /* === DEBUT DU PROGRAMME === */ i=0; finir_saisie=0; /* boucle de saisie */ while (! finir_saisie) { printf("Entrez un nom ( nom=fin pour terminer):"); scanf("%s",tab_eleves[i].nom); finir_saisie=((strcmp(tab_eleves[i].nom,"fin"))==0); /* si la saisie n'est pas finie */ /* on demande le reste des informations */ if (! finir_saisie) { printf("Entrez un prénom:"); scanf("%s",tab_eleves[i].prenom); printf("Entrez un âge:"); scanf("%d",&tab_eleves[i].age); /* --- saisie des notes --- */ printf("Entrez les %d notes :", NB_NOTES); for (j=0; j<NB_NOTES; j++) { scanf("%f", &tab_eleves[i].notes[j]); tab_eleves[i].somme += tab_eleves[i].notes[j]; } i++ ; } printf("\n"); } /* on met a jour la variable de controle du tableau */ nbeleves = i ; nbelements = j; /* boucle de verification */ printf("\n----- Vérification saisie ------\n"); for (i=0; i<nbeleves; i++) { printf("\neleve %2d : ",i); printf("%10s %10s ",tab_eleves[i].nom,tab_eleves[i].prenom); printf("%2d \n", tab_eleves[i].age); printf("Notes :"); for (j=0; j<NB_NOTES; j++) printf("%6.2f", tab_eleves[i].notes[j]); printf("\nMoyenne :"); printf("%6.2f", tab_eleves[i].somme/NB_NOTES); printf("\n"); } printf("\n"); }
Salut,
Tout d'abord, je te conseille plutôt de mettre ta structure en dehors de ton main. C'est plus lisible.
Ensuite main renvoie un int. Donc int main(void) et à la fin return 0;
Ensuite pour la moyenne, je commande de créer tout simplement un autre champ dans ta structure intitulée moyenne.
Une fois que tu as fait les sommes des notes, et que tu as divisé par le nombre de notes, tu stockes le résultat dans ce champ. Tu n'as pas besoin du champ somme. Ou alors pas en tableau.
Ce qui donnerait :
Et après t'affiches le champ moyenne.
Cdlt
Tout d'abord, je te conseille plutôt de mettre ta structure en dehors de ton main. C'est plus lisible.
Ensuite main renvoie un int. Donc int main(void) et à la fin return 0;
Ensuite pour la moyenne, je commande de créer tout simplement un autre champ dans ta structure intitulée moyenne.
Une fois que tu as fait les sommes des notes, et que tu as divisé par le nombre de notes, tu stockes le résultat dans ce champ. Tu n'as pas besoin du champ somme. Ou alors pas en tableau.
Ce qui donnerait :
float somme=0; for (int j=0; j<NB_NOTES; j++) { somme+=tab_eleves[i].notes[j]; } tab_eleves[i].moyenne = somme/NB_NOTES;
Et après t'affiches le champ moyenne.
Cdlt