使用C语言通过多种方法实现转移表
方法一、普通法
思路:如图实现多种操作,首先创建菜单,需要运行一次再判断条件,所以通过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 <stdio.h> 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 <stdio.h> 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 <stdio.h> 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; }