如何将多分支条件的四则运算C代码简化为单一函数实现?
简化C语言四则运算的分支逻辑
方法1:使用函数指针数组(推荐,兼顾可读性与扩展性)
把四则运算封装成独立函数,再用存储函数指针的映射表替代多分支if,逻辑更简洁也更容易扩展:
#include <stdio.h> // 定义四则运算函数 double add(double a, double b) { return a + b; } double sub(double a, double b) { return a - b; } double mul(double a, double b) { return a * b; } double div(double a, double b) { return a / b; } int main() { double num1, num2, result; char op; // 构建运算符与对应计算函数的映射表 struct { char op; double (*calc)(double, double); } ops[] = {{'+', add}, {'-', sub}, {'*', mul}, {'/', div}}; int ops_len = sizeof(ops) / sizeof(ops[0]); printf("输入运算式(例:3 + 5):"); scanf("%lf %c %lf", &num1, &op, &num2); // 遍历映射表匹配运算符 for (int i = 0; i < ops_len; i++) { if (ops[i].op == op) { // 单独处理除零错误 if (op == '/' && num2 == 0) { printf("错误:除数不能为0\n"); return 1; } result = ops[i].calc(num1, num2); printf("%.2lf %c %.2lf = %.2lf\n", num1, op, num2, result); return 0; } } printf("错误:无效运算符\n"); return 1; }
方法2:一行表达式实现(仅作演示,可读性较差)
利用嵌套三元运算符压缩逻辑,但仅适合简单场景,复杂判断会大幅降低代码可读性:
#include <stdio.h> int main() { double num1, num2, result; char op; printf("输入运算式(例:3 + 5):"); scanf("%lf %c %lf", &num1, &op, &num2); // 提前处理除零异常 if (op == '/' && num2 == 0) { printf("错误:除数不能为0\n"); return 1; } // 一行嵌套三元完成运算判断 result = (op == '+' ? num1 + num2 : (op == '-' ? num1 - num2 : (op == '*' ? num1 * num2 : num1 / num2))); printf("%.2lf %c %.2lf = %.2lf\n", num1, op, num2, result); return 0; }
补充说明
- 函数指针数组的方式扩展性极强,后续新增运算(如取模
%)只需添加对应函数和映射项,无需修改核心分支逻辑。 - 一行表达式仅适合快速实现简单场景,生产环境中不推荐,不利于后续维护和调试。
内容的提问来源于stack exchange,提问作者horsse
相关产品推荐
相关产品推荐

