原题链接:[编程入门]结构体之成绩统计2
解题思路:
因为每位同学的数据都有多项,因此想到用类来存储每个学生。然后题目中有统计平均值和比较大小,就想到用类的成员函数来实现。
注意事项:
(0)因为用了容器来存储学生对象,这样就不能直接访问类对象的成员变量(比如成绩1、成绩2等等); 因此就创建一个用来访问这些成员变量的成员函数,然后访问时直接调用这些成员函数即可。 (1)在这个代码里,vector完全可以用数组来代替:Student a[100];效果相同。 (2)注意在成员函数里面都是运用的引用“&”,这样在函数使用时就不用进行对实参的拷贝了。
参考代码:
#include<iostream> #include<vector> #include<string> using namespace std; class Student //创建一个学生类 { public: //用来输入每个学生的数据 void inputs() { cin >> num >> name >> score1 >> score2 >> score3; } //以下三个函数分别用来获取每个学生的第一个、第二个和第三个成绩,以供后面进行相加 int Score1(Student &s1) { return s1.score1; } int Score2(Student& s1) { return s1.score2; } int Score3(Student& s1) { return s1.score3; } //重载大于号>,用来比较学生的成绩 bool operator > (Student& s1) { if ((score1 > s1.score1) && (score2 > s1.score2) && (score3 > s1.score3)) return 1; else return 0; } //输出学生的各项数据 void printf() { cout << num << " " << name << " " << score1 << " " << score2 << " " << score3; } private: string num; string name; int score1; int score2; int score3; }; int main() { vector v(100);//创建一个含100个学生对象的vector容器v int n; cin >> n; for (int i = 0; i < n; i++) //调用类中的input函数来逐项输入 v[i].inputs(); //计算每门成绩的平均值 int sum1 = 0, sum2 = 0, sum3 = 0; for (vector<Student>::iterator it = v.begin(); it != v.end(); it++) { sum1 += it->Score1(*it);//第一个成绩的总值 } for (vector<Student>::iterator it = v.begin(); it != v.end(); it++) { sum2 += it->Score2(*it);//第二个成绩的总值 } for (vector<Student>::iterator it = v.begin(); it != v.end(); it++) { sum3 += it->Score3(*it);//第三个成绩的总值 } cout << sum1 / n << " " << sum2 / n << " " << sum3 / n << endl;//输出平均值 //判断最高分的学生并输出 Student max;//先设定一个max的Student对象,在以下的比较中用来存储成绩最高的学生 for (int i = 0; i < n-1; i++) { if (v[i] > v[i + 1]) { max = v[i]; } else max = v[i + 1]; } max.printf();//最后进行输出 return 0; }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复