| 
 | 
 
 
发表于 2019-6-12 11:47:46
|
显示全部楼层
 
 
 
你可以参考这段代码,当学生名成绩不同时,按照成绩高低来排列,当学生成绩相同时,按照学生姓名的字母顺序来排列 
- typedef struct 
 
 - {
 
 -         char last_name[25];
 
 -         int stu_id;
 
 -         char grade;
 
 - } student;
 
  
- student input[5] = {
 
 -  {"xiaoming",910017,'A'},
 
 -  {"xiaoli",934422,'C'},
 
 -  {"xiaozhang",878766,'B'},
 
 -  {"xiaowang",123456,'D'},
 
 -  {"xiaofang",989420,'A'}
 
 - };
 
  
- static int cmpstudents(const void *p1, const void *p2)
 
 - {
 
 -     student *l = (student *)p1;
 
 -     student *r = (student *)p2;
 
 -     if (l->grade==r->grade)
 
 -     {
 
 -         return strcmp(l->last_name,r->last_name);
 
 -     }
 
 -     return (l->grade > r->grade)?(1):(-1);
 
 - }
 
  
- int main ()
 
 - {
 
 -     int i;
 
 -     for (i=0;i<5;i++)
 
 -     {
 
 -        printf("%s\t%d\t%c\n",input[i].last_name,input[i].stu_id,input[i].grade);
 
 -     }
 
 -     printf("\n----------------------------\n");
 
 -     qsort(input,5,sizeof(student),cmpstudents);
 
 -     for (i=0;i<5;i++)
 
 -     {
 
 -        printf("%s\t%d\t%c\n",input[i].last_name,input[i].stu_id,input[i].grade);
 
 -     }
 
  
-     return 0;
 
 - }
 
  复制代码 |   
 
 
 
 |