C语言实现计算器:switch分支与函数指针对比

拾柒
拾柒
发布时间:2026-10-16 | 5人浏览过
原创

介绍如何使用 C 语言构建命令行计算器,分别演示基础的 switch 分支判断法和使用函数指针数组的优化方案。

设计目标与准备条件

本实例旨在提供一个可在终端运行的简易计算器程序,支持加法、减法、乘法和除法运算,并提供菜单选项供用户交互选择。开发环境需支持标准 C 库函数及 Windows 系统接口。

方法一:使用 switch-case 分支结构

这是最直观的编程思路,通过在主循环中使用 switch 语句直接匹配用户的菜单选项,并分别调用对应的数学函数。

第1步:定义基础功能函数与菜单

首先声明加减乘除四个独立函数,以及一个打印欢迎界面的菜单函数。

// 基础四则运算函数
int add(int x, int y) { return x + y; }
int mul(int x, int y) { return x * y; }
int sub(int x, int y) { return x - y; }
int div1(int x, int y) { return x / y; }

void menu() {
    printf("**************************\n");
    printf("****欢迎来到计算器页面****\n");
    printf("**** 1.add    2.mul  *****\n");
    printf("*****3.sub    4.div1 *****\n");
    printf("*****0.exit          *****\n");
    printf("**************************\n");
}

第2步:构建主控逻辑与输入处理

在 main 函数中建立 while 循环,根据用户输入的整型值进入不同的 case 分支。注意此处将变量 x 和 y 的定义置于 case 内部或分支前,以保证每次运算时的独立性。

int main() {
    int n = 1;
    menu();
    while (n) {
        printf("请输入选项:\n");
        scanf("%d", &n);
        
        int x = 0, y = 0;
        switch (n) {
            case 1:
                printf("请输入两个整数!\n");
                scanf("%d%d", &x, &y);
                printf("%d\n", add(x, y));
                break;
            // ... 其他 case 类似,仅替换函数名 ...
            case 0:
                printf("退出计算器!\n");
                break;
            default:
                printf("输入错误,请重新输入!\n");
        }
    }
}

此方法的优点是逻辑简单易懂,缺点是若增加新的运算符(如对数、平方根等),需要在 main 函数中不断添加重复的 case 代码块,导致代码冗余。

方法二:使用函数指针数组优化

为了解决代码冗余问题,可以利用“转移表”技术。创建一个函数指针数组,将函数地址按顺序存入数组,通过索引直接调用,从而极大地简化了分支结构。

第1步:定义函数指针数组

在 main 函数中,定义一个包含5个元素的函数指针数组 arr。数组首元素占位,后续元素依次指向 add, mul, sub, div1。这种映射关系要求下标必须与菜单选项严格对应。

int(*arr[5])() = { 0, add, mul, sub, div1 };

第2步:统一调用与执行

在获取用户输入 n 后,先进行范围检查(0 <= n < 5)。若合法,直接通过 arr[n] 取用对应的函数地址进行调用。这种方式消除了所有的 if-else 或 switch-case 代码,增加了程序的可扩展性。

if (n >= 0 && n < 5) {
    int x = 0, y = 0;
    printf("请输入两个整数:>\n");
    scanf("%d%d", &x, &y);
    // 输出结果,通过函数指针数组动态调用
    printf("%d\n", (*arr[n])(x, y));
} else {
    printf("输入有误,请重新输入!\n");
    scanf("%d", &n);
}

两种方法的对比总结

第一种方法虽然代码量稍多,但胜在语义清晰,非常适合教学和理解控制流。而第二种方法通过使用函数指针数组(即“转移表”)的方式,不仅让代码变得简洁直观,也显著提高了程序的效率和后期的可维护性。当需要新增功能时,只需增加一个函数并在数组中添加对应指针即可,无需修改庞大的分支逻辑。

以上就是C语言实现计算器的详细内容,更多关于C语言编程技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表