Bonjour à tous, pouvez vous m'aider pour cet exercice de langage C, j'en sort pas. Merci d'avance
Ecrire un programme en langage C qui contient les opérations suivantes:
- Définir un type structure appelé étudiant permettant de représenter un étudiant avec les champs nom, prénom, numéro (de type chaine de caractères) et note de type réel;
- Remplir un tableau de 10 étudiants d'une classe avec des informations données par l'utilisateur
- Afficher les noms, prénoms, numéros et notes des 10 étudiants de la classe.
- Chercher et afficher la plus grande note de la classe
- Chercher et afficher le nombre d'étudiants qui ont une note supérieure ou égale à 10.
- Chercher et afficher la moyenne des notes des étudiants de la classe.
typedef struct etudient{
char nom[10];
char prenom[10];
int numero[6];
float note;
float pgnote
int i;
float tabnotes[10] ;
} ;
printf("Entrer le nom de l'etudiat:\n");
scanf("%s",&E.nom);
printf("Entrer le prenom de l'etudiant:\n");
scanf("%s",&E.prenom);
printf("Entrer le numero de l'etudiant‚:\n");
scanf("%d",&E.numero);
printf("Entrer la note de l'etudiant‚:\n");
scanf("%d",&n.note);
for (i = 0 ; i < 10 ; i++)
printf ("donner la note N°" i")
scanf(""%d",&n.tabnotes[i]) ;
if ("pgnote >tabnotes[i]')
printf("la plus grande note est %d",pgnote)
Bon,
D'abord, tout programme écrit en C doit comporter une fonction main(...). Je vous laisse regarder votre cours.
Vous utilisez des fonctions (printf, scanf). Le C ne les connait pas, il faut dire où elles se trouvent. C'est à dire qu'il faut rajouter des #include ... Je vous laisse regarder votre cours.
Vous faites référence à une variable E, je n'ai pas vu sa déclaration.
Votre boucle for ne va exécuter que la ligne suivante. Il manque des choses.
il y a un nombre impair de guillemets dans 2 instructions.
Il faut initialiser la variable pgnote.
Pour l'instant, c'est un début.
Bonjour voici ce que j'ai fait
#include <stdio.h>
#include <stdlib.h>
struct Etudiant
{
char nom[10];
char prenom[10];
char numero[20];
float note[20];
float moyenne;
};
int main()
{
struct etudiant etd[N];
int i, j, somme = 0;
for (i = 0; i<N; i++)
{
printf ("...... Veillez saisir les informations du %d etudiant .....\n" , i+1);
printf ("Entrer le nom \n" );
scanf ("%s" ,&etd[i].Nom );
printf ("Entrer le prenom \n" );
scanf ("%s" ,&etd[i].prenom );
for (j = 0; j<M; j++)
printf ("Entrer la note %d \n" );
scanf ("%f" ,&etd[i].note[j] );
somme = somme + etd[i].note[j];
};
etd[i].moyenne = somme / N;
Je suis vrément bloqué pour le reste
Je ne vais pas faire le programme à votre place.
Est-ce que vous avez un compilateur ?
Si oui, quel est le résultat de la compile ?
Qu'est-ce qui vous a fait passer de la version 1 à la version 2 ?
Vous êtes bloqué, d'accord, mais par quoi ?
Oui j'ai un compilateur mais avant de compiler il faut terminer.
Je suis bloqué pour ces deux lignes:
- Chercher et afficher la plus grande note de la classe
- Chercher et afficher le nombre d'étudiants qui ont une note supérieure ou égale à 10.
Commencez par compiler et exécuter la lecture des données.
Quand ça marchera, vous ferez les calculs de moyenne, minimum et maximum de la classe.
#include <stdio.h>
#include <stdlib.h>
struct Etudiant
{
char nom[20];
char prenom[20];
char numero[20];
float note[20];
float moyenne;
};
main()
{
struct Etudiant etd[10];
int i;
for(i = 0; i<10; i++)
{
printf ("...... Veillez saisir les informations du %d etudiant .....\n" , i+1);
printf ("Entrer le nom \n" );
scanf ("%s" ,&etd[i].nom );
printf ("Entrer le prenom \n" );
scanf ("%s" ,&etd[i].prenom );
printf ("Entrer la note %d \n" );
scanf ("%f" ,&etd[i].note);
};
for(i = 0; i<10; i++)
{
printf ("votre nom est : %s:\n",etd[i].nom );
printf ("votre prenom est : %s:\n",etd[i].prenom );
printf ("votre nom est : %f:\n",etd[i].note );
}
getch ();
J'ai compilé ceci et ça marche
Vous êtes sûr ?
Alors modifiez votre programme pour seulement 2 étudiants et 3 notes et montrez le résultat de l'impression.
C'est quoi ce très grand nombre après le texte "Entrer la note" ?
Le résultat, c'est que donne les 3 printf.
Pourquoi vous n'avez pas réussi à entrer le nom du 3è étudiant ?
Je veux bien vous aider, mais il faut jouer le jeu.
Voici 3 notes mais les nombres après la note viennent directement du compilateur. Je ne sais pas pourquoi?
Evidemment que ce grand nombre ne vient pas du compilateur.
En fait, ce grand nombre correspond à l'adresse du tableau note.
Voila à peu près ce que vous devriez obtenir.
J'ai compilé pour 3 personnes, mais le problème se trouve au niveau des notes. Je ne sais où se trouve l'erreur. Sinon qu'est ce qu'on doit modifier dans le programme
Bon, on avance, mais si vous voulez bien, on continuera demain.
Vous auriez pu corriger la faute de frappe nom -> note.
Il me parait nécessaire que vous montriez votre code actuel, et que vous disiez si vous avez exactement ce que vous attendiez.
Voici le code actuel
#include <stdio.h>
#include <stdlib.h>
struct Etudiant
{
char nom[20];
char prenom[20];
char numero[20];
float note[10];
};
main()
{
int i;
struct Etudiant etd[10];
for(i = 0; i<3; i++)
{
printf ("...... Veillez saisir les informations du %d etudiant .....\n" , i+1);
printf ("Entrer le nom \n" );
scanf ("%s" ,&etd[i].nom );
printf ("Entrer le prenom \n" );
scanf ("%s" ,&etd[i].prenom );
printf ("Entrer la note %d \n" );
scanf ("%f" ,&etd[i].note);
}
for(i = 0; i<3; i++)
{
printf ("...... Affichage .....\n\n" );
printf ("votre nom est : %s:\n",etd[i].nom );
printf ("votre prenom est : %s:\n",etd[i].prenom );
printf ("votre note est : %f:\n",etd[i].note );
}
getch ();
}
Bon, soyons sérieux cinq minutes.
Votre code ne peut pas sortir les impressions que vous avez montrées.
Je vous indique les 4 lignes qui sont fausses (sauf erreur de ma part)
scanf ("%s" ,&etd[i].nom );
scanf ("%s" ,&etd[i].prenom );
scanf ("%f" ,&etd[i].note);
printf ("votre note est : %f:\n",etd[i].note );
Si vous voulez qu'on vous donne le code, c'est à dire le corrigé, dites-le simplement. Je crois que ce n'est par interdit par la charte, mais moi, je ne ferai pas.
je n'ai aucun INTÉRÊT de se tromper moi même. Je ne cherche pas qu'on me donne le corrigé, sinon je ne passe tout mon temps depuis 3 jours sur cet exercice. Je n'ai aucun intérêt de vous de donner une impression que j'ai pas codé. J'utilise DEVC++4.9.9.2. Si vous doutez essayez le avec ce même code. Moi je cherche de l'aide je ne cherche pas qu'on fasse l'exercice à ma place.
Bon, les 4 lignes que j'ai indiquées sont fausses. A vous de les corriger.
Elles sont fausses quel que soit le compilateur.
La fonction scanf est généralement déconseillée. Je crois que tout le monde est d'accord pour utiliser plutôt gets et sscanf, ce qui permet de savoir ce qu'on fait.
Mais je ne suis pas persuadé que là réside le problème.
Petite indication, dans la fonction scanf, pourquoi mettez-vous un '&' avant le nom de la variable ?
Que représente la variable etd[i].note ?
etd[i].note : nous permet d'accéder à un membre
Pour les 4 lignes je ne vois pas où se situent les erreurs;
Bonsoir,
Je repose mes questions
Dans la fonction scanf, pourquoi mettez-vous un '&' avant le nom de la variable ?
etd[i].note représente quoi ? une date, un nom, une appréciation ?
Bonjour
Oui, le %d dans le printf cité est inutile, naturellement c'est lui qui provoque l'affichage de n'importe quoi. On peut supposer que le code d'origine devait être quelque-chose du genre : printf("entrer la Nème %d note\n",j);
Pour la seconde observation, non, bien-sûr, mais notre ami n'a pas réagi lorsque je lui ai proposé de rentrer 3 notes.
Mais si tu veux, lafol, tu reprends la main.
j'ai l'impression qu'il a surtout grand besoin de relire son cours, à défaut celui du site du zéro, en particulier sur l'utilisation des pointeurs.
Oui, tout à fait d'accord, mais je pense qu'essayer de répondre aux questions que je lui ai posées peut l'aider à comprendre. Une réponse fausse est toujours préférable à pas de réponse du tout. L'important est de se poser la question, par exemple "pourquoi donc j'ai mis une esperluette ? Parce que j'ai copié un bout de code (mauvaise réponse) ; parce que la fonction scanf et ses copines ont besoin d'adresse comme paramètre (bonne réponse).
etd[i].note : pour accéder à la variable note on fait nom de la variable etuiant puis point puis note ( le point POINT . est un opérateur qui nous permet d'accéder à un membre de la variable étudiant)
je pensais que c'est nécessaire de mettre &. Mais j'ai constaté que si je l'enlève en compilant le résultat ne change pas. Pouvez vous m'expliquer
Rapidement.
'note' est déclaré dans votre structure en tant que tableau de 10 éléments.
Or quand vous faites un lecture (scanf) vous ne donnez qu'une seule valeur, une note en l'occurrence.
Il faut donc préciser le rang de la note que vous lisez et que vous voulez stocker.
Il faut bien vous dire UNE FOIS POUR TOUTES que l'ordinateur est d'une bêtise inimaginable.
Donc si vous voulez lui dire qu'il stocke un valeur, il faut lui dire où.
Le problème n'est pas d'essayer de le retirer, de voir si ça marche ou pas, mais de comprendre ce que vous faites.
Votre seconde réponse est arrivée entre temps. Vous devez ABSOLUMENT comprendre pourquoi et quand on met une esperluette.
Laissez le hasard à ceux qui font des probas. L'informatique demande une rigueur d'une précision extrême.
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :