1. 程式人生 > >有10個學生,每個學生的資料包括學號、姓名、3門課程的成績。讀入這10個學生的資料,要求輸出3門課程的總平均成績,以及個人平均分最高的學生的資料

有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;
}