原题链接:[编程入门]结构体之成绩统计2
解题思路:阅读题目,我们可以发现,本题分为两个任务:
一、计算三科分别的平均成绩。
二、输出成绩最高的学生的信息。
先来本题所需的主要知识点:结构体
结构体的用处是定义一个“数据类型”。每个数据类型内包括各类型的多个数据。
定义结构体的基本写法
struct 结构类型名 { 数据类型 成员名 1; 数据类型 成员名 2; ...... 数据类型 成员名 n; };
若要定义数组,可以在分号之前直接写上变量名和数量。
接下来,解决第一个任务。
每个任务分为三个部分。
第一部分:定义需要的变量
计算平均数,当然要计算总和,因为有三个成绩,所以需要定义三个总和。
因为要除以数量,最好用double类型。
double sum_a=0,sum_b=0,sum_c=0;
然后是循环中的部分
把每个总和加上对应的成绩。
sum_a+=h[i].sco_a; sum_b+=h[i].sco_b; sum_c+=h[i].sco_c;
最后是输出
cout<<sum_a/n<<' '<<sum_b/n<<' '<<sum_c/n<<endl;
很好,接下来是第二个任务。
第一部分
需要一个max_stu记录成绩最好学生学号和一个max_score比较最高的分数。
第二部分
若该学生的总分大于max_score,那么他就是目前分数最高的学生。
h[i].score=h[i].sco_a+h[i].sco_b+h[i].sco_c; if(h[i].score>max_score) { max_score=h[i].score; max_stu=i; }
第三部分,输出这个选定的学生的信息。
cout<<h[max_stu].id<<' '<<h[max_stu].name<<' '<<h[max_stu].sco_a<<' '<<h[max_stu].sco_b<<' '<<h[max_stu].sco_c<<endl;
参考代码:
#include <iostream> using namespace std; struct student { char id,name[100]; double sco_a,sco_b,sco_c,score; }h[1000]; int main() { int n,max_stu; double sum_a=0,sum_b=0,sum_c=0,max_score=0; cin>>n; for(int i=1;i<=n;i++) { cin>>h[i].id>>h[i].name>>h[i].sco_a>>h[i].sco_b>>h[i].sco_c; sum_a+=h[i].sco_a; sum_b+=h[i].sco_b; sum_c+=h[i].sco_c; h[i].score=h[i].sco_a+h[i].sco_b+h[i].sco_c; if(h[i].score>max_score) { max_score=h[i].score; max_stu=i; } } cout<<sum_a/n<<' '<<sum_b/n<<' '<<sum_c/n<<endl; cout<<h[max_stu].id<<' '<<h[max_stu].name<<' '<<h[max_stu].sco_a<<' '<<h[max_stu].sco_b<<' '<<h[max_stu].sco_c<<endl; return 0; }
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复