数组的方法和回调函数的编写简单的计算器

本文主要使用函数指针数组的方法和回调函数的方法来写一个简单的计算器。

函数指针方法

#include 
void menu()                           //打印菜单的函数
{
	printf("*******************\n");
	printf("****1.add 2.sub****\n");
	printf("****3.mul 4.div****\n");
	printf("***** 0.exit ******\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 a, b, ret,input;
	int(*p[5])(int, int) = { 0,ADD,SUB,MUL,DIV };//定义一个函数指针数组,把四个函数的地址传进去,
	do                                           //为了使调用函数的下标与输入的值匹配,我们再前面多开辟一块空间。
	{
		menu();
		printf("请输入选项:\n");
		scanf("%d", &input);
		if (input == 0)
			printf("退出计算器\n");
		else if (input > 0 && input < 5)
		{
			printf("请输入两个操作数:\n");
			scanf("%d%d", &a, &b);
			ret = p[input](a, b);               //通过函数指针数组里的指针调用函数。
			printf("计算结果为:%d\n", ret);
		}
		else
			printf("输入错误,请重新输入!\n");
	} while (input);
	return 0;
}

在写这段代码的时候,我们首先想的是如何实现这个程序,首先我们需要打印计算器的菜单c计算器代码简易版,然后根据输入的数字确定我们执行什么操作。计算完成后,我们需要回去再次选择,然后计算重复,所以我们可以先写一个do...while循环,然后输入选项,根据输入的内容编写程序执行,可以用一个if语句来实现,而我们选择计算的时候,首先需要输入两个需要计算的操作数,然后再计算一遍,发现这四个函数的参数类型和返回类型是同理,那么我们可以创建一个函数指针数组c计算器代码简易版,把四个函数的地址放进去,然后解引用它们就可以使用这些函数,然后我们再写几个如果输入错误的措施,你就完成了这样一个功能。

回调函数方法

#include 
void menu()                           //打印菜单的函数
{
	printf("*******************\n");
	printf("****1.add 2.sub****\n");
	printf("****3.mul 4.div****\n");
	printf("***** 0.exit ******\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 calat(int(*pa)(int, int))          //calat的函数参数为函数的地址,
{                                       //不同的函数地址,调用不同的函数
	int ret,x,y;
	printf("请输入两个操作数:");
	scanf("%d%d", &x, &y);
	ret = pa(x, y);
	printf("计算结果为:%d\n", ret);
}
int main()
{
	int a, b, ret, input;
	do                                           
	{
		menu();
		printf("请输入选项:\n");
		scanf("%d", &input);
		switch (input)                     
		{
		case 0:
			printf("退出计算!\n");
			break;
		case 1:
			calat(ADD);               //不同的输入值,给calat函数传不同的函数地址。
			break;
		case 2:
			calat(SUB);
			break;
		case 3:
			calat(MUL);
			break;
		case 4:
			calat(DIV);
			break;
		default:
			printf("输入错误,请重新输入!\n");
			break;
		}
	} while (input);
	return 0;
}

进入函数的时候,步骤和上面代码一样,但是这里我们使用switch case语句来选择计算项,我们可以写一个函数来实现计算。该函数的参数可以使用函数地址。当我们输入的选项不同时,给计算出函数的不同函数地址,然后计算函数根据传入的函数地址调用某个函数进行计算,就是一个简单的回调函数。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论