# include # include // Information about the students typedef struct{ int ID; char Answers[10]; int Score; char LetterGRade; } Student_Info; // Information about the class typedef struct{ char AnswerKey[10]; double average; } Course_Info; // Calculate a student's score given his answers and the answer key int CalcScore (char StudentAnswers[10], char AnswerKey[10]){ int i; int grade=0; for (i=0;i<10;i++) if (StudentAnswers[i]==AnswerKey[i]) grade++; return grade; } void main(void){ Student_Info MyStudents[20]; // Maximum of 20 students Course_Info EECE1207; FILE *fp; int NumStudents=0,i; EECE1207.average=0.0; // Initialize class average; // Open file for reading fp=fopen("grades.txt","r"); if (fp==NULL){ printf("Could not open file for reading\n"); exit(0); } // First read the answer key fscanf(fp,"%s",EECE1207.AnswerKey); while (!feof(fp)){ fscanf(fp,"%d%s", &(MyStudents[NumStudents].ID),MyStudents[NumStudents].Answers); MyStudents[NumStudents].Score=CalcScore(MyStudents[NumStudents].Answers,EECE1207.AnswerKey); EECE1207.average+= MyStudents[NumStudents].Score; NumStudents++; } EECE1207.average /= NumStudents; printf("Class average is %f\n\n",EECE1207.average); printf("%-10s %-15s %-10s\n","ID","Score","Letter"); printf("-----------------------------------\n"); for (i=0;i EECE1207.average) printf("%-10d %-15d %-10s\n",MyStudents[i].ID,MyStudents[i].Score,"PASS"); else printf("%-10d %-15d %-10s\n",MyStudents[i].ID,MyStudents[i].Score,"FAIL"); } fclose(fp); }