结构体的应用
这题说是用结构体,但好像上面的题解都没有用(或者说使用了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;
}
}