题目内容:
输入若干学生的成绩,统计各班的成绩的平均值,并按班级名称的机内码从小到大排序输出。
学生成绩信息包括:班级,学号和成绩。班级名称是"000"'时表示成绩输入结束。
班级名称不超过20字符,学号不超过10个字符,成绩为整数,平均成绩为双精度实数,保留三位小数。班级数不超过10个,总人数不超过100个。
输入格式:
若干行,每行信息包括班级,学号和成绩,用空格隔开,
最后一行为:000 000 000
输出格式:
若干行,每行信息包括:班级和平均成绩,中间用一个空格隔开。行数由输入中的班级数确定。
输入样例:
航天 001 80
信计 001 90
航天 002 70
航天 003 80
信计 002 91
000 000 000
输出样例:
航天 76.667
信计 90.500
#include <iostream>
#include <string.h>
#include <iomanip>
using namespace std;
class student
{
public:
string name;
string number;
int score;
void set(string m_name,string m_number,int m_score)
{
name=m_name;
number=m_number;
score=m_score;
}
};
int main()
{
string name,number;
int score,m=0,i,j,n=0;
float sum=0;
student stu[100];
for(m=0;;m++)
{
cin>>name>>number>>score;
if(name=="000") break;
else
stu[m].set(name,number,score);
}
for(i=0;i<m;i++)
{
for(j=0;j<m-i-1;j++)
{
if(stu[j].name>stu[j+1].name)
{
string s;
s=stu[j].name;
stu[j].name=stu[j+1].name;
stu[j+1].name=s;
s=stu[j].number ;
stu[j].number =stu[j+1].number;
stu[j+1].number =s;
int t;
t=stu[j].score;
stu[j].score=stu[j+1].score;
stu[j+1].score=t;
}
}
}
for(i=0;i<m;i++)
{
sum=sum+stu[i].score;
n++;
if(stu[i].name!=stu[i+1].name)
{
cout<<stu[i].name<<" ";
cout<<setiosflags(ios::fixed)<<setprecision(3);
cout<<sum/n<<endl;
n=0;
sum=0;
}
}
return 0;
}