结构体成绩排序问题,可以看看嘛

 

img

img


结构体成绩排序问题,改了好久了,就是改不对,可以看一看嘛,谢谢了

把交换结构的那三行代码放到fun函数if里面即可,即当结构数组前面成员的成绩比后面成员的成绩小时,则交换他们;

然后用结构指针比较成绩时,结构指针前面的解引用*星号去掉即可,因为是使用的->来访问成绩成员,所以可以直接使用指针,而不需要使用解引用的星号。

修改如下:

#include <stdio.h>

struct stu{
    
    int num;
    char name[20];
    int score;
}; 

void fun(struct stu *p,int n);

int main(void){
    struct stu a[10];
    int n,i;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d%s%d",&a[i].num,a[i].name,&a[i].score);
    }
    
    fun(a,n);
    for(i=0;i<n;i++){
        printf("%d %s %d\n",a[i].num,a[i].name,a[i].score);
    }
    
    return 0;
    
}

void fun(struct stu *p,int n){
    
    for(int i=0;i<n-1;i++){
        int index=i;
        for(int j=i+1;j<n;j++){
            if((p+j)->score>(p+index)->score){
                struct stu s =*(p+index);
                *(p+index)=*(p+j);
                *(p+j)=s;
            }
            
        }
    } 
}

img