编写一个按照平均分对学生进行排名的程序

阿-杰
博客专家认证
2012-09-24 08:54:29
编写一个按照平均分对学生进行排名的程序。
输入数据放在名为abc.txt的文件中,学生数量<=100。输出时按学生成绩平均分递减排好序的学生序号和名字,每个学生占一行。输入和输出格式如下:
输入格式:
<学生个数> <课程数目>
<学生姓名> <课程1成绩> <课程2成绩> ...<课程n成绩>...
输出格式:
<名次> <学生姓名>
...
例如输入:
2 3
smith 60 50 80
frank 80 60 70
输出
1 frank
2 smith
...全文
412 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangxy10 2012-09-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
编写一个按照平均分对学生进行排名的程序。
输入数据放在名为abc.txt的文件中,学生数量<=100。输出时按学生成绩平均分递减排好序的学生序号和名字,每个学生占一行。输入和输出格式如下:
输入格式:
<学生个数> <课程数目>
<学生姓名> <课程1成绩> <课程2成绩> ...<课程n成绩>...
输出格式:
<名次> <学生姓名>
...
例如输入:
2 3
smith ……
[/Quote]
我用STL给你写了个。
如果你不想用C++里面的任何东西,
就把类变成结构体 struct Student,
vector变成数组 Struct Student *students,
string变成char*
ifstream 变成 File*



#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

class Student
{
public:
string name;
double avg;
};

vector<Student > students; //存放学生的信息

void Input()
{
ifstream in("abc.txt"); //文件可以用绝对地址
if( !in ) //如果找不到文件,就提醒
{
cout << "Can not find file abc.txt" <<endl;
return;
}
int numStu, numCourse;
in >> numStu >> numCourse;
for( int i=0; i<numStu; i++)
{
Student stu;
in >> stu.name;
double sum=0;
for( int j=0; j<numCourse; j++ )
{
double score;
in >> score;
sum += score;
}
stu.avg = sum/numCourse;
students.push_back( stu ); //存入数据
}
}

bool fun( Student a, Student b )
{
return a.avg>b.avg;
}

void Sort()
{
sort(students.begin(), students.end(), fun ); //使用STL algorithm,也可以使用下面自己写的

/*
//选择排序
int numStu = students.size();
for( int i=0; i<numStu; i++)
{
int max = i;
//找到最大的,已平均值为关键字比较
for( int j=i; j<numStu; j++)
{
if( students[j].avg > students[i].avg )
max=j;
}
if( max != i ) //交换
{
Student temp;
temp = students[i];
students[i] = students[max];
students[max] = temp;
}
}
*/

}

void Output()
{
ofstream out("result.txt");
for( int i=0; i<(int)students.size(); i++)
{
out << i+1 << " "<<students[i].name<<endl;
}
}

int main()
{
Input();
Sort();
Output();
}

zhaoZero41 2012-09-26
  • 打赏
  • 举报
回复
这题很简单,弄个类把学生的数据都存起来,然后用STL里的sort排序输出就可以了
huangxy10 2012-09-26
  • 打赏
  • 举报
回复
可以使用STL中的sort函数吗?
你至少得用个结构体吧,如果是C++可以用类。
用数组把学生的信息存起来,再排序。
阿-杰 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

又现作业贴!好歹自己想下给个自己写的程序再问啊!
[/Quote]

void save_to_file( )
// save_to_file函数从键盘读入一行字符,并将其中的字母存入磁盘文件
{
char c[100];//学生数组
char stu[100];//学生个数
char cour[100];//课程数目
int stuNum;
int courNum;
ofstream outfile1("c:\\abc.txt");
cout<<"请输入学生的个数:";
cin>>stuNum;
cout<<"请输入课程数目:";
cin>>courNum;
for(int i=1;i<=stuNum;i++)
{
outfile1.put(stu[i]);
for(int k=1;k<=courNum;k++)
{
cout<<"学生姓名:"<<stu[i]<<endl;
cout<<"请输入课程数目"<<k<<"的成绩:";
cin>>cour[k];
outfile1.put(cour[k]);
cout<<endl;
}
}

下来怎么操作数据啊??给点想法吧大哥?
Flammable_ice 2012-09-24
  • 打赏
  • 举报
回复
又现作业贴!好歹自己想下给个自己写的程序再问啊!

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧