Frontier


私信TA

用户名:Frontier

访问量:180

签 名:

争取秃头!!!

等  级
排  名 2079
经  验 1562
参赛次数 0
文章发表 6
年  龄 0
在职情况 学生
学  校 Bilibili大学
专  业 Software Engine

  自我简介:

解题思路:

因为每位同学的数据都有多项,因此想到用类来存储每个学生。然后题目中有统计平均值和比较大小,就想到用类的成员函数来实现。


注意事项:

  (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 人评分

  评论区