c语言函数回调函数回调

来源:互联网 发布:qq三国js打架怎么打 编辑:程序博客网 时间:2024/06/18 01:48
















实现以上功能



首先还是老规矩创建.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);


//定义个函数指针

typedefBOOL (*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");

    


    

   enumFunctionName funNa=CompareNameByAscending1;

    

    

    

    //int a=0;

    

   while (funNa < 9) {

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

       scanf("%d",&funNa);

        

       switch (funNa) {

            caseCompareNameByAscending1:

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

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

                funNa =10;

               break;

                

            caseCompareNameByDescending1:

                

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

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

                funNa =10;

               break;

            caseCompareNumberByAscending2:

               

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

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

                funNa =10;

               break;

            caseCompareNumberByDescending2:

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

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

                funNa =10;

               break;

            caseCompareScoreByAscending3:

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

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

                funNa =10;

               break;

            caseCompareScoreByDescending3:

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

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

                funNa =10;

               break;

                

            casePrintMaleTeacher:

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

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

                funNa =10;

               break;

            casePrintFemaleTeacher:

               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
原创粉丝点击