基于c语言的四则运算计算器代码实现方法(提供三种方案)

本文介绍了基于C语言的三种四则运算计算器实现方式:简易逻辑、函数指针传参和函数指针数组。通过对比展示了从简单到优化的编程思路。
摘要由CSDN通过智能技术生成

本次介绍基于c语言的四则运算计算器实现,该程序可进行日常的加、减、乘、除运算。共有三种方案,第一种为简易逻辑下的代码实现,该程序较为繁琐,但容易理解;第二种为基于函数指针传参形式下的代码实现,较第一种方案进行了一定程度的优化,将四则运算进行了封装,通过指针进行调用;第三种为基于函数指针数组传参,较第二种方案进行了更加深度的优化,将四则运算封装成为了一个函数指针数组。

一、方案介绍及代码

方案一  简易逻辑下的代码实现

该方案最为简单,先放置菜单,供用户选择运算形式,随后读取用户输入的两个操作数,通过switch函数分别进行不同的运算。四则运算之间相对独立,彼此之间并无联系,逻辑简单,易于理解。代码实现如下:

#include<stdio.h>
void menu()
{
	printf("1.加法  2.减法  3.乘法  4.除法  0.退出游戏");
}
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 input = 0;
	do
	{
		int x = 0;
		int y = 0;
		menu();
		printf("请选择>");
		scanf_s("%d", &input);
		switch (input)
		{
		case 1:
			printf("请输入两个操作数>");
			scanf_s("%d %d", &x, &y);
			printf("%d\n",add(x, y));
			break;
		case 2:
			printf("请输入两个操作数>");
			scanf_s("%d %d", &x, &y);
			printf("%d\n", sub(x, y));
			break;
		case 3:
			printf("请输入两个操作数>");
			scanf_s("%d %d", &x, &y);
			printf("%d\n", mul(x, y));
			break;
		case 4:
			printf("请输入两个操作数>");
			scanf_s("%d %d", &x, &y);
			printf("%d\n", div(x, y));
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误\n");
		}

	} while (input);
}

 方案二  基于函数指针传参形式下的代码实现

该方案较第一种简单了一些,具体操作为将主函数中的四则运算通过函数指针封装为了一个cal函数,由此在主函数中仅需要调用cal函数即可,具体运算由cal函数进行调用。

代码实现如下:

其中语句"int cal(int(*pf)(int x, int y))"表示cal函数调用了一个返回值为int型、其两个操作数均为int型的函数,且cal返回值为int型。

#include<stdio.h>
void menu()
{
	printf("1.加法  2.减法  3.乘法  4.除法  0.退出游戏");
}
int cal(int(*pf)(int x, int y))//进行函数指针传参
{
	int x = 0;
	int y = 0;
	int ret = 0;
	printf("请输入两个操作数>");
	scanf_s("%d %d", &x, &y);
	printf("结果是:%d\n", pf(x, y));
}
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 input = 0;
	do
	{
		menu();
		printf("请选择>");

		scanf_s("%d", &input);
		switch (input)
		{
		case 1:
			cal(add);
			break;
		case 2:
			cal(sub);
			break;
		case 3:
			cal(mul);
			break;
		case 4:
			cal(div);
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误\n");
		}

	} while (input);
}

方案三  基于函数指针数组传参

本方案是最为优化的代码实现,将四则运算封装成了一个函数指针数组,通过用户输入的值直接调用数组中对应的运算的地址,四则运算直接成为了一个统一的整体,不需要通过switch函数进行分类,对于用户使用或调试时较为容易。代码如下:

#include<stdio.h>
void menu()
{
	printf("1.加法  2.减法  3.乘法  4.除法  0.退出游戏");
}
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 (*pfarr[])(int, int) = { 0,add,sub,mul,div };
	int input = 0;
	do
	{
		menu();
		printf("请选择>");
		scanf_s("%d", &input);
		if (input > 0 && input < 5)
		{
			int x = 0;
			int y = 0;
			printf("请输入两个操作数>");
			scanf_s("%d %d", &x, &y);
			printf("结果是:%d\n", pfarr[input](x, y));
		}
		else if(input==0)
		{
			printf("退出游戏\n");
			break;
		}
		else
		{

			printf("输入错误\n");
		}

	} while (input);
}

二、 运行仿真

以上三种方案均能呈现同一种效果,只是实现方式不同而已。代码运行结果呈现如下:

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值