【c语言】新概念(bushi) Water Article 多功能计算器的数学

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

我通过学习一段时间的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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值