C语言利用函数指针数组实现简易计算器
本文详细解析了如何在 C 语言中运用函数指针数组来制作一个基础的命令行计算器。通过构建操作数函数集合,并结合 do-while 循环处理用户交互,实现了菜单选项到具体算术运算的直接映射。
概念回顾
在深入代码之前,明确三个核心概念:
- 指针数组:存放指针的数组。
- 函数指针:存放函数地址的指针。
- 函数指针数组:用于存放函数指针的数组。
准备条件
计算器需支持以下基础功能,并具备循环退出机制:
Add—— 加法Sub—— 减法Mul—— 乘法Div—— 除法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语言 函数指针应用与基础算法的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









