转移表
通过案例---- 计算器的实现
不使用指针
#include<stdio.h>
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;
int x,y;
int ret;
do
{
printf("*************************\n");
printf(" 1:Add 2:Sub \n");
printf(" 3:Mul 4:div \n");
printf(" 0:退出 \n");
printf("请输入要进行的操作:");
scanf("%d", &input);
switch (input)
{
case 1:
printf("请输入要计算的数:");
scanf("%d %d",&x,&y);
ret = Add(x, y);
printf("ret = %d\n", ret);
break;
case 2:
printf("请输入要计算的数:");
scanf("%d %d", &x, &y);
ret = Sub(x, y);
printf("ret = %d\n", ret);
break;
case 3:
printf("请输入要计算的数:");
scanf("%d %d", &x, &y);
ret = Mul(x, y);
printf("ret = %d\n", ret);
break;
case 4:
printf("请输入要计算的数:");
scanf("%d %d", &x, &y);
ret = Div(x, y);
printf("ret = %d\n", ret);
break;
case 0:
printf("程序退出\n");
break;
default:
printf("输入有误");
break;
}
}
while (input);
return 0;
}
#include<stdio.h>
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;
int x,y;
int ret;
do
{
printf("*************************\n");
printf(" 1:Add 2:Sub \n");
printf(" 3:Mul 4:div \n");
printf(" 0:退出 \n");
printf("请输入要进行的操作:");
scanf("%d", &input);
switch (input)
{
case 1:
printf("请输入要计算的数:");
scanf("%d %d",&x,&y);
ret = Add(x, y);
printf("ret = %d\n", ret);
break;
case 2:
printf("请输入要计算的数:");
scanf("%d %d", &x, &y);
ret = Sub(x, y);
printf("ret = %d\n", ret);
break;
case 3:
printf("请输入要计算的数:");
scanf("%d %d", &x, &y);
ret = Mul(x, y);
printf("ret = %d\n", ret);
break;
case 4:
printf("请输入要计算的数:");
scanf("%d %d", &x, &y);
ret = Div(x, y);
printf("ret = %d\n", ret);
break;
case 0:
printf("程序退出\n");
break;
default:
printf("输入有误");
break;
}
}
while (input);
return 0;
}
不适用指针时,若函数较多时,会写多个case语句 ,带码显得冗余
使用指针时
int main()
{
int input = 1;
int x, y;
int ret = 0;
int (*pf_arr[5])(int x, int y) = { 0, Add, Sub, Mul, Div };
do
{
printf("*************************\n");
printf(" 1:Add 2:Sub \n");
printf(" 3:Mul 4:div \n");
printf(" 0:退出 \n");
printf("请输入要进行的操作:");
scanf("%d", &input);
if ((input <= 4 && input >= 0))
{
printf("请输入要计算的数:");
scanf("%d %d",&x,&y);
ret= (*pf_arr[input])(x,y);
printf("ret = %d\n",ret);
}
} while (input);
return 0;
}