C语言第三十六弹--实现转移表的多种方法

使用C语言通过多种方法实现转移表

方法一、普通法

C语言第三十六弹--实现转移表的多种方法_第1张图片

思路:如图实现多种操作,首先创建菜单,需要运行一次再判断条件,所以通过do{}while(); 循环来实现多次。有多种选择,使用switch case选择语句,再在对应case内容中实现相应算法即可。

1.创建菜单

 void menu()
{
	printf("************************\n");
	printf("************************\n");
	printf("****1.Sum    2.Sub******\n");
	printf("****3.Mul    4.Div******\n");
	printf("*****   0.退出    ******\n");
	printf("************************\n");
	printf("************************\n");
}

2.通过do{}while()x循环和switch{}case:选择语句进行操作实现

int main()
{
		int input = 1;
		int a = 0, b = 0;
		int ret = 0;
			do
			{
				menu();//调用菜单显示
				printf("请输入需要进行的计算模式:");
				scanf("%d",&input);
				switch (input)//选择对应操作 不同操作通过不同函数实现
				{
				case 1:
					printf("请输入两个操作数:");
					scanf("%d %d",&a,&b);
					Sum(a, b);
					break;
				case 2:
					printf("请输入两个操作数:");
					scanf("%d %d", &a, &b);
					Sub(a, b);
					break;
				case 3:
					printf("请输入两个操作数:");
					scanf("%d %d", &a, &b);
					Mul(a, b);
					break;
				case 4:
					printf("请输入两个操作数:");
					scanf("%d %d", &a, &b);
					Div(a, b);
					break;
				case 0:
					printf("已退出\r\n");
					break;
				default:
					printf("输入有误 请重新输入\n");
					break;
				}
			} while (input);
	return 0;
}

3.函数方法实现

 int  Sum(int x,int y)
{
	printf("%d\n",x+y);
}

int  Sub(int x, int y)
{
	printf("%d\n", x - y);
}

int Mul(int x, int y)
{
	printf("%d\n", x * y);
}

int  Div(int x, int y)
{
	printf("%d\n", x / y);
}

总代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include 

 void menu()
{
	printf("************************\n");
	printf("************************\n");
	printf("****1.Sum    2.Sub******\n");
	printf("****3.Mul    4.Div******\n");
	printf("*****   0.退出    ******\n");
	printf("************************\n");
	printf("************************\n");
}

 int  Sum(int x,int y)
{
	printf("%d\n",x+y);
}

int  Sub(int x, int y)
{
	printf("%d\n", x - y);
}

int Mul(int x, int y)
{
	printf("%d\n", x * y);
}

int  Div(int x, int y)
{
	printf("%d\n", x / y);
}
 
//普通法
int main()
{
		int input = 1;
		int a = 0, b = 0;
		int ret = 0;
			do
			{
				menu();
				printf("请输入需要进行的计算模式:");
				scanf("%d",&input);
				switch (input)
				{
				case 1:
					printf("请输入两个操作数:");
					scanf("%d %d",&a,&b);
					Sum(a, b);
					break;
				case 2:
					printf("请输入两个操作数:");
					scanf("%d %d", &a, &b);
					Sub(a, b);
					break;
				case 3:
					printf("请输入两个操作数:");
					scanf("%d %d", &a, &b);
					Mul(a, b);
					break;
				case 4:
					printf("请输入两个操作数:");
					scanf("%d %d", &a, &b);
					Div(a, b);
					break;
				case 0:
					printf("已退出\n");
					break;
				default:
					printf("输入有误 请重新输入\n");
					break;
				}
			} while (input);
	return 0;
}

函数指针数组法

思路:通过把函数方法放在指针数组中,并巧妙利用下标和操作数数字相同来调用函数方法。

#define _CRT_SECURE_NO_WARNINGS
#include 

 void menu()
{
	printf("************************\n");
	printf("************************\n");
	printf("****1.Sum    2.Sub******\n");
	printf("****3.Mul    4.Div******\n");
	printf("*****   0.退出    ******\n");
	printf("************************\n");
	printf("************************\n");
}

int  Sum(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 = 1;
	int a = 0, b = 0;
	int ret = 0;
	//函数指针数组法
	int(*ptr[])(int a, int b) = {0,Sum,Sub,Mul,Div};//放入函数指针
	do
	{	
		menu();
		printf("请输入计算模式:");
		scanf("%d",&input);
		if (input <= 4 && input >= 1)//通过if语句来判断输入值是否符合条件
		{
			printf("请输入操作数:");
			scanf("%d %d",&a,&b);
			int ret=(*ptr[input])(a, b);//调用函数指针中的input方法
			printf("%d\n",ret);
		}
		else if(input==0)
		{
			printf("退出计算器\n");
		}
		else
		{
			printf("输入有误 请重新输入\n");
		}
	} while (input);
	return 0;
}

回调函数法

思路:在一个函数方法中,定义一个函数指针来调用函数方法。

总代码如下

#define _CRT_SECURE_NO_WARNINGS
#include 

 void menu()
{
	printf("************************\n");
	printf("************************\n");
	printf("****1.Sum    2.Sub******\n");
	printf("****3.Mul    4.Div******\n");
	printf("*****   0.退出    ******\n");
	printf("************************\n");
	printf("************************\n");
}

int  Sum(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))
{
	int ret = 0;
	int x, y;
	printf("请输入操作数:");
	scanf("%d %d",&x,&y);
	ret = (*pf)(x, y);//函数指针 *pf(可以接收任何方法)
	printf("%d\r\n",ret);
}
int main()
{
	int input = 1;
	int a = 0, b = 0;
	int ret = 0;
	do
	{
		menu();
		printf("请输入计算模式:");
		scanf("%d",&input);
		switch (input)
		{
		case 1:
			calc(Sum);
			break;
		case 2:
			calc(Sub);
			break;
		case 3:
			calc(Mul);
			break;
		case 4:
			calc(Div);
			break;
		case 0:
			printf("已退出\r\n");
			break;
		default:
			printf("输入有误 请重新输入!\r\n");
			break;
			}
	} while (input);

	return 0;
}

你可能感兴趣的:(c语言,开发语言)