有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩。读入这10个学生的数据,要求输出3门课程的总平均成绩,以及个人平均分最高的学生的数据

输入
共有10行,每行包含了一个学生的学号(整数)、名字(长度不超过19的无空格字符串)和3门课程的成绩(0至100之间的整数),用空格隔开。

输出
第一行包含了3个实数,分别表示3门课程的总平均成绩,保留2位小数,每个数之后输出一个空格。
第二行输出个人平均分最高的学生的数据,与输入数据格式相同。如果有多位个人平均分最高的学生,输出按照输入顺序第一个最高分的学生数据。
请注意行尾输出换行。
代码如下:

#include<stdio.h>
#define N 10
typedef struct student{
	int num;
	char name[20];
	int score[3];
	float ave;
}Student;
Student stu[N];//定义结构体数组 

void input()//输入学生信息 
{
	for(int i=0;i<N;i++)
	{
		scanf("%d %s %d %d %d",&stu[i].num,&stu[i].name,
		&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
	}
}
void output()//输出信息 
{
	int i;
	float sum1=0,sum2=0,sum3=0;
	for(i=0;i<N;i++)
	{
		stu[i].ave=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;//记录每个同学的平均成绩
		sum1+=stu[i].score[0];//记录第一门学科总成绩
		sum2+=stu[i].score[1];//记录第二门学科总成绩
		sum3+=stu[i].score[2];//记录第三门学科总成绩
	}
	printf("%.2f %.2f %.2f\n",sum1/N,sum2/N,sum3/N);//输出各科总平均成绩 
	
	float max=stu[0].ave;//假设第一个同学最高分 
	int flag;
	for(i=0;i<N;i++)
	{
		if(stu[i].ave>max)
		{
			max=stu[i].ave;
			flag=i;//记录最高平均分成绩同学 
		}	
	}
	printf("%d %s %3d %3d %3d %.2f\n",stu[flag].num,stu[flag].name,
	stu[flag].score[0],stu[flag].score[1],stu[flag].score[2],stu[flag].ave);//输出最高分同学信息 
	
}
int main()
{
	input();
	output();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42552533/article/details/85840692