成绩排序

题目要求如下:
成绩排序
求解思路:

  1. 为了实现对学生与成绩的组合,可以使用C中的结构体进行数据存储
  2. 其中num表示学号,score表示成绩
  3. 使用排序算法对数组进行排序
  4. 输出排序后的结果

其中排序使用C库标准函数qsort,其函数原型为:

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))

该函数最后1个参数为1个函数指针,其形参为const void*。我们将其转换为对应的类型,再获取其值。唯一需要处理的是,当传入结构体中成绩相同时,我们要获取到其对应的学号,并进行相减,从而让学号小的排序在前面,因为返回的值为负值。

实现代码:

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int num;
    int score;
} Student;

int score_compare(const void *elem1, const void *elem2) {
    Student *stu1 = (Student *) elem1;
    Student *stu2 = (Student *) elem2;
    int s1, s2;
    s1 = (*stu1).score;
    s2 = (*stu2).score;
    if(s1==s2){
        return (*stu1).num - (*stu2).num;
    }
    return (*stu1).score - (*stu2).score;
}

int main() {
    int num;
    Student students[100] = {{0, 0}};
    scanf("%d", &num);
    for (int i = 0; i < num; ++i) {
        scanf("%d%d", &students[i].num, &students[i].score);
    }
    qsort(students, num, sizeof(Student), score_compare);
    for (int j = 0; j < num; ++j) {
        printf("num=%d,score=%d\n", students[j].num, students[j].score);
    }
    return 0;
}

最终通过后结果:
通过结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值