方法一:直接调用子函数,包括计算机的加减乘除运算。
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 x, y;
int input = 1;
int rent = 0;
do
{
printf("**********************\n");
printf("******1.add 2.sub**\n");
printf("******3.mul 4.div**\n");
printf("******0.exit *******\n");
printf("**********************\n");
printf("请选择\n");
scanf("%d", &input);
switch (input)
{
case 1:
printf("请输入操作数\n");
scanf("%d%d", &x, &y);
rent = add(x, y);
printf("rent=%d\n", rent);
break;
case 2:
printf("请输入操作数\n");
scanf("%d%d", &x, &y);
rent = sub(x, y);
printf("rent=%d\n", rent);
break;
case 3:
printf("请输入操作数\n");
scanf("%d%d", &x, &y);
rent = mul(x, y);
printf("rent=%d\n", rent);
break;
case 4:
printf("请输入操作数\n");
scanf("%d%d", &x, &y);
rent = div(x, y);
printf("rent=%d\n", rent);
break;
case 0:
printf("退出程序\n");
break;
default:
printf("输入错误\n");
break;
}
} while (input);
}
上面实现的代码比较冗余;就用到方法二。
方法二:采用函数指针数组来实现:
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 x, y;
int input = 1;
int rent = 0;
int (*p[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.exit *******\n");
printf("**********************\n");
printf("请选择\n");
scanf("%d", &input);
if (input >= 1 && input <= 4)
{
printf("请输入操作数\n");
scanf("%d%d", &x, &y);
rent = (*p[input])(x, y);
printf("%d\n", rent);
}
else
printf("输入错误\n");
printf("rent=%d\n", rent);
} while (input);
return 0;
}
代码结果:
利用函数指针数组将函数指针放在数组当中,直接调用数组使用函数,使代码不会冗余。
重点:
创建一个函数指针数组;将函数的地址存放在一个数组当中;
通过控制input来使用想用的函数和x,y 来定义函数的实参;