利用函数指针数组实现 计算器

1.switch+函数实现

#include <stdio.h>
#pragma warning(disable:4996)
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;
}
int main()
{
	int select;
	printf("**********************\n");
	printf("***1:add      2:sub***\n");
	printf("***3:mul      4:div***\n");
	printf("****          0:exit***\n");
	printf("***********************\n");
	printf("请选择要执行的运算:");
	scanf("%d", &select);
	const char *lable = "+-*/";
	while (select)
	{
		switch (select)
		{
			int x, y, z = 0;
		case 1:
			printf("请输入两个操作数:\n");
			scanf("%d %d", &x, &y);
			z = add(x, y);
			printf("%d %c %d = %d\n", x, lable[select - 1], y, z);
			break;
		case 2:
			printf("请输入两个操作数:\n");
			scanf("%d %d", &x, &y);
			z = sub(x, y);
			printf("%d %c %d = %d\n", x, lable[select - 1], y, z);
			break;
		case 3:
			printf("请输入两个操作数:\n");
			scanf("%d %d", &x, &y);
			z = mul(x, y);
			printf("%d %c %d = %d\n", x, lable[select - 1], y, z);

			break;
		case 4:
			printf("请输入两个操作数:\n");
			scanf("%d %d", &x, &y);
			if (y == 0)
			{
				printf("error,分母不能为0");
			}
			z = div(x, y);
			printf("%d %c %d = %d\n", x, lable[select - 1], y, z);

			break;
		case 0:
			printf("beybey!");
			select = 0;
			break;
		default:
			printf("error!请重新输入。");
			break;
		}
	}	
}

2.函数指针数组形成转移表实现计算器

通过观察可以发现,上面的代码,switch语句存在很多重复语句,下面利用函数指针数组来简化代码

#include <stdio.h>
//#include <stdlib.h>
#pragma warning(disable:4996)
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)
{
	if (y==0)
	{
		printf("error,分母不能为0");
	}
	return x / y;
}
int main()
{
	int select = 1;
	const char *lable = "+-*/";
	int(*p[5])(int x, int y) = { add,sub,mul,div};
	while (select)
	{
		printf("**********************\n");
		printf("***1:add      2:sub***\n");
		printf("***3:mul      4:div***\n");
		printf("****          0:exit***\n");
		printf("***********************\n");
		printf("请选择要执行的运算:");
		scanf("%d", &select);
		if (select < 5 && select>0)
		{
			int x, y, z = 0;
			printf("请输入两个操作数:\n");
			scanf("%d %d", &x, &y);
			z = (*p[select-1])(x, y);
			printf("%d %c %d = %d\n", x, lable[select - 1], y, z);
		}
		else
		{
			printf("请重新输入\n");
		}
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个C程序,可以实现加减乘除的计算器功能。程序首先接受两个数作为输入,然后根据用户输入的操作符进行相应的运算,最后输出结果。具体的实现步骤如下: 1. 引用的代码中首先包含了两个头文件,iostream用于输入输出流,cstring用于字符串操作。接下来使用了using namespace std来引入标准命名空间。 2. 在主函数main()中,定义了整型变量a和b用于存储用户输入的两个数。 3. 进入while循环,循环条件为1,即永远为真,使得程序可以一直进行计算。 4. 接下来定义了整型变量f1和f2,用于存储操作数和结果。 5. 定义了字符数组a,用于存储用户输入的操作符。 6. 使用cin输入流依次读取f1和a。 7. 使用strlen函数获取字符数组a的长度。 8. 定义了指针p指向字符数组a的首地址。 9. 使用for循环遍历字符数组a,从索引1开始,将字符转换为整型数字,并计算f2的值。 10. 利用switch语句根据操作符进行相应的运算,将结果存储在ans变量中。 11. 使用delete释放动态分配的内存,避免内存泄漏。 12. 使用cout输出结果ans。 13. 循环回到while开始的地方,继续接受输入并进行计算。 这段代码实现了一个简单的C语言加减乘除的计算器。用户可以输入两个数和一个操作符,然后程序会根据操作符进行相应的运算并输出结果。<span class="em">1</span><span class="em">2</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值