m0_46308174 2020-02-12 09:21 采纳率: 100%
浏览 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条回答 默认 最新

  • 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;
    }

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建