西安交通大学MOOC C++期末1

题目内容:

输入若干学生的成绩,统计各班的成绩的平均值,并按班级名称的机内码从小到大排序输出。

学生成绩信息包括:班级,学号和成绩。班级名称是"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;
}

猜你喜欢

转载自blog.csdn.net/weixin_46226815/article/details/106087449