11.5 有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩,从键盘输入10个学生数据,要求输出3门课程的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课程成绩、平均分数)
#include <stdio.h>
typedef struct _STU
{
int id;
char name[32];
float score[3];
}STU;
void Input(STU s[], int len)
{
for (int i = 0; i < len; ++i)
{
printf("请输入第%d个学生信息:\n", i + 1);
printf("学号:");
scanf("%d", &s[i].id);
printf("姓名:");
scanf("%s", s[i].name);
printf("三门课成绩:");
for (int j = 0; j < 3; ++j)
{
scanf("%f", &s[i].score[j]);
}
}
}
void GetAvg(STU s[], int len, float avg[])
{
avg[0] = avg[1] = avg[2] = 0.0;
for (int i = 0; i < len; ++i)
{
for (int j = 0; j < 3; ++j)
{
avg[j] += s[i].score[j];
}
}
for (int j = 0; j < 3; ++j)
{
avg[j] /= len;
}
}
float GetTotalScore(STU* p)
{
float sum = 0;
for (int i = 0; i < 3; ++i)
{
sum += p->score[i];
}
return sum;
}
int GetHighestScore(STU s[], int len)
{
int m = 0;
for (int i = 1; i < len; ++i)
{
if (GetTotalScore(&s[i]) > GetTotalScore(&s[m]))
{
m = i;
}
}
return m;
}
int main()
{
STU s[10];
float avg[3];
int index = 0;
Input(s, 10);
puts("----------------------");
GetAvg(s, 10, avg);
index = GetHighestScore(s, 10);
printf("三门课的总平均成绩分别为:");
for (int i = 0; i<3; ++i)
{
printf("%.1f,", avg[i]);
}
puts("\b;");
printf("最高分的学生信息是:\n学号:%d\n姓名:%s\n成绩:%.1f,%.1f,%.1f\n",
s[index].id, s[index].name, s[index].score[0],
s[index].score[1], s[index].score[2]);
return 0;
}