• 十七、函数指针高级(动态排序)


    1.学生结构体数组,按成绩排序、按年龄排序,按名字大小排序
    示例:
    typedef struct stu{//定义一个结构体变量
         char name[40];
         int age;
         float score;
    }Student;
     
    void printfStudents(Student *s , int count);
    void printfStudents(Student *s , int count){//打印结构体数组
         printf(“======================== ”);
         for(int i = 0 ; i < count ; i ++){
              printf(“%s %d %f ”,s[i].name,s[i].age,s[i].score);
         }
         printf(“========================= ”);
    }
    typedef BOOL(*SORT)(Student s1 , Student s2);//用typedef定义一个布尔值的函数指针
     
    BOOL sortUseAge(Student s1 , Student s2);
    BOOL sortUseAge(Student s1 , Student s2){//布尔值类型的函数,年龄
         return s1.age > s2.age;
    }
     
    BOOL sortUseScore(Student s1 , Student s2);
    BOOL sortUseScore(Student s1 , Student s2){//布尔值类型的函数,分数
         return s1.Score > s2.Score;
    }
     
    BOOL sortUseName(Student s1 , Student s2);
    BOOL sortUseName(Student s1 , Student s2){//布尔值类型的函数,名字
         return strcpy(s1.name , s2.name) > 0?YES : NO;
    }
     
    //旧方法对比
    //void sort(Student *s , int count);
    //void sort(Student *s , int count){
    //     for(int i = 0 ; i < count - 1 ; i ++){
    //          for(int j = 0 ; j < count - 1 - i ; j ++){
    //               if(s[j].age > s[j+1].age){
    //                   Student temp = s[j];
    //                    s[j] = s[j+1];
    //                    s[j+1] = temp;
    //               }
    //          }
    //     }
    //}
     
    void sort(Student *s , int count , SORT st);//回调函数
    void sort(Student *s , int count , SORT st){
         for(int i = 0 ; i < count - 1 ; i ++){
              for(int j = 0 ; j < count - 1 - i ; j ++){
                   if(st(s[j] , s[j+1])){
                       Student temp = s[j];//此处应该借鉴
                        s[j] = s[j+1];
                        s[j+1] = temp;
                   }
              }
         }
    }
     
    int main(){
         Student stuff[] = {
              {“zhangsan”,23,89},
              {“lisi”,25,72},
              {“wangle”,18,93},
              {“zhaoda”,20,65}
         }
         printfStudents(stus, sizeof(stus) / sizeof(stuff[0]) );//打印结构体数组
         sort(stus, sizeof(stus) / sizeof(stuff[0]) , sortUseAge);//按年龄排序
         printfStudents(stus, sizeof(stus) / sizeof(stuff[0]) );//打印结构体数组
         sort(stus, sizeof(stus) / sizeof(stuff[0]) , sortUseScore);//按分数排序
         printfStudents(stus, sizeof(stus) / sizeof(stuff[0]) );//打印结构体数组
         sort(stus, sizeof(stus) / sizeof(stuff[0]) , sortUseName);//按名字排序
         printfStudents(stus, sizeof(stus) / sizeof(stuff[0]) );//打印结构体数组
    }
  • 相关阅读:
    codevs 1213 解的个数(我去年打了个表
    176. [USACO Feb07] 奶牛聚会
    codevs 1515 跳
    codevs 1994 排队 排列组合+高精度
    poj 1811 Pallor Rho +Miller Rabin
    Miller_Rabin codevs 1702 素数判定2
    Lucas
    cos改ip
    用户名 不在 sudoers文件中,此事将被报告
    continue break
  • 原文地址:https://www.cnblogs.com/gnhxsk/p/5170678.html
Copyright © 2020-2023  润新知