C++求解,要求用C++做一个学生成绩管理系统,程序已经完成,但是其中对数据进行排序的模块出了问题。

2025-04-02 06:36:36
推荐回答(4个)
回答1:

因为你贴出来的代码缺少Student类,所以无法运行。
从你的排序部分代码来看,Swap(Student *p1, Student *p2)函数,应该是不会错的,这个完成的无非是数据的交换;问题主要在void Studentmassage::Sort()里面,你需要单步运行跟踪,进入两个for语句中,看数据是否每次正确的传入。

回答2:

这样排序可能不行啊。交换应该会让指针指向错误的位置。

我觉得是,没仔细看

应该另外建立一个head,从原来链表取走结点插入新的链表。

大概是这样:

void Studentmassage::insertAfter(Student *student,Student *iStudent){
    auto tail=student->next;
    student->next=iStudent;
    iStudent->next=tail;
}
void Studentmassage::sort(){
    auto sHead=head;
    sHead->next=nullptr;
    for(auto iStudent=head->next;iStudent!=nullptr;iStudent=iStudent->next){
        if(iStudent->sumsum){
            iStudent->next=sHead;
            sHead=iStudent;
        }
        else{
            for(auto student=sHead;student!=nullptr;student=student->next){
                if(student->next==nullptr||student->sum<=iStudent->sum){
                     insertAfter(student,iStudent);
                     break;
                }
            }  
        }
    }
    head=sHead;
}

回答3:

你可以在排序的方法里面先输出所有信息,排序之后输入信息,比较一下,看看哪里出现问题

回答4:

你没有说清出的什么问题啊
要是算法问题,排序不正确,大家从算法上帮你分析
要是编译不通过,大家从语法上给你分析啊
我从头到尾看了一遍,还没发现问题呢