c语言函数回调函数回调

















实现以上功能



首先还是老规矩创建.h文件和.m文件

.h文件声明一下几个函数方法


//创建一个Teacher结构体

typedef struct teacher{


    char Name[20];//姓名

    char Sex;//性别

    int Age; //年龄

    int TeacherID;// 编号

    float grade;//评分

}Teacher;


//3声明打印Teacher函数

//void printTeacher(Teacher  teacher)


void printTeacher(Teacher *tcher,int count);


//定义个函数指针

typedef BOOL (*plus)(Teacher teacher1,Teacher teacher2);



void sortTeachers(Teacher teacher3[],int count,plus pt);





//打印所有老师的函数


void printTeachers(Teacher *teachers,int count);



//分别声明两个比价函数 Teacher 姓名的函数(升序)

BOOL compareNameByAscending1(Teacher teacher1,Teacher teacher2);


//分别声明两个比价函数 Teacher 姓名的函数(降序)

BOOL compareNameByDescending1(Teacher teacher1,Teacher teacher2);


分别声明两个比价函数 Teacher 员工编号的函数(升序)

//

//BOOL compareNumberByAscending(Teacher teacher1,Teacher teacher2);


//分别声明两个比价函数 Teacher 员工编号的函数(升序)


BOOL compareNumberByAscending2(Teacher teacher1,Teacher teacher2);


//分别声明两个比价函数 Teacher 员工编号的函数(降序)


BOOL compareNumberByDescending2(Teacher teacher1,Teacher teacher2);


//分别声明两个比价函数 Teacher 员工评分的函数(升序)

BOOL compareScoreByAscending3(Teacher teacher1,Teacher teacher2);


//分别声明两个比价函数 Teacher 员工评分的函数(降序)


BOOL compareScoreByDescending3(Teacher teacher1,Teacher teacher2);




//声明一个输出教师数组中为全部男老师的函数

void printMaleTeacher(Teacher *teachers,int count);


//声明一个输出教师数组中为全部女老师的函数

void printFemaleTeacher(Teacher *teachers,int count);




在.m文件作方法实现

void printTeacher(Teacher *tcher,int count)

{

    for (int i= 0; i<count; i++) {

        printf("name=%s ,sex=%c ,Age=%d, TeacherID=%d grade=%.2f\n",tcher[i].Name,tcher[i].Sex,tcher[i].Age,tcher[i].TeacherID,tcher[i].grade);

    }

};




//声明老师数组进行排序

void sortTeachers(Teacher teacher3[],int count,plus pt)

{

    for (int i = 0; i<count; i++) {

        for (int j = 0; j<count-i-1; j++) {

            if (pt(teacher3[j],teacher3[j+1])) {

                Teacher temp = teacher3[j+1];

                teacher3[j+1] = teacher3[j];

                teacher3[j] = temp;

            }

        }

    }

    


};


//打印所有老师的函数


void printTeachers(Teacher *teachers,int count)

{

    for (int i = 0 ; i<count; i++) {

        printf("名字%s 性别%c 年龄=%d 编号%d 评分%.2f\n",teachers[i].Name ,teachers[i].Sex,teachers[i].Age,teachers[i].TeacherID, teachers[i].grade);

    }


};


//升序方法

BOOL compareNameByAscending1(Teacher teacher1,Teacher teacher2)

{    

    return strcmp(teacher1.Name,teacher2.Name)>0?YES:NO;


};

//分别声明两个比价函数 Teacher 姓名的函数(降序)

BOOL compareNameByDescending1(Teacher teacher1,Teacher teacher2)

{


    return strcmp(teacher1.Name, teacher2.Name)<0 ?YES:NO;

};


//分别声明两个比价函数 Teacher 员工编号的函数(升序)

BOOL compareNumberByAscending2(Teacher teacher1,Teacher teacher2)

{

    

    return teacher1.TeacherID > teacher2.TeacherID?YES:NO;

};



//分别声明两个比价函数 Teacher 员工编号的函数(降序)


BOOL compareNumberByDescending2(Teacher teacher1,Teacher teacher2)

{

    

    return teacher1.TeacherID < teacher2.TeacherID?YES:NO;


};


//分别声明两个比价函数 Teacher 员工评分的函数(升序)

BOOL compareScoreByAscending3(Teacher teacher1,Teacher teacher2)

{


    return teacher1.grade > teacher2.grade?YES:NO;


};


//分别声明两个比价函数 Teacher 员工评分的函数(降序)


BOOL compareScoreByDescending3(Teacher teacher1,Teacher teacher2)

{

    

    return teacher1.grade < teacher2.grade?YES:NO;

};


//声明一个输出教师数组中为全部男老师的函数

void printMaleTeacher(Teacher *teachers,int count)

{


    for (int i =0; i<count;i++) {

        if (teachers[i].Sex=='w') {

            printf("名字%s 性别%c 年龄=%d 编号%d 评分%.2f\n",(teachers+i)->Name ,teachers[i].Sex,teachers[i].Age,teachers[i].TeacherID, teachers[i].grade);


        }

    }

};


//声明一个输出教师数组中为全部女老师的函数

void printFemaleTeacher(Teacher *teachers,int count)

{



    for (int i =0; i<count;i++) {

        if (teachers[i].Sex=='f') {

            printf("名字%s 性别%c 年龄=%d 编号%d 评分%.2f\n",teachers[i].Name ,teachers[i].Sex,teachers[i].Age,teachers[i].TeacherID, teachers[i].grade);

            

        }

    }


};




在main方式调用实现功能




#import <Foundation/Foundation.h>

#import "Teacher.h"

enum FunctionName{

    //Teacher 姓名的函数(升序)

    CompareNameByAscending1 = 1,

    //Teacher 姓名的函数(降序)

    CompareNameByDescending1,

    

    // Teacher 员工编号的函数(升序)

    CompareNumberByAscending2,

    

    // Teacher 员工编号的函数(降序)

    CompareNumberByDescending2,

    

    // Teacher 员工评分的函数(升序)

    CompareScoreByAscending3,

    // Teacher 员工评分的函数(降序)

    CompareScoreByDescending3,

    //男老师

    PrintMaleTeacher,

    //女老师

    PrintFemaleTeacher

    

};




int main(int argc, const char * argv[]) {


    

    //1. 创建一对文件Teacher.h Teacher.m

    

    Teacher Teacher[5]={{"zhangsan",'w',25,9587,80},{"lisi",'f',30,9875,78},{"wangwu",'w',28,5679,92},{"kuijia",'f',20,88,80},{"longyang",'f',24,72,100}};

    

    sortTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]),compareNameByAscending1);

    

    

    

    printf("输入1:实现按照姓名进行升序排列\n");

    printf("输入2:实现按照姓名进行降序排列\n");

    printf("输入3:实现按照员工编号进行升序排列\n");

    printf("输入4:实现按照员工编号进行降序排列\n");

    printf("输入5:实现按照员工评分进行升序排列\n");

    printf("输入6:实现按照员工评分进行降序排列\n");

    printf("输入7:实现输出所有男老师\n");

    printf("输入8:实现输出所有女老师\n");

    printf("=======================\n");

    


    

   enum FunctionName funNa= CompareNameByAscending1;

    

    

    

    //int a=0;

    

    while (funNa < 9) {

        printf("请输入实现功能对应数字:");

        scanf("%d",&funNa);

        

        switch (funNa) {

            case CompareNameByAscending1:

                sortTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]),compareNameByAscending1);

                printTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]));

                funNa = 10;

                break;

                

            case CompareNameByDescending1:

                

                sortTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]),compareNameByDescending1);

                printTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]));

                funNa = 10;

                break;

            case CompareNumberByAscending2:

               

                sortTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]),compareNumberByAscending2);

                printTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]));

                funNa = 10;

                break;

            case CompareNumberByDescending2:

                sortTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]),compareNumberByDescending2);

                printTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]));

                funNa = 10;

                break;

            case CompareScoreByAscending3:

               sortTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]),compareScoreByAscending3);

                printTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]));

                funNa = 10;

                break;

            case CompareScoreByDescending3:

                sortTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]),compareScoreByDescending3);

                 printTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]));

                funNa = 10;

                break;

                

            case PrintMaleTeacher:

                printMaleTeacher(Teacher,sizeof(Teacher)/sizeof(Teacher[0]));

              //  printMaleTeacher(Teacher,sizeof(Teacher)/sizeof(Teacher[0]));

                funNa = 10;

                break;

            case PrintFemaleTeacher:

                printFemaleTeacher(Teacher,sizeof(Teacher)/sizeof(Teacher[0]));

               // printMaleTeacher(Teacher,sizeof(Teacher)/sizeof(Teacher[0]));

                funNa = 10;

                break;

            default:

                printf("对不起~请重新输入");

                continue;

        }

    }

    //a++;

        

    //}

    

    return 0;

}





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值