动态函数调用实现下列操作,输入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;
}`