m0_46308174
m0_46308174
采纳率100%
2020-02-12 09:21 阅读 170

怎么在这里做排序啊。。写不对,求求各位大佬帮忙

`include
struct struct_name
{
char name[20];
char num[20];
float score;
}student[3];
void sort(struct struct_name *p)
{ struct struct_name temp,*p1; int i, j;
printf("lololololol");
for(i=0;i for(j=0;j if(p->score<(p+1)->score){

temp=*p;
*p=*p1;
*p1=temp;
}
p++;
}
}
}

int main()
{
struct_name student [3]={{"Tom","15",97.2},{"Boy","16",98.1},{"Smith","18",99.0}};
sort(student);
int i;
for(i=0;i<3;i++){
printf("姓名:%s\n学号:%s\n成绩:%.1f\n",student[i].name,student[i].num,student[i].score);
}
return 0;
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    DRJsportman WuLi猛男 2020-02-12 12:34

    排序算法有很多种类,如桶排序,冒泡排序等等,建议可以看一下相关的算法。

    你的问题不是在于排序,而是对 student这种结构无法进行排序。

    这种情况,你可以对比score的值,对name,num进行交换即可。

    比如再排序的过程中要交换score了,同时对name,num进行交换。例如

    `char name_tmp[32];
    char num_tmp[32];

    float score_tmp;
    if(p->socre > (p+1)->score)
    {
    // 交换name
    strcpy(name_tmp,p->name);
    memset(p->name,0,sizeof(p->name)); //清空原先的名字
    strcpy(p->name,(p+1)->name);
    memset((p+1)->name,0,sizeof((p+1)->name));
    strcpy((p+1)->name,name_tmp);
    //交换num
    strcpy(num_tmp,p->num);
    memset(p->num,0,sizeof(p->num)); //清空原先的num
    strcpy(p->num,(p+1)->num);
    memset((p+1)->num,0,sizeof((p+1)->num));
    strcpy((p+1)->num,num_tmp);
    //交换score
    score_tmp = p->score;
    p->score = (p+1)->score;
    (p+1)->score = score_tmp;
    }

    这样,就搞定了所有要交换的东西了。

    点赞 1 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2020-02-12 12:15

    for(i=0;i for(j=0;j if(p->score<(p+1)->score){
    什么乱七八糟的

    点赞 1 评论 复制链接分享
  • hahaxiaojiejie 00的老男人 2020-02-12 12:18

    直接给你代码吧(排序的时候我用了冒泡法)

    #include <stdio.h>
    #include <stdlib.h>
    struct struct_name
    {
        char name[20];
        char num[20];
        float score;
    }student[3];
    void sort(struct struct_name *p)
    {
        struct struct_name temp;
        for(int j=0;j<2;j++)
            for(int i=0;i<2-j;i++)
        if((p+i)->score<(p+i+1)->score)
        {
            temp=*(p+i);
            *(p+i)=*(p+i+1);
           *(p+i+1)=temp;
        }
    }
    int main()
    {
        struct struct_name student[3]={{"Tom","15",97.2},{"Boy","16",98.1},{"Smith","18",99.0}};
        sort(student);
        int i;
        for(i=0;i<3;i++)
        {
            printf("姓名:%s\n学号:%s\n成绩:%.1f\n",student[i].name,student[i].num,student[i].score);
        }
        return 0;
    }
    
    运行结果:
    姓名:Smith
    学号:18
    成绩:99.0
    姓名:Boy
    学号:16
    成绩:98.1
    姓名:Tom
    学号:15
    成绩:97.2
    
    点赞 1 评论 复制链接分享

相关推荐