回调函数的运用

动态函数调用实现下列操作,输入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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值