有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求编程输出3门课平均成绩以及总分最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分数)。
输入
10个学生的 学号 姓名 课程1成绩 课程2成绩 课程3成绩
输出
(以下数据均保留两位小数) 课程1平均成绩 课程2平均成绩 课程3平均成绩
学号 姓名 课程1成绩 课程2成绩 课程3成绩 (总分最高的学生数据)
样例
标准输入复制文本 |
11 刘一 99 99 99 12 刘二 100 100 100 13 张三 50 50 50 14 刘四 60 60 60 15 刘五 70 70 70 16 刘六 99 99 99 17 刘七 100 80 100 18 刘八 50 50 50 19 刘九 60 60 60 20 刘十 70 70 70 |
标准输出复制文本 |
75.80 73.80 75.80 12 刘二 100.00 100.00 100.00 300.00 |
解题思路:
1、很明显,创建一个学生结构体,包含学号,姓名,三科分数。
2、再创一个平均分数组,用来统计所有人每一科的分数/3,从而得到平均分。
3、再用sum记录每个人的总分,然后max循环遍历找到最高总分同学的下标,再结构体输出此人的全部信息。
ps:过程有点繁琐,但做题过程中思路要清楚,敲时要细心!
#include <stdio.h>
#define N 10
struct Student
{
char num[10];
char name[10];
double score[3];
}student[N];
int main()
{
int i,j,k;
double sum = 0.0,max = 0.0,pjf[N];
for(i = 0;i < N;i++)
{
scanf("%s %s %f %f %f",student[i].num,student[i].name,&student[i].score[0],&student[i].score[1],&student[i].score[2]);
}
//求平均分
for(i = 0;i < N;i++)
{
pjf[0]+= student[i].score[0]/N;
pjf[1]+= student[i].score[1]/N;
pjf[2]+= student[i].score[2]/N;
}
//找最高分的同学
for(i = 0;i < N;i++)
{
sum = 0.0;//清零
for(j = 0;j < 3;j++)
{
sum += student[i].score[j];
}
if(sum > max)
{
max=sum;
k = i;
}
}
printf("%.2lf %.2lf %.2lf\n",pjf[0],pjf[1],pjf[2]);
printf("%s %s %.2f %.2f %.2f %.2f",student[k].num,student[k].name,student[k].score[0],student[k].score[1],student[k].score[2],max);
return 0;
}