#include <stdio.h>
#include <stdlib.h>
struct Student
{
int id;
char name[50];
float m1, m2, m3, m4;
float total, avg;
char grade[3];
};
int main()
{
FILE *fp;
struct Student s[100], temp;
int count = 0, i, j;
float sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0;
fp = fopen("student.txt", "r");
if (fp == NULL)
{
printf("File not found!\n");
return 1;
}
while (fscanf(fp, "%d %s %f %f %f %f",
&s[count].id,
s[count].name,
&s[count].m1,
&s[count].m2,
&s[count].m3,
&s[count].m4) != EOF)
{
s[count].total = s[count].m1 + s[count].m2 +
s[count].m3 + s[count].m4;
s[count].avg = s[count].total / 4.0;
if (s[count].avg >= 80)
sprintf(s[count].grade, "A+");
else if (s[count].avg >= 70)
sprintf(s[count].grade, "A");
else if (s[count].avg >= 60)
sprintf(s[count].grade, "B");
else if (s[count].avg >= 50)
sprintf(s[count].grade, "C");
else
sprintf(s[count].grade, "F");
sum1 += s[count].m1;
sum2 += s[count].m2;
sum3 += s[count].m3;
sum4 += s[count].m4;
count++;
}
fclose(fp);
printf("ID\tName\tTotal\tAverage\tGrade\n");
for(i=0;i<count;i++)
{
printf("%d\t%s\t%.2f\t%.2f\t%s\n",
s[i].id,
s[i].name,
s[i].total,
s[i].avg,
s[i].grade);
}
for(i=0;i<count-1;i++)
{
for(j=i+1;j<count;j++)
{
if(s[j].total > s[i].total)
{
temp = s[i];
s[i] = s[j];
s[j] = temp;
}
}
}
printf("\nTop Three Students:\n");
for(i=0;i<3 && i<count;i++)
{
printf("%d %s %.2f\n",
s[i].id,
s[i].name,
s[i].total);
}
float avg1 = sum1 / count;
float avg2 = sum2 / count;
float avg3 = sum3 / count;
float avg4 = sum4 / count;
printf("\nSubject Averages:\n");
printf("Subject1 = %.2f\n", avg1);
printf("Subject2 = %.2f\n", avg2);
printf("Subject3 = %.2f\n", avg3);
printf("Subject4 = %.2f\n", avg4);
float max = avg1;
int subject = 1;
if(avg2 > max)
{
max = avg2;
subject = 2;
}
if(avg3 > max)
{
max = avg3;
subject = 3;
}
if(avg4 > max)
{
max = avg4;
subject = 4;
}
printf("\nSubject %d has the highest average (%.2f).\n",
subject, max);
return 0;
}