解题思路:
创建结构体将学号,姓名,成绩等不同的数据类型组合在一起形成新的数据类型Student。在主函数中定义变量N用来保存学生人数,因为学生的数量不是一个,所以用数组来保存学生的信息,接着定义Ane_sum,Two_sum,Three_sum来保存各课成绩的总成绩。用Ane_aver,Two_aver,Three_aver保存各课成绩的平均成绩。
因为运用到数组保存信息,所以用for循环来输入学生的信息,代码如下:
for(i=0;i<N;i++) { cin>>student[i].Id; cin>>student[i].Name; cin>>student[i].Ane_score; cin>>student[i].Two_score; cin>>student[i].Three_score; }
当学生的信息都输入之后,需要先求出每门成绩的总和才能求平均成绩,这里为了让代码简短一些,所以求每门成绩的总和与每个学生自己总成绩的代码写在了一起,计算完这些成绩后即可输出,代码如下:
for(i=0;i<N;i++) { Ane_sum+=student[i].Ane_score; Two_sum+=student[i].Two_score; Three_sum+=student[i].Three_score; student[i].Sum_score=student[i].Ane_score +student[i].Two_score +student[i].Three_score; } //定义新的变量保存每门成绩的平均成绩 double Ane_aver=Ane_sum/N; double Two_aver=Two_sum/N; double Three_aver=Three_sum/N; //输出每门课的平均成绩 cout<<Ane_aver<<" " <<Two_aver<<" " <<Three_aver<<endl;
最后找出总分最高的同学,需要通过for循环遍历所有的同学,然后使用打擂台的方法找出总分数最高的同学。所谓的打擂台即为假设数组中第一个同学是分数最高的,即为擂主,然后和后边的同学一一进行比较,如果后边同学的成绩有更高的,则替换掉现有擂主成为新的擂主,接着和后边的同学继续比较,直到找出分数最高的同学位置,代码如下:
//找到分数最高的同学 for(i=1;i<N;i++) { if(student[0].Sum_score<student[i].Sum_score) { student[0].Id=student[i].Id; student[0].Name=student[i].Name; student[0].Ane_score=student[i].Ane_score; student[0].Two_score=student[i].Two_score; student[0].Three_score=student[i].Three_score; student[0].Sum_score=student[i].Sum_score; } }
注意事项:
在寻找到分数最高的同学时不要只替换总成绩,应把全部的数据都替换掉。
参考代码:
#include<iostream> #include<string> using namespace std; //创建学生结构体 struct Student { string Id; string Name; double Ane_score; double Two_score; double Three_score; double Sum_score; }; int main() { int N; cin>>N; Student student[N]; double Ane_sum=0; double Two_sum=0; double Three_sum=0; int i; //输入学生信息 for(i=0;i<N;i++) { cin>>student[i].Id; cin>>student[i].Name; cin>>student[i].Ane_score; cin>>student[i].Two_score; cin>>student[i].Three_score; } //求每门成绩的总成绩和每个学生的总成绩 for(i=0;i<N;i++) { Ane_sum+=student[i].Ane_score; Two_sum+=student[i].Two_score; Three_sum+=student[i].Three_score; student[i].Sum_score=student[i].Ane_score +student[i].Two_score +student[i].Three_score; } //定义新的变量保存每门成绩的平均成绩 double Ane_aver=Ane_sum/N; double Two_aver=Two_sum/N; double Three_aver=Three_sum/N; //输出每门课的平均成绩 cout<<Ane_aver<<" " <<Two_aver<<" " <<Three_aver<<endl; //找到分数最高的同学 for(i=1;i<N;i++) { if(student[0].Sum_score<student[i].Sum_score) { student[0].Id=student[i].Id; student[0].Name=student[i].Name; student[0].Ane_score=student[i].Ane_score; student[0].Two_score=student[i].Two_score; student[0].Three_score=student[i].Three_score; student[0].Sum_score=student[i].Sum_score; } } //输出最高分数同学的各项信息 cout<<student[0].Id<<" " <<student[0].Name<<" " <<student[0].Ane_score<<" " <<student[0].Two_score<<" " <<student[0].Three_score<<endl; return 0; }
0.0分
12 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复