原题链接:[编程入门]结构体之成绩统计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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复