C语言利用函数指针数组实现简易计算器

巷口听风
巷口听风
发布时间:2026-10-16| 4人浏览过
原创

本文详细解析了如何在 C 语言中运用函数指针数组来制作一个基础的命令行计算器。通过构建操作数函数集合,并结合 do-while 循环处理用户交互,实现了菜单选项到具体算术运算的直接映射。

概念回顾

在深入代码之前,明确三个核心概念:

  • 指针数组:存放指针的数组。
  • 函数指针:存放函数地址的指针。
  • 函数指针数组:用于存放函数指针的数组。

准备条件

计算器需支持以下基础功能,并具备循环退出机制:

  1. Add —— 加法
  2. Sub —— 减法
  3. Mul —— 乘法
  4. Div —— 除法
  5. Exit —— 退出程序(选择 0)

实现步骤

第1步:定义运算函数

首先编写四个独立的算数函数,它们接收两个整型参数并返回计算结果。这是后续存入指针数组的基础对象。

int Add(int x, int y)
{
 return x + y;
}
int Sub(int x, int y)
{
 return x - y;
}
int Mul(int x, int y)
{
 return x * y;
}
int Div(int x, int y)
{
 return x / y;
}

第2步:设置用户菜单界面

创建一个 menu() 函数,用于在每次循环开始时打印友好的操作指引,增强用户体验。

void menu()
{
 printf("*************************\n");
 printf("*******   1.Add   *******\n");
 printf("*******   2.Sub   *******\n");
 printf("*******   3.Mul   *******\n");
 printf("*******   4.Div   *******\n");
 printf("*******   0.Exit  *******\n");
 printf("*************************\n");
}

第3步:初始化主程序环境

在 main 函数中声明必要的变量:x 和 y 用于存储用户输入的操作数,input 用于接收用户的菜单选项,ret 用于接收函数执行后的返回值。随后调用 menu() 显示首次提示。

int main()
{
 int x = 0;
 int y = 0;
 int ret = 0;
 int input = 0;
 menu(); // 打印菜单

第4步:创建函数指针数组

这是实现灵活调用的核心。定义一个包含 5 个元素的函数指针数组 pfarr。每个元素指向一个具有特定签名的函数。为了便于使用菜单序号进行索引,我们将 0 放在数组首部(代表退出或不执行),而将 Add, Sub, Mul, Div 依次放入后四位,这样 pfarr[1] 自动对应加法。

// 注意:这里的语法是指针数组的定义格式
// pfarr 是一个数组,其成员是函数指针
int (*pfarr[5])(int, int) = { 0, Add, Sub, Mul, Div };

第5步:实现交互逻辑与动态调用

使用 do...while 循环维持程序运行状态,直到用户选择退出。在循环内部,根据 input 的值判断分支:

  • 如果 input == 0:打印退出信息并结束循环。
  • 如果 1 <= input <= 4:提示用户输入两个数字,并通过 pfarr[input](x, y) 的方式,直接使用数组下标调用对应的函数指针,获取结果并存入 ret。
  • 其他情况:提示输入错误,继续下一轮循环。
do {
 printf("请选择你要进行的操作:\n");
 scanf("%d", &input);
 if (input == 0) {
  printf("退出计算器!\n");
 }
 else if (input >= 1 && input <= 4)
 {
  printf("请输入两个数字:\n");
  scanf("%d %d", &x, &y);
  // 关键操作:通过下标索引调用对应的函数
  ret = pfarr[input](x, y);
  printf("计算结果为: %d\n", ret);
 }
 else {
  printf("选择错误,请重新输入!\n");
 }
} while (input); // input为0时循环终止

完整参考代码

整合上述所有模块,以下是完整的 C 语言计算器源代码:

#include <stdio.h>

// 1. 定义菜单函数
void menu()
{
 printf("*************************\n");
 printf("*******   1.Add   *******\n");
 printf("*******   2.Sub   *******\n");
 printf("*******   3.Mul   *******\n");
 printf("*******   4.Div   *******\n");
 printf("*******   0.Exit  *******\n");
 printf("*************************\n");
}

// 2. 定义各个运算函数
int Add(int x, int y)
{
 return x + y;
}
int Sub(int x, int y)
{
 return x - y;
}
int Mul(int x, int y)
{
 return x * y;
}
int Div(int x, int y)
{
 return x / y;
}

// 3. 主程序入口
int main()
{
 int x = 0;
 int y = 0;
 int ret = 0;
 int input = 0;

 menu(); // 打印初始菜单
 
 // 定义函数指针数组
 int (*pfarr[5])(int, int) = { 0, Add, Sub, Mul, Div };
 
 do {
  printf("请选择你要进行的操作:\n");
  scanf("%d", &input);
  
  if (input == 0) {
   printf("退出计算器!\n");
  }
  else if (input >= 1 && input <= 4)
  {
   printf("请输入两个数字(空格分隔):\n");
   scanf("%d %d", &x, &y);
   // 根据输入值直接调用数组中对应的函数
   ret = pfarr[input](x, y);
   printf("ret = %d\n", ret);
  }
  else {
   printf("选择错误!\n");
  }
 } while (input);

 return 0;
}

以上就是利用 C 语言函数指针数组实现计算器功能的详细内容,更多关于 C语言 函数指针应用与基础算法的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。