#include typedef int(*CALCULATE_FUN)(int, int); //定義函數指針
typedef struct tagStruct
{
CALCULATE_FUN fun_name; //結構體成員,存放函數
char calc_flag; //結構體成員,存放符號
}CALC_STRUCT;
/* 加減乘除函數聲明 */
int fun_add(int x, int y);
int fun_sub(int x, int y);
int fun_mul(int x, int y);
int fun_div(int x, int y);
/* 初始化數組 */
CALC_STRUCT fun_array[4] = {{fun_add, '+'},
{fun_sub, '-'},
{fun_mul, '*'},
{fun_div, '/'}};
void method1(int data_a, int data_b, int flag)
{
int ret;
switch (flag)
{
case 1:
{
ret = fun_add(data_a, data_b); //傳入函數進行計算
flag = '+'; //獲取符號
break;
}
case 2:
{
ret = fun_sub(data_a, data_b);
flag = '-';
break;
}
case 3:
{
ret = fun_mul(data_a, data_b);
flag = '*';
break;
}
case 4:
{
ret = fun_div(data_a, data_b);
flag = '/';
break;
}
default:
{
/* 錯誤的情況 */
printf("Symbol input error.");
return;
}
}
/* 打印算式 */
printf("%d %c %d = %d\n",data_a, flag, data_b, ret);
return;
}
void method2(int data_a, int data_b, int flag)
{
int ret;
if ((flag < 1) || (flag > 4))
{
/* 錯誤的情況 */
printf("Symbol input error.");
return;
}
ret = (*fun_array[flag - 1].fun_name)(data_a, data_b); //計算獲取結果
flag = fun_array[flag - 1].calc_flag; //獲取符號
printf("%d %c %d = %d\n", data_a, flag, data_b, ret); //打印算式
}
void main(void)
{
int flag;
int a = 8;
int b = 4;
/* 總共有4中計算方法,輸入1 2 3 4 選擇 */
scanf("%d", &flag);
method1(a, b, flag); //實現方法一 高圈復雜度
method2(a, b, flag); //實現方法二 低圈復雜
}
/* 加函數 */
int fun_add(int x, int y)
{
return x + y;
}
/* 減函數 */
int fun_sub(int x, int y)
{
return x - y;
}
/* 乘函數 */
int fun_mul(int x, int y)
{
return x * y;
}
/* 除函數,不帶小數 */
int fun_div(int x, int y)
{
return x / y;
}