1.初始版本:
(1)代码实现:
//一个有加减乘除的简易计算器
void mune()
{
printf("##########################\n");
printf("######1.Add 2.Sub######\n");
printf("######3.Mul 4.Div######\n");
printf("###### 0.Exit ######\n");
printf("##########################\n");
}
void Add(int x, int y)
{
printf("%d\n", x + y);
}
void Sub(int x, int y)
{
printf("%d\n", x - y);
}
void Mul(int x, int y)
{
printf("%d\n", x * y);
}
void Div(double x, double y)
{
printf("%.1lf\n", x / y);
}
int main()
{
int input = 0;
do
{
mune();
printf("请选择:");
scanf("%d", &input);
int x = 0;
int y = 0;
switch (input)
{
case 1:
printf("请输入两个数据:");
scanf("%d %d", &x, &y);
Add(x, y);
break;
case 2:
printf("请输入两个数据:");
scanf("%d %d", &x, &y);
Sub(x, y);
break;
case 3:
printf("请输入两个数据:");
scanf("%d %d", &x, &y);
Mul(x, y);
break;
case 4:
printf("请输入两个数据:");
scanf("%d %d", &x, &y);
Div(x, y);
break;
case 0:
printf("退出计算器!\n");
break;
default:
printf("输入错误!\n");
break;
}
} while (input);
return 0;
}
(2)运行结果:
(3)说明:
这样写的代码比较冗余,代码看起来也不舒服,故下面介绍一种方法来简化上面代码。
2.改版:
(1)前言:(简单说明一下函数指针数组)
函数指针数组简单来说就是一个存放函数指针的数组,可以通过访问数组的元素,获得函数的地址,从而进行运算,适用于需要添加多种运算的情况(像上面的代码来叙述的话就很不友好了)
eg:int(*ptarr[5])(int, int) = { 0,Add,Sub,Mul,Div }; //在前面添加一个0,然后就可以按照菜单上面来输入数字进行运算
分析:
ptarr先与[5]结合,说明这是一个数组;
该数组中有5个元素,每个元素的类型为int(*[5])(int, int) ——>函数指针类型;
后面的两个int表示函数进行所需要传的参数
(2)代码实现:
//用函数指针数组来实现
#include <stdio.h>
//菜单打印
void mune()
{
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;
}
double Div(double x, double y)
{
return x / y;
}
//主函数
int main()
{
int x = 0;
int y = 0;
int input = 0;
int (*pfarr[5]) (int, int) = { 0,Add,Sub,Mul,Div };
do
{
mune();
printf("请选择:");
scanf("%d", &input);
if (input == 0)
{
printf("退出计算器!");
}
else if (input <= 3 && input >= 1)
{
printf("请输入两个参数:");
scanf("%d %d", &x, &y);
int z = (*pfarr[input])(x, y);
printf("%d\n", z);
}
else if (input == 4)
{
double zf = (*pfarr[input])(x, y);
printf("%.1lf\n", zf);
}
else
{
printf("输入错误!\n");
}
} while (input);
return 0;
}
这样写后面修改的时候就只用改变函数指针数组中的元素,数组大小和函数定义等等。