回调函数的运用

来源:互联网 发布:模仿声音软件下载 编辑:程序博客网 时间:2024/06/05 08:52

动态函数调用实现下列操作,输入2个数以及操作符计算结果。
‘@‘ 求最大公约数 ‘ $‘求最小公倍数
‘-‘求差 ‘+‘ 求和 等等
###

#import <Foundation/Foundation.h>typedef int(*PFUN)(int,int);//定义函数指针变量类型typedef struct nameFunctionPair{    char name;    PFUN p_fun;}NameFunctionPair;//定义结构体存放函数名和函数指针int gongyueshu(int x,int y){//求最大公约数的函数    while (x!=y) {        if (x>y) {            x=x-y;        }else {            y=y-x;        }    }    return x;};int gongbeishu(int x,int y){//求最小公倍数的函数    int m = gongyueshu(x,y);    return x*y/m;};int sum(int x,int y){//求和函数    return x+y;};int jian(int x,int y){//相减函数    return x-y;};NameFunctionPair list[]//函数指针结构体数组={    {'@',gongbeishu},    {'$',gongyueshu},    {'+',sum},    {'-',jian}};PFUN getFunctionByName(char name){//函数,从函数结构体数组得到函数名,返回函数指针    for(int i=0;i<4;i++){        if (list[i].name == name) {            return list[i].p_fun;        }    }    printf("Please enter correct function name\n");    return 0;};int getResult(int x,int y,PFUN pfun ){//函数,用回调函数,求出函数指针对应的函数运算之后的结果    if (pfun==0) {        return -1;    }    return pfun(x,y);};int main(int argc, const char * argv[]) {    int x=0,y=0;    char name='0';    printf("请输入运算:\n");    scanf("%d%c%d",&x,&name,&y);//输入运算    PFUN fun = getFunctionByName(name);//得到函数指针    int result = getResult(x,y,fun );//求出函数结果    printf("%d%c%d=%d\n",x,name,y,result);    return 0;}`
0 0
原创粉丝点击