解题思路:由题意可知,利用结构体分别定义学号,姓名,三科成绩;再分别计算各科成绩的平均分;再计算总分,通过计算总分,得知最高分为哪一个,再输出那一个的各种信息。
注意事项:学号有数字和字母,应该定义为数组。
参考代码:
#include
struct student //声明结构体各部分信息
{
char temp[10]; //学号
char name[20]; //姓名
int a; //学科a
int b; //学科b
int c; //学科c
};
int main()
{
struct student t[99];//定义结构体
int n,i;int sum,o,k,p,q;int a[100];
sum=0;
scanf("%d",&n); //输入有多少个学生
for(i=0;i<n;i++)
{
scanf("%s %s %d %d %d",&t[i].temp,&t[i].name,&t[i].a,&t[i].b,&t[i].c);
} //利用循环分别输入各个学生的信息
for(i=0;i<n;i++)
{
sum+=t[i].a;
}
o=sum/n; //计算学科a的平均分
sum=0; //令sum重置为0,不然会有叠加,下同。
for(i=0;i<n;i++)
{
sum+=t[i].b;
}
p=sum/n;//计算学科b的平均分
sum=0;
for(i=0;i<n;i++)
{
sum+=t[i].c;
}
q=sum/n;//计算学科c的平均分,到这sum重不重置无所谓,下面用不到sum
for(i=0;i<n;i++)
{
a[i]=t[i].a+t[i].b+t[i].c; //令每个学生的总成绩为a数组里的某个元素
}
for(i=0;i<n-1;i++)//注意这里是比较n-1次
{
if(a[i+1]>a[i])//循环比较每个学生的总成绩
{
k=i+1; //得出总成绩最高的那个学生的序号
}
else
{
k=i;
}
}
printf("%d %d %d\n",o,p,q);//输出平均分,以及最高分学生的学号,姓名,三科成绩
printf("%s %s %d %d %d",t[k].temp,t[k].name,t[k].a,t[k].b,t[k].c);
return 0;
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复