结构体的应用

· · 个人记录

这题说是用结构体,但好像上面的题解都没有用(或者说使用了c风格的结构体、没有成员函数)

结构体(其实c++里结构体就是一个默认public的类),由成员变量和成员函数组成。

先读题,题目很简单,要求就是判断一个学生是否优秀。

那就先定义一个学生:由学号和成绩组成。然后写一个判断的子程序。

struct Student  //也可以写成class Student
{
  int xuehao, xueye_chengji, suzhi_chengji;
  bool ok()
  {
    if (xueye_chengji + suzhi_chengji <= 140) return 0;
    double zonghe = 0.7 * xueye_chengji + 0.3 * suzhi_chengji;
    if (zonghe < 80) return 0;
    return 1;
  }
  string excellent()
  {
        if (ok()) return "Excellent";
        else return "Not excellent";
  }
};

考虑读入,直接让他在结构体里读掉,这样可复用性会提升(话说也就用了一次)。

void read()
{
    cin >> xuehao >> xueye_chengji >> suzhi_chengji;
}

顺手写一个构造函数(这题是真用不上),但写构造函数是好习惯。(析构函数:那我呢??QWQ)

Student(const int &X, const int &Xc, const int &Sc): xuehao(X), xueye_chengji(Xc), suzhi_chengji(Sc) {}//构造函数,尽管没用到
Student() {}//写了上面的就不能缺省了

完成啦!

PS:这种输出字符串的题目请一定要复制黏贴输出,不要手拼“excellent”。

完整代码:

#include<bits/stdc++.h>
using namespace std;

int T, n, m;

struct Student  //也可以写成class Student
{
    private://这里这个ok()写成私有函数会比较好,因为不让外部访问
        bool ok()
        {
            if (xueye_chengji + suzhi_chengji <= 140) return 0;
            double zonghe = 0.7 * xueye_chengji + 0.3 * suzhi_chengji;
            if (zonghe < 80) return 0;
            return 1;
        }
    public:
        int xuehao, xueye_chengji, suzhi_chengji;
        Student(const int &X, const int &Xc, const int &Sc): xuehao(X), xueye_chengji(Xc), suzhi_chengji(Sc) {}//构造函数,尽管没用到
        Student() {}//写了上面的就不能缺省了
        string excellent()
        {
            if (ok()) return "Excellent";
            else return "Not excellent";
        }
        void read()  //为什么就不把read写到里面呢?
        {
            cin >> xuehao >> xueye_chengji >> suzhi_chengji;
        }
} x;

int main()
{
    cin >> n;
    while (n--)
    {
        x.read();
        cout << x.excellent() << endl;
    }
}