题目描述
有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)
输入
学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。
输出
各门课的平均成绩 最高分的学生的数据(包括学号、姓名、3门课成绩)
样例输入
2 1 blue 90 80 70 b clan 80 70 60
样例输出
85 75 65 1 blue 90 80 70
#include <stdio.h>
struct Information
{
char num[16];
char name[32];
int grade_1;
int grade_2;
int grade_3;
};
void input(struct Information *a,int N);
void average_f(struct Information *a,int N);
void maxf(struct Information *a,int N);
int main()
{
int N;
scanf("%d",&N);
struct Information a[N];
input(a,N);
average_f(a,N);
printf("\n");
maxf(a,N);
return 0;
}
void input(struct Information *a,int N)//输入成员数据
{
int i;
for(i=0;i<N;i++)
{
scanf("%s %s %d %d %d",&(a[i].num),&(a[i].name),
&(a[i].grade_1),&(a[i].grade_2),&(a[i].grade_3));
}
}
void average_f(struct Information *a,int N)//平均分
{
int i;
float average;
for(i=0,average=0;i<N;i++)
{
average+=a[i].grade_1/(float)N;
}
printf("%.0f ",average);
for(i=0,average=0;i<N;i++)
{
average+=a[i].grade_2/(float)N;
}
printf("%.0f ",average);
for(i=0,average=0;i<N;i++)
{
average+=a[i].grade_3/(float)N;
}
printf("%.0f ",average);
}
void maxf(struct Information *a,int N)//最高分
{
int i,max;
max=0;
for(i=1;i<N;i++)
{
if((a[max].grade_1+a[max].grade_2+a[max].grade_3)
<(a[i].grade_1+a[i].grade_2+a[i].grade_3))
{
max=i;
}
}
printf("%s %s %d %d %d",a[max].num,a[max].name,
a[max].grade_1,a[max].grade_2,a[max].grade_3);
}