高手帮忙做一道c++编程题(算法要简洁清晰)

统计学生成绩问题描述给定一个学生成绩表,每行为一名学生的数据,每名学生的数据有:学号、姓名、若干门(门数不超过10)课程考试成绩(整数)。要求计算各学生的平均成绩,根据平... 统计学生成绩 问题描述给定一个学生成绩表,每行为一名学生的数据,每名学生的数据有:学号、姓名、若干门(门数不超过10)课程考试成绩(整数)。要求计算各学生的平均成绩,根据平均成绩排列名次。输入输入数据仅有一个成绩表,包含若干行。同一行中各项数据用字符’\t’分隔。输出输出计算结果(参见输出样例)。输入样例08120001 张 三 86 75 90 7808120002 李小明 93 88 80 8608120003 王小刚 78 85 83 8108120004 赵 鹏 85 76 76 92输出样例08120001 张 三 86 75 90 78 82.25 208120002 李小明 93 88 80 86 86.75 108120003 王小刚 78 85 83 81 81.75 408120004 赵 鹏 85 76 76 92 82.25 2 顺便告诉我下,中文怎么在里面输入啊。。。。。。 展开
 我来答
匿名用户
2014-01-16
展开全部
// 以下代码在VC2008下编译测试通过
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

class Student
{
public:
Student() : avgGrade_(0.0)
{
memset(grade_, 0, sizeof(grade_));
}
void setOrder(size_t o) { order_ = o; }
size_t getOrder() const { return order_; }
double getAvgGrade() const { return avgGrade_; }
friend istream &operator>>(istream &in, Student &s);
friend ostream &operator<<(ostream &out, const Student &s);
friend bool operator<(const Student &s1, const Student &s2);
private:
string no_;
string name_;
int grade_[4];
double avgGrade_;
size_t order_;
};

istream &operator>>(istream &in, Student &s)
{
getline(in, s.no_, '\t');
getline(in, s.name_, '\t');
s.avgGrade_ = 0.0;
for(size_t i = 0; i < 4; ++i)
{
in >> s.grade_[i];
s.avgGrade_ += s.grade_[i];
}
s.avgGrade_ /= 4;
return in;
}

ostream &operator<<(ostream &out, const Student &s)
{
out << s.no_ << '\t' << s.name_ << '\t';
for(size_t i = 0; i < 4; ++i)
out << s.grade_[i] << '\t';
out << s.avgGrade_ << '\t' << s.order_;
return out;
}

bool operator<(const Student &s1, const Student &s2)
{
return s1.avgGrade_ < s2.avgGrade_;
}

bool PStuGreater(const Student *ps1, const Student *ps2)
{
return *ps2 < *ps1;
}

int main(void)
{
vector<Student> stuVect;
vector<Student*> pstuVect;
Student inputStu;
while(cin >> inputStu)
stuVect.push_back(inputStu);
for(size_t i = 0; i < stuVect.size(); ++i)
pstuVect.push_back(&stuVect[i]);
sort(pstuVect.begin(), pstuVect.end(), PStuGreater);
for(size_t i = 0; i < pstuVect.size(); ++i)
{
if(i == 0)
pstuVect[i]->setOrder(1);
else if(pstuVect[i]->getAvgGrade() == pstuVect[i-1]->getAvgGrade())
pstuVect[i]->setOrder(pstuVect[i-1]->getOrder());
else
pstuVect[i]->setOrder(i + 1);
}
for(size_t i = 0; i < stuVect.size(); ++i)
cout << stuVect[i];
return 0;
}
匿名用户
2014-01-16
展开全部
你用的什么操作系统?什么编程环境?
这个问题需要用结构体数组或链表解决。有兴趣的话,给我留言。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-01-16
展开全部
我这有段代码不知道适合你不 你来看看需要不qq8300139
可以加我
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式