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

来源:互联网 发布:ubuntu jira部署 编辑:程序博客网 时间:2024/05/18 21:44
#import <Foundation/Foundation.h>#import "Final.h"int main(int argc, const char * argv[]){//    2.、动态函数调用实现下列操作,输入2个数以及操作符计算结果。//    @ 求最大公约数       $求最小公倍数//    -  求差      + 求和   等等            NFP pair[4] = {//定以结构体,建立符号与函数的对应关系        {'@',greatestCommonDivisor},        {'$',lowestCommonMultiple},        {'-',minus},        {'+',sum}    };    int a= 0,b = 0;//存放输入的数    char c ;//存放输入的符号    printf("请输入两个数:\n");    scanf("%d%d",&a,&b);    printf("请输入操作符:\n");    getchar();    scanf("%c",&c);    int  value = calculate(a, b, c, pair, 4);//调用函数    printf("结果为:%d\n",value);    return 0;}int calculate(int x,int y,char symbol,NFP*p,int n){//计算结果    int a = 0;  OPERTE FUN =  getFunctionByName(symbol, p, n);//存放得到的函数地址    if (FUN == NULL) {        printf("输入有误!!");    }else{         a = FUN(x,y);//调用函数计算            }    return a;}int sum(int x,int y){//求和    return x + y;}int minus(int x,int y){//求差    return x - y;}int greatestCommonDivisor(int x,int y){//求最大公约数    int a = 1;    while (a != 0) {//辗转相除法        a = x % y;        x = y;        y = a;    }    return x;}int lowestCommonMultiple(int x,int y){//求最小公倍数   int a = greatestCommonDivisor(x, y);    return (x * y / a);    }OPERTE getFunctionByName(char symbol,NFP *p,int n){//求要使用的函数    for (int i = 0; i < n; i++) {        if (symbol == (*(p+i)).symbol) {            return (*(p + i)).function;//找到对应函数返回地址        }    }    return NULL;//如果没有匹配到 就返回空}

0 0