c++问题.

定义一个学生类,使其具有学号、姓名(长度不定)、高数、外语和C++程序设计三门课的成绩属性,以及各属性访问方法、求总成绩、求平均成绩、设置和显示学生信息方法。此外,在ma... 定义一个学生类,使其具有学号、姓名(长度不定)、高数、外语和C++
程序设计三门课的成绩属性,以及各属性访问方法、求总成绩、求平均成绩、设置
和显示学生信息方法。此外,在main函数中以定义学生数组方法模拟一个班的学生
信息,利用独立定义函数方式给出常见情况的统计,如最高成绩、最低成绩、平均
成绩、学生信息列表等。
展开
 我来答
飘渺世间天
2007-04-25 · TA获得超过2650个赞
知道大有可为答主
回答量:843
采纳率:0%
帮助的人:1093万
展开全部
4、student

#include <iostream>
#include <string>
#include <cstddef>
#include <algorithm>

class student
{
public:
typedef std::size_t size_type;

student();
student(size_type _id, std::string _name, double _math, double _fL, double _cpp);

size_type id()const;
std::string name()const;
double math()const;
double fL()const;
double cpp()const;
double total()const;
double avg()const;

void SetInfo();
void ShowInfo()const;

private:
student& operator = (const student& stdu);
student(const student& stdu);

struct infos
{
size_type id;
std::string name;
double math;
double fL; // foreignLanguage
double cpp;
}myInfo;

double totalScore;
double avgScore;
};

student::student() : totalScore(0.0), avgScore(0.0)
{
myInfo.id = 0;
myInfo.name = "";
myInfo.math = 0.0;
myInfo.fL = 0.0;
myInfo.cpp = 0.0;
}

student::student(size_type _id, std::string _name, double _math, double _fL, double _cpp)
{
myInfo.id = _id;
myInfo.name = _name;
myInfo.math = _math;
myInfo.fL = _fL;
myInfo.cpp = _cpp;

totalScore = myInfo.math + myInfo.fL + myInfo.cpp;
avgScore = totalScore / 3;
}

void student::SetInfo()
{
std::cin.exceptions(std::ios_base::failbit | std::ios_base::badbit);
std::cout << "请输入该学生的ID: ";
std::cin >> myInfo.id;
std::cout << "请输入ID为 " << myInfo.id << " 的学生的姓名: ";
std::cin >> myInfo.name;
std::cout << "请输入ID为 " << myInfo.id << " 的学生的高数成绩: ";
std::cin >> myInfo.math;
std::cout << "请输入ID为 " << myInfo.id << " 的学生的外语成绩: ";
std::cin >> myInfo.fL;
std::cout << "请输入ID为 " << myInfo.id << " 的学生的C++成绩: ";
std::cin >> myInfo.cpp;
std::cout << "ID为 " << myInfo.id << "的学生信息设置完毕!\n" << std::endl;

totalScore = myInfo.math + myInfo.fL + myInfo.cpp;
avgScore = totalScore / 3;
}

void student::ShowInfo()const
{
std::cout << "ID: " << myInfo.id << '\n';
std::cout << "姓名: " << myInfo.name << '\n';
std::cout << "高数: " << myInfo.math << '\n';
std::cout << "外语: " << myInfo.fL << '\n';
std::cout << "C++: " << myInfo.cpp << '\n';
std::cout << "总分: " << totalScore << '\n';
std::cout << "平均分: " << avgScore << '\n' << std::endl;
}

inline student::size_type student::id()const
{
return myInfo.id;
}

inline std::string student::name()const
{
return myInfo.name;
}

inline double student::math()const
{
return myInfo.math;
}

inline double student::fL()const
{
return myInfo.fL;
}

inline double student::cpp()const
{
return myInfo.cpp;
}

inline double student::total()const
{
return totalScore;
}

inline double student::avg()const
{
return avgScore;
}

inline bool ScoreCmp(const student& elem1, const student& elem2)
{
return elem1.total() < elem2.total();
}

student* highest(student* students, int size)
{
return std::max_element(students, students + size, ScoreCmp);
}

student* lowest(student* students, int size)
{
return std::min_element(students, students + size, ScoreCmp);
}

double total(student* students, int size)
{
double total = 0.0;
for(int i = 0; i < size; ++i)
{
total += students[i].total();
}

return total;
}

double avg(student* students, int size)
{
return total(students, size) / size;
}

void ShowInfo(student* students, int size)
{
std::cout << "\t\t学生信息列表\n\n";
std::cout << "学号\t姓名\t高数\t外语\tC++\t总分\t平均分\n";
double tMath = 0, tFL = 0, tCpp = 0;
for(int i = 0; i < size; ++i)
{
std::cout << students[i].id() << '\t';
std::cout << students[i].name() << '\t';
std::cout << (tMath += students[i].math(), students[i].math()) << '\t';
std::cout << (tFL += students[i].math(), students[i].fL()) << '\t';
std::cout << (tCpp += students[i].math(), students[i].cpp()) << '\t';
std::cout << students[i].total() << '\t';
std::cout << students[i].avg() << "\t\n\n";
}

std::cout << "\n\n\t各科总成绩及平均成绩\n\n";
std::cout << "科目\t\t总成绩\t\t平均成绩\n\n";
std::cout << "数学\t\t" << tMath << "\t\t" << tMath / size << "\n\n";
std::cout << "外语\t\t" << tFL << "\t\t" << tFL / size << "\n\n";
std::cout << "C++\t\t" << tCpp << "\t\t" << tCpp / size << "\n\n";

std::cout << "全班总分: " << total(students, size) << '\n';
std::cout << "全班总平均分: " << avg(students, size) << '\n' << std::endl;

student* high(highest(students, size));
std::cout << "最高成绩的学生的id为: " << high->id() << '\n';
std::cout << "姓名为: " << high->name() << '\n';
std::cout << "总分为: " << high->total() << '\n';
std::cout << "平均分为: " << high->avg() << "\n\n";

student* low(lowest(students, size));
std::cout << "最低成绩的学生的id为: " << low->id() << '\n';
std::cout << "姓名为: " << low->name() << '\n';
std::cout << "总分为: " << low->total() << '\n';
std::cout << "平均分为: " << low->avg() << "\n\n";
}

int main()
{
using namespace std;

const int size = 5;
student students[size];

for(int i = 0; i < size; ++i)
{
students[i].SetInfo();
}

ShowInfo(students, size);
}

测试结果(发在百度里格式显示不出来):

请输入该学生的ID: 1
请输入ID为 1 的学生的姓名: shj
请输入ID为 1 的学生的高数成绩: 20
请输入ID为 1 的学生的外语成绩: 33
请输入ID为 1 的学生的C++成绩: 12.5
ID为 1的学生信息设置完毕!

请输入该学生的ID: 2
请输入ID为 2 的学生的姓名: jimmyi
请输入ID为 2 的学生的高数成绩: 50
请输入ID为 2 的学生的外语成绩: 22.5
请输入ID为 2 的学生的C++成绩: 30
ID为 2的学生信息设置完毕!

请输入该学生的ID: 3
请输入ID为 3 的学生的姓名: shy
请输入ID为 3 的学生的高数成绩: 50
请输入ID为 3 的学生的外语成绩: 0
请输入ID为 3 的学生的C++成绩: 50
ID为 3的学生信息设置完毕!

请输入该学生的ID: 4
请输入ID为 4 的学生的姓名: wokao
请输入ID为 4 的学生的高数成绩: 90
请输入ID为 4 的学生的外语成绩: 0
请输入ID为 4 的学生的C++成绩: 100
ID为 4的学生信息设置完毕!

请输入该学生的ID: 5
请输入ID为 5 的学生的姓名: niubi
请输入ID为 5 的学生的高数成绩: 110
请输入ID为 5 的学生的外语成绩: 105
请输入ID为 5 的学生的C++成绩: 150
ID为 5的学生信息设置完毕!

学生信息列表

学号 姓名 高数 外语 C++ 总分 平均分
1 shj 20 33 12.5 65.5 21.8333

2 jimmyi 50 22.5 30 102.5 34.1667

3 shy 50 0 50 100 33.3333

4 wokao 90 0 100 190 63.3333

5 niubi 110 105 150 365 121.667

各科总成绩及平均成绩

科目 总成绩 平均成绩

数学 320 64

外语 160.5 32.1

C++ 342.5 68.5

全班总分: 823
全班总平均分: 164.6

最高成绩的学生的id为: 5
姓名为: niubi
总分为: 365
平均分为: 121.667

最低成绩的学生的id为: 1
姓名为: shj
总分为: 65.5
平均分为: 21.8333
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式