计算器的一种实现方式 转移表
“转移表”
double (*operation_fun[])(double,double)={add,sub,mul,div,......};
和状态有关应用if-else结构或者switch语句进行一些状态的切换,如果遇到比较复杂情况,转移次数达到数百次或者数千次,如果再使用if-else结构或者switch语句,维护起这个软件系统,工作量将会相当大。这个时候可以采用“转移表”来避免这个情况。
以下代码为计算器转移表的实现方式
#include<stdio.h>
#pragma warning (disable:4996)
int add(int a, int b) //求和
{
return a + b;
}
int sub(int a, int b) //求差
{
return a - b;
}
int mul(int a, int b) //求积
{
return a * b;
}
int div(int a, int b) //求商
{
return a / b;
}
void menu() //打印菜单
{
printf("--------------------\n");
printf("****1add 2sub ****\n");
printf("****3mul 4div ****\n");
printf("--------------------\n");
}
int main()
{
int input = 1;
int i = 0;
int x, y;
int ret = 0;
int(*p[6])(int x, int y) = { 0, add, sub, mul, div }; //转移表(指针数组)
while (input) //循环条件
{
menu(); //显示菜单
printf("请输入你的选择->\n");
printf("----------------\n");
scanf("%d", &input);
if ((input<5 && input>0)) /
{
printf("请输入操作数->\n");
scanf("%d%d", &x, &y);
ret = (p[input])(x, y);
}
else
{
printf("输入有误\n");
}
printf("ret=%d\n", ret); //打印输出结果
}
return 0;
}