编写一个学生类,包含学号(string)、姓名(string)和成绩(double)三个私有属性,以及设置姓名、学号和成绩值,获得成绩值,输出姓名、学号和成绩等的公有成员函数。根据输入的人数,定义学生类对象数组,并读入学生信息,然后按照成绩由高低顺序排序并输出。
输入格式:
第1行输入学生人数n(0<n<100),随后n行分别输入学生学号、姓名、成绩。
输出格式:
按成绩由高到低输出每个学生的信息
输入样例:
在这里给出一组输入。例如:
3
001 张东 78.5
002 李岚 88
003 肖天 76
输出样例:
在这里给出相应的输出。例如:
1 002 李岚 88
2 001 张东 78.5
3 003 肖天 76
--------------------------------------------------------------------------------------------------------------------------------
#include <iostream>
#include<string>
#include<algorithm>
using namespace std;
class xs
{
public:
string getName() const
{
return m_Name;
}
string getID() const
{
return m_ID;
}
double getCj() const
{
return m_cj;
}
void setName(const string& Name)
{
m_Name = Name;
}
void setID(const string& ID)
{
m_ID = ID;
}
void setCj(const double& Cj)
{
m_cj = Cj;
}
private:
string m_Name;
string m_ID;
double m_cj;
};
int main()
{
int n;
cin >> n;
xs s[100];
for (int i = 0; i < n; i++)
{
string Name, ID;
double Cj;
cin >> ID >> Name >> Cj;
s[i].setID(ID);
s[i].setName(Name);
s[i].setCj(Cj);
}
sort(s, s + n, [](const xs& a,const xs& b)->bool {
return a.getCj() > b.getCj();
});
for (int i = 0; i < n; i++)
{
cout << i + 1 << " " << s[i].getID() << " " << s[i].getName() << " " << s[i].getCj() << endl;
}
}
sort函数 :用于对对象数组进行排序
#include<algorithm>
sort(s, s + n, [](const xs& a,const xs& b)->bool {
return a.getCj() > b.getCj();
});
A、其中s,s+n:s为数组名、s,s+n表示从数组的第一个元素到第n个元素之后的位置。
B、Lambda表达式[](const xs& a, const xs& b) -> bool { return a.getCj() > b.getCj(); }
1、Lambda表达式是一个匿名函数,可以在需要函数对象的地方直接定义和使用。
2、这个Lambda表达式接受两个引用参数a
和b
,它们都是类型为xs
的对象。
3、const xs&
表示参数是对xs
对象的常量引用,这样可以防止在Lambda表达式体中修改传入的对象。
4、表达式a.getCj() > b.getCj()
定义了排序的准则:如果a
对象的成绩大于b
对象的成绩,则认为a
应该排在b
之前。
5、-> bool
指定了Lambda表达式的返回类型,这里是布尔值。