<span style="font-size:18px;">/*动态函数调用实现下列操作,输入2个数以及操作符计算结果。
@ 是求最大公约数 $是求最小公倍数 - 是求差 + 是求和
*/
int Dvalue(int x ,int y); //求差值
int Dvalue(int x ,int y)
{
return x - y;
}
int Sum(int x ,int y); //求和值
int Sum(int x ,int y)
{
return x + y;
}
int GCD(int x,int y);
int GCD(int x,int y) //最大公约数
{
int min = x < y ? x : y;
for (int i = min; i >= 1; i--) {
if (x % i == 0 && y % i == 0) {
return i;
break;
}
}
return 0;
}
int LEC(int x , int y ); //最小公倍数
int LEC(int x , int y )
{
int max = x > y ? x : y;
for (int i = max; i <= x * y; i ++) {
if (i % x == 0 && i % y == 0) {
return i;
}
}
return 0;
}
typedef int(*PHT)(int x, int y);
typedef struct operationOperator//对应运算符与函数
{
char a;
PHT p;
}OP;
PHT getfounctionName(OP *oper,int count,char a);
PHT getfounctionName(OP *oper,int count,char a)
{
for (int i = 0; i < count; i ++) {
if (a == (oper + i)->a) {
return (oper + i)->p; //寻找用户输入符号和运算符相同的字符
}
}
return NULL;
}
void qiu(OP *oper,int count ,char a,int x ,int y);
void qiu(OP *oper,int count ,char a ,int x,int y)
{
PHT founction = getfounctionName(oper, count, a);
// printf("%d\n",founction(x,y));
int b = (founction(x,y));
printf("%d",b); //输出运算结果
}
int main(int argc, const char * argv[])
{
char a = 0 ;
OP oper[4] = {
{'-',Dvalue},
{'+',Sum},
{'@',GCD},
{'$',LEC}
};
printf("请输入要操作的运算(求差-),(求和+),(求最小公倍数$),(求最大公约数@)");
scanf("%c",&a);
qiu(oper,4 ,a,3,6);
</span>