您的位置:首页 > 其它

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

2014-07-31 09:21 411 查看
<span style="font-size:24px;">//求最大公约数
int greatestDivisorOfTwo(int x, int y){
int min = x < y ? x : y;
int i = 0;
for (int i = min; i > 0; i--) {
if (x % i == 0 && y % i == 0) {
break;
}
}
return i;
}
//求最小公倍数
int leastMultipleOfTwo(int x, int y ){
int m = greatestDivisorOfTwo( x, y);//函数内部调用求最大公约数的函数
return x * y % m;
}
//求差
int differenceOfTwo(int x, int y){
return  x - y;
}
//求和
int sumNumberOfTwo(int x, int y){
return x + y;
}
//函数指针类型重定义
typedef int(*pF)(int,int);//用来指向上面的函数
typedef struct operation {
char symbol;//存储运算符
pF function;
}Operation;
//根据输入的内容查找匹配表中的函数,结构体,有返回值
pF getFunctionBySymol(char temp, Operation *oper, int count){
for (int i = 0; i < count; i++) {
if (temp == (oper + i) ->symbol) {
return  (oper + i)->function;//返回表中对应的函数
}
}
return NULL;
}
int slove(int a, int b, char temp, Operation *pOp,int count){//接收字符,整型常量不用指针,只需要和实参类型一样的行参
pF function = getFunctionBySymol(temp, pOp, count);//函数调用,指向这个函数
int m = function(a, b);
return m;

}
//输出计算值
//void calculate()
int main(int argc, const char * argv[])
{
//动态函数调用实现下列操作,输入2个数以及操作符计算结果。
//@ 求最大公约数       $求最小公倍数
// -  求差      + 求和   等等
//运算符与函数匹配表
Operation operate[4] = {
{'@', greatestDivisorOfTwo},
{'$', leastMultipleOfTwo},
{'-', differenceOfTwo},
{'+', sumNumberOfTwo}
};

int a = 0;
int b = 0;
char c = ' ';
printf("请输入两个数和运算符:(@求最大公约数,$求最小公倍数- 求差,+求和)");
//把字符放到前面,因为空格也是一个字符,当把字符放到后边的时候,因为输入的数和字符要用空格隔开,此时,这个空格会默认为要输入的字符,从而无法运行,但是两个整型变量之间的空格是为了区分两个整型变量,因为先输整型常量,在第一个整型常量输完之后第二个也是为一个整型常量,所以没有影响
scanf("%c" , &c);
scanf("%d%d", &a,&b);
//2)    getchar();
//    scanf("%c",&c);

printf("%d\n", slove(a, b, c, operate, 4));
</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐