成绩排名次
某班期末考试科目为数学MT、英语EN和物理PH,有最多不超过30人参加考试。要求:
(1)计算每个学生的总分和平均分
(2)按总分成绩由高到低排出成绩的名次
(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分
(4)任意输入一个学号,能够查出该学生在班级中的排名及其考试分数
编程要求
1.较好的用户输入输出提示信息
2.使用子函数来实现上述各个功能
3.必须用结构体数组实现
提示
设计好存放学生信息的结构体,方便编程。
用函数编程实现计算每个学生的总分;
用函数编程实现按总分由高到低对学生成绩排序
用函数编程实现查学号为k的学生在班级中的排名名次及相关成绩等信息,不到时返回-1
程序代码如下:
#include<iostream>
#include<iomanip>
using namespace std;
struct student
{
    char NAME[20];//名字
    long NUM;//学号
    double MT;//数学   
    double EN;//英语
    double PH;//物理
    double sum;//总分
};
int ReadScore(student stu[])//输入名字———成绩
{
    int count=0;//人数
    cout.setf(ios::right);
    cout<<"名字"<<setw(5);
    cout<<"学号"<<setw(5);
    cout<<"数学"<<setw(5);
    cout<<"英语"<<setw(5);
    cout<<"物理"<<setw(5);
    cout<<endl;
    for(int i=0;i<30;i++)
    {
       
        cin>>stu[i].NAME>>stu[i].NUM>>stu[i].MT>>stu[i].EN>>stu[i].PH;
        if(stu[i].MT<=0)
            break;
        count++;
    }
    return count;
}
int GetSum(student stu[],int n)
{
    double Sum=0;
    for(int i=0;i<n;i++)
    {
        stu[i].sum=0;
        stu[i].sum=stu[i].MT+stu[i].EN+stu[i].PH; //总分
    }
    Sum=stu[i].sum;
    return Sum;
}
void print_1(student stu[],int n)//打印学生成绩表
{
    for(int m=n-1;m>0;m--)
    {
        int max=0;
        char name[20];//姓名
        long num=0;//学号
        double mt=0;//数学   
        double en=0;//英语
        double ph=0;//物理
        for(int i=0;i<m;i++)//排序
        {
            if(stu[i].sum<stu[i+1].sum)
            {
                strcpy(name,stu[i].NAME); 
                strcpy(stu[i].NAME,stu[i+1].NAME); 
                strcpy(stu[i+1].NAME,name); 
               
                num=stu[i].NUM;
                stu[i].NUM=stu[i+1].NUM;
                stu[i+1].NUM=num;
               
                mt=stu[i].MT;
                stu[i].MT=stu[i+1].MT;
                stu[i+1].MT=mt;
               
                en=stu[i].EN;
                stu[i].EN=stu[i+1].EN;
                stu[i+1].EN=en;
               
                ph=stu[i].PH;
                stu[i].PH=stu[i+1].PH;
                stu[i+1].PH=ph;少儿编程排名前十名
               
                max=stu[i].sum; 
                stu[i].sum=stu[i+1].sum;
                stu[i+1].sum=max;
               
               
            }
        }
    }
    cout.setf(ios::left);
    cout<<"总成绩表:"<<endl;
    cout<<"排名"<<setw(5);
    cout<<"姓名"<<setw(5);
    cout<<"学号"<<setw(5);
    cout<<"总分"<<setw(5);
    cout<<"高数"<<setw(5);
    cout<<"英语"<<setw(5);
    cout<<"物理"<<setw(5);
    cout<<"平均分"<<endl;
    for(int j=0;j<n;j++)
    {
        cout.setf(ios::left);
        cout<<j+1<<setw(5);
        cout<<stu[j].NAME<<setw(5);
        cout<<stu[j].NUM<<setw(5);
        cout<<stu[j].sum<<setw(5);
        cout<<stu[j].MT<<setw(5);
        cout<<stu[j].EN<<setw(5);
        cout<<stu[j].PH<<setw(5);
        cout<<stu[j].sum/3<<endl;
   
    }
}
int find(student stu[],int n)
{   
    int a=0,b=0;
    long num;
    cin>>num;
        for(int j=0;j<n;j++)
        {
            if(num==stu[j].NUM)
            {
              b++;
              a++;
            }
        }
        if(b!=0)
        {   
            cout.setf(ios::left);
            cout<<"排名"<<setw(5);
            cout<<"姓名"<<setw(5);
            cout<<"学号"<<setw(5);
            cout<<"总分"<<setw(5);
            cout<<"高数"<<setw(5);
            cout<<"英语"<<setw(5);
            cout<<"物理"<<setw(5);
            cout<<"平均分"<<endl;
        }
        for(int i=0;i<n;i++)
        {
           
            if(num==stu[i].NUM)
            {
                cout.setf(ios::left);
                cout<<i+1<<setw(5);
                cout<<stu[i].NAME<<setw(5);
                cout<<stu[i].NUM<<setw(5);
                cout<<stu[i].sum<<setw(5);
                cout<<stu[i].MT<<setw(5);
                cout<<stu[i].EN<<setw(5);
                cout<<stu[i].PH<<setw(5);
                cout<<stu[i].sum/3<<endl;
               
            }
        }
        if(a==0)
            {
                cout<<"查无此人!请重新输入:";
                return -1;
            }
   
}
int main()
{
    student stu[30];
    float a;
    a=ReadScore(stu);
    cout<<"==============================================="<<endl;
    GetSum(stu,a);
    for(int i=0;i<a;i++)
    {
        cout.setf(ios::left);
        cout<<"姓名"<<stu[i].NAME<<setw(5);
        cout<<"数学"<<stu[i].MT<<setw(5);
        cout<<"英语"<<stu[i].EN<<setw(5);
        cout<<"物理"<<stu[i].PH<<endl;
    }
    cout<<"总人数:"<<a<<endl;
   
    cout<<"==============================================="<<endl;
    print_1(stu,a);
    cout<<"==============================================="<<endl;
    cout<<endl<<"请输入要查的学号:";
    find(stu,a);
    cout<<endl;
    return 0;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。