提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
我通过学习一段时间的c语言,现在想利用c进行简易计算器的编写
一、常规思路解出大概模型
1.菜单打印
我一开始想到了最简单的四则运算,于是开始布局
void menu()
{
printf("***************************\n");
printf("*****1.add 2.sub *****\n");
printf("*****3.mul 4.div *****\n");
printf("***** 0.exit *****\n");
printf("***************************\n");
}
2.运算函数的书写
Add,Sub,Mul,Div,分别取自对应英语单词的一部分,依次为:加,减,乘,除。
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 input = 0;
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
printf("请输入两个操作数:>");
scanf("%d %d", &x, &y);
printf("%d\n", Add(x, y));
break;
case 2:
printf("请输入两个操作数:>");
scanf("%d %d", &x, &y);
printf("%d\n", Sub(x, y));
break;
case 3:
printf("请输入两个操作数:>");
scanf("%d %d", &x, &y);
printf("%d\n", Mul(x, y));
break;
case 4:
printf("请输入两个操作数:>");
scanf("%d %d", &x, &y);
printf("%d\n", Div(x, y));
break;
case 0:
printf("退出\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (input);
return 0;
}
emmmmmm,这实在是过于冗余,而且在书写过程中,我不仅想到,要写入加减乘除。我还想我的计算器能为程序员提供一些便捷的服务,诸如:按位与,按位或,左移,右移等等,如果使用上述模型进行写入,未免太过于麻烦和“挫”。于是,我进行了以下改进:
二、优化、修改与补充
1.对主函数内部进行修改
首先对switch语句懂了心思,我在一段时间的思考以后,想到了用函数指针数组来替代switch语句的作用
我不需要它了,(ˉ▽ ̄~) 切~~,
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
if (input >= 1 && input <= 4)
{
printf("请输入两个操作数:>");
scanf("%d %d", &x, &y);
int ret = pfArr[input](x, y);
printf("%d\n", ret);
}
else if (input == 0)
{
printf("退出\n");
}
else
{
printf("选择错误\n");
}
} while (input);
上图为新改造的do…while函数的内容,瞬间简洁了不少,有的同志可能会问:up猪,为什么数组创建的时候要有一个0在前面呢? 立即答:为了和菜单上的命令对应,菜单上:输入 1,2,3,4 分别为加减乘除 而数组的起始位置的下表为0,故需要加入一个元素作为调整,以此来实现一下效果:
2.调整
这里对文章进行总结:emmm,我本来以为我将有很多想法在这里写出,但是好像发现,除了这个函数指针数组的转变(转变)这个项目好像也没有什么其他的亮点 悲(被撅了,bushi)
还是稍微提一下吧,至于项目中增加计算功能,诸如按位与,按位或等功能,只要写出对应的函数,在将该函数放到指针数组中,在对项目进行部分调整,就会很好的展现出你想要的功能(不要忘了在菜单中添加相应的指令提示)。
总结
这是一次对函数指针数组的良好应用,从这里可以看出,函数指针数组是确确实实有着其存在意义的 以上!(希望阅读本文的你有所收获,共勉 and respect)