为了账号安全,请及时绑定邮箱和手机立即绑定

求解释 这段代码中成绩的顺序输出是怎么输出的??? 第一个函数cmp是什么意思???

求解释 这段代码中成绩的顺序输出是怎么输出的??? 第一个函数cmp是什么意思???

C
安之4183388 2017-06-09 21:30:29
#include <stdio.h>#include <stdlib.h>#define N 10int cmp(const void *a,const void *b){    return *(int*)b - *(int*)a;}int Sum(int score[]){    int s = 0,i;    for(i = 0 ; i < N ; i++)        s += score[i];    return s;}int Max(int score[]){    return score[0];}int Min(int score[]){    return score[N-1];}double Avg(int s){    return (s + 0.0) / N;}int main(){    int score[N]={67,98,75,63,82,79,81,91,66,84};    int i,sum;    sum = Sum(score);    qsort(score,N,sizeof(int),cmp);//sort it    printf("Total score : %d\n",sum);    printf("Max score : %d\n",Max(score));    printf("Min Score : %d\n",Min(score));    printf("Average score : %f\n",Avg(sum));    printf("\n成绩排序:\n");    for(i = 0 ; i < N ; i++)    {        printf("Rank %d's score : %d\n",i+1,score[i]);    }    return 0;}
查看完整描述

1 回答

已采纳
?
MinRam

TA贡献87条经验 获得超24个赞

#include <stdio.h>
#include <stdlib.h>
#define N 10
int cmp(const void *a,const void *b){  // qsort库函数的自定义比较函数参数。
    return *(int*)b - *(int*)a;        // 即进行快速排序时候,比较两个元素的先后顺序。
}                                      // 详情可以看下qsort库函数的参数介绍(百度)
int Sum(int score[]){
    int s = 0,i;
    for(i = 0 ; i < N ; i++)
        s += score[i];
    return s;
}
int Max(int score[]){
    return score[0];
}
int Min(int score[]){
    return score[N-1];
}
double Avg(int s){
    return (s + 0.0) / N;
}
int main()
{
    int score[N]={67,98,75,63,82,79,81,91,66,84};
    int i,sum;
    sum = Sum(score);
    qsort(score,N,sizeof(int),cmp);                    // 借用库函数快速排序,进行数组排序。
    printf("Total score : %d\n",sum);
    printf("Max score : %d\n",Max(score));
    printf("Min Score : %d\n",Min(score));
    printf("Average score : %f\n",Avg(sum));
    printf("\n成绩排序:\n");
    for(i = 0 ; i < N ; i++)
    {
        printf("Rank %d's score : %d\n",i+1,score[i]);
    }
    return 0;
}


查看完整回答
2 反对 回复 2017-06-10
  • 安之4183388
    安之4183388
    return *(int*)b - *(int*)a 能不能再把这个解释清楚点 我还是有点看不懂。。。 谢谢
  • MinRam
    MinRam
    整个式子 * (int*) b - * (int*) a b先强制转换成(int*)指针类型,在取值; a同样
  • 1 回答
  • 0 关注
  • 995 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信