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

<span style="font-family:Arial;font-size:32px;">#import <Foundation/Foundation.h>
//求最大公约数
int maxDivisor(int x, int y){
    int i = 0;
    if (x < y) {
        for (int i = x; i > 0; i--) {
            if (x % i ==0 && y % i ==0) {
                break;
            }
        }
    }else if (x > y){
        for (int i = y; i > 0; i--) {
            if (x % i ==0 && y % i ==0) {
                break;
            }
        }
    }
    return i;
}
//求最小公倍数
int minMultiple(int x ,int y){
    int i = 0;
    if (x < y) {
        for (int i = y; i >= y; i++) {
            if (i % x ==0 && i % y==0) {
                break;
            }
        }
    }else if (x > y){
        for (int i = x; i >= x; i++) {
            if (i % x ==0 && i % y ==0) {
                break;
            }
        }
    }
    return i;
}
//求和
int sumValue(int x,int y){
     return  x + y;
}
//求差
int poorValue(int x, int y){
    return  x - y;
}
typedef int (*FUN)(int,int);

//建立操作符和函数对应的一一关系
typedef struct symFunctionPair{
    char sym;   //存储函数对应的操作符
    FUN function;  //存储操作符对应的函数地址
}SymFunctionPair;


FUN getFunctionBySym(char sym,SymFunctionPair *p,int count){
    //根据输入的内容查表匹配对应的函数
    for (int i = 0; i < count; i++) {
        if (sym == (p + i)->sym) {
            return (p + i)->function;
        }
    }
    return NULL;
}

void output(int x,int y,char sym,SymFunctionPair *pair,int count){
    FUN function = getFunctionBySym(sym, pair, count);
    int value = function(x,y);
    printf("%d",value);
}
   

int main(int argc, const char * argv[])
{
    
    int a = 0;
    int b = 0;
    char c = ' ';
    printf("请输入两个数和操作符\n");
    scanf(" %d %c %d",&a,&c,&b);
//    getchar();
//    scanf("%c",&c);
    
    //创建匹配表
    SymFunctionPair pair[4] = {
        {'@',maxDivisor},
        {'$',minMultiple},
        {'-',poorValue},
        {'+',sumValue}
    };
    output(a, b, c, pair, 4);
    return 0;
}
</span>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值