Jubileena 2022-04-10 11:27 采纳率: 100%
浏览 48
已结题

关于#结构体#的问题,如何解决?

目标:创建一个结构体ST,成员有num(学号),name(姓名),score(成绩),
从键盘输入N个人员信息,按score(成绩)降序输出每个学生的记录,在main函数中输入数据,在另一个函数中排序并输出。

运行结果:output后面没有东西了

# include <iostream>
using namespace std;
#include <iomanip>
#include<string>
void sort();
int N;
struct ST
{
    int num;
    string name;
    float score;
};
ST a[100];

int main()
{
    int i;
    cout<<"请输入学生的数量   ";
    cin>>N;
    cout<<"请分别输入"<<N<<"个学生的学号,姓名,成绩。用空格分开    ";
    for(i=0; i<N; i++)
    {

        cin>>a[i].num>>a[i].name>>a[i].score;
    }
    sort();
    return 0;
}
void sort()
{
    ST t;
    int i;
    for(i=0; i<N; i++)
    {
        for(i=0; i<N--; i++)
        {
            while(a[i].score<a[i+1].score)
            {
                t=a[i];
                a[i]=a[i+1];
                a[i+1]=t;
            }
        }
    }
    cout<<"output:   "<<endl;
    for(i=0; i<N; i++)
    {
        cout<<setw(12)<<a[i].num<<setw(8)<<a[i].name<<setw(8)<<a[i].score<<endl;
    }
}


  • 写回答

1条回答 默认 最新

  • a5156520 2022-04-10 11:52
    关注

    给排序输出函数sort增加一个结构参数,用于传入main函数获取的学生结构信息数组。
    然后修改了下sort函数排序成绩的逻辑,修改如下:

    # include <iostream>
    using namespace std;
    #include <iomanip>
    #include<string>
    
    int N;
    struct ST
    {
        int num;
        string name;
        float score;
    };
    ST a[100];
    
    void sort(ST * a);
     
    int main()
    {
        int i;
        cout<<"请输入学生的数量   ";
        cin>>N;
        cout<<"请分别输入"<<N<<"个学生的学号,姓名,成绩。用空格分开    ";
        for(i=0; i<N; i++)
        {
     
            cin>>a[i].num>>a[i].name>>a[i].score;
        }
        sort(a);
        return 0;
    }
    void sort(ST * a)
    {
        ST t;
        int i,j;
        for(i=0; i<N-1; i++) //第一个for循环变量每一个数组每一个成员 
        {
            for(j=i; j<N; j++)  //第二个for循环用于遍历当前的j下成绩和数组后面的成绩相比较 
            {
                while(a[i].score<a[j].score)
                {
                    t=a[i];
                    a[i]=a[j];
                    a[j]=t;
                }
            }
        }
        cout<<"output:   "<<endl;
        for(i=0; i<N; i++)
        {
            cout<<setw(12)<<a[i].num<<setw(8)<<a[i].name<<setw(8)<<a[i].score<<endl;
        }
    }
     
     
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月18日
  • 已采纳回答 4月10日
  • 创建了问题 4月10日