c语言枚举代替双switch,C语言 使用数组代替switch分支语句降低圈复杂度

#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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值