有10個學生,每個學生的資料包括學號、姓名、3門課程的成績。讀入這10個學生的資料,要求輸出3門課程的總平均成績,以及個人平均分最高的學生的資料
阿新 • • 發佈:2019-01-07
輸入
共有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; }