C语言实现计算器-加减乘除(三种方法实现)

一、回调函数:

回调函数就是一个通过函数指针调用的函数,如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方,而是在特定的事件或条件发生时有另一方调用的,用于该事件或条件进行相应。

二、代码实现:

1:冗余版本:

#include <stdio.h>
void menu()
{
	printf("*********************************\n");
	printf("********* 1:Add    2:Sub ********\n");
	printf("********* 3:Mul    4:Div ********\n");
	printf("********* 0:exti         ********\n");
	printf("*********************************\n");
}
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("%d", &input);
		switch (input)
		{
		case 1:
			printf("请输入两个操作数!\n");
			scanf("%d %d", &x, &y);
			printf("%d\n", Add(x,y));
			break;
		case 2:
			printf("请输入两个操作数!\n");
			scanf("%d %d", &x, &y);
			printf("%d\n", Sub(x, y));
			break;
		case 3:
			printf("请输入两个操作数!\n");
			scanf("%d %d", &x, &y);
			printf("%d\n", Mul(x, y));
			break;
		case 4:
			printf("请输入两个操作数!\n");
			scanf("%d %d", &x, &y);
			printf("%d\n", Div(x, y));
			break;
		case 0:
			printf("退出计算器!\n");
			break;
		default:
			printf("选择错误!");
			break;
		}
	} while (input);
	return 0;
}

2:回调函数版本

#include <stdio.h>
void menu()
{
	printf("*********************************\n"); 
	printf("********* 1:Add    2:Sub ********\n");
	printf("********* 3:Mul    4:Div ********\n");
	printf("********* 0:exti         ********\n");
	printf("*********************************\n");
}
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;
}
void calc(int (*pf)(int, int))//此时用回调函数的方法简化代码。
{                             //回调函数:一个通过函数指针调用的函数。所以Add、Sub、Mul、Div,被称为回调函数。
	int x = 0;
	int y = 0;
	int ret = 0;
	printf("请输入两个操作数!\n");
	scanf("%d %d", &x, &y);
	ret = pf(x, y);
	printf("%d\n", ret);
}
int main()
{
	int input = 0;
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			calc(Add);
			break;
		case 2:
			calc(Sub);
			break;
		case 3:
			calc(Mul);
			break;
		case 4:
			calc(Div);
			break;
		case 0:
			printf("退出计算器!\n");
			break;
		default:
			printf("选择错误!");
			break;
		}
	} while (input);
	return 0;
}

3:转移表实现

#include <stdio.h>
void menu()
{
	printf("*********************************\n"); 
	printf("********* 1:Add    2:Sub ********\n");
	printf("********* 3:Mul    4:Div ********\n");
	printf("********* 0:exti         ********\n");
	printf("*********************************\n");
}
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 (*pf[5])(int, int) = { NULL,Add,Sub,Mul,Div };//函数指针数组存放上述指针的地址 - 转移表
int main()
{
	int input = 0;
	int x = 0;
	int y = 0;
	int ret = 0;
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d\m", &input);
		if(input == 0)
		{
			printf("退出计算器\n");
			break;
		}
		else if (input >= 1 && input <= 4)
		{
			printf("请输入两个参数:>");
			scanf("%d %d", &x, &y);
			ret = pf[input](x, y);
			printf("%d\n", ret);
		}
		else
		{
			printf("选择错误!");
		}


	} while (input);
	return 0;
} 

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年12月15日
下一篇 2023年12月15日

相关推荐