int m = 0;
if (x > y) {
while (y != 0) {
m = x % y;
x = y;
y = m;
}
return x;
}else{
while (x != 0) {
m = y % x;
y = x;
x = m;
}
return y;
}
}
int minMultipleFunction(int x, int y){//最小公倍數
return x * y / maxDivisorFunction(x , y);
}
int poorFunction(int x, int y){//求差函數
if (x > y) {
return x - y;
}else{
return y - x;
}
}
int sumFunction(int x, int y){//求和函數
return x + y;
}
typedef int (*Pwork)(int, int);//定義指針變量類型Pwork用來指上面的計算函數
typedef struct symbol{
char ch ;
Pwork function;
} Symbol;//定義結構體Symbol來匹配字符和指向函數的指針
Pwork findFunction(char ah, Symbol *p, int count){//定義函數findFunction用來根據輸入的字符查找對應的函數指針.
for (int i = 0; i < count; i++) {
if (ah == (p+i)->ch) {
return (p+i)->function;
}
}
return NULL;
}
int resultFunction(int x, int y, char ah, Symbol *p, int count){
Pwork function = findFunction(ah, p, count);
return function(x,y);
}
int main(int argc, const char * argv[])
{
//作業
//動態函數調用實現下列操作,輸入2個數以及操作符計算結果。
//@ 求最大公約數 $求最小公倍數
//- 求差 + 求和 等等
Symbol pair[4] = {
{'@',maxDivisorFunction},
{'$',minMultipleFunction},
{'-',poorFunction},
{'+',sumFunction}
};
int a = 0, b = 0;
char str = 0;
printf("輸入兩個數和操作符");
scanf(" %d %d %c", &a, &b, &str);
int c = resultFunction(a, b, str, pair, 5);
printf("%d",c);
return 0;
}