目录
1.实现目标
2.实现方法
【C语言|C语言实现简单计算器】1.回调函数法
2.函数指针数组法
1.实现目标 我们要实现一个简易计算器,提供可选择功能包括加,减,乘,除,取模和异或。
2.实现方法
1.回调函数法 首先我们需要打印一个计算器菜单供使用者选择计算类型,我们可以自定义简单的菜单函数menu,再利用do while循环加switch语句完成用户选则功能,具体实现方法可以看我的另一篇博客:猜数字游戏。如果是在每一个case里进行打印提示和,输入数字和函数调用会显得非常繁冗,并且不利于新运算类型的添加,我们可以将其改进:将以上数条语句包装,利用一个函数Calc来实现我们将不同的运算函数的地址传入Calc函数,利用函数指针接收,在内部进行调用。程序形式便得到简化。
void menu()
{
printf("***************************\n");
printf("***** 1.加法2.减法*****\n");
printf("***** 3.乘法4.除法*****\n");
printf("***** 5.取模6.异或*****\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;
}
int Dvi(int x, int y)
{
return x / y;
}
int Mol(int x, int y)
{
return x%y;
}
int Xor(int x, int y)
{
return x^y;
}
void Calc(int(*p)(int, int))
{
int a, b;
printf("请输入运算数");
scanf("%d%d", &a, &b);
printf("%d\n", (*p)(a, b));
}
int main()
{
int input;
do
{
menu();
printf("请选择运算\n");
scanf("%d", &input);
switch (input)
{
case 1:
Calc(Add);
break;
case 2:
Calc(Sub);
break;
case 3:
Calc(Mul);
break;
case 4:
Calc(Dvi);
break;
case 5:
Calc(Mol);
break;
case 6:
Calc(Xor);
break;
case 0:
printf("退出成功\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (input);
return 0;
}
2.函数指针数组法 我们还有一种方法可以更加方便地解决上述问题:将几个基本运算函数用数组的形式存储和调用,这便用到了函数指针数组,这样做还有一个好处:switch语句也不需要了。
void menu()
{
printf("****************************\n");
printf("***** 1.加法2.减法 ******\n");
printf("***** 3.乘法4.除法 ******\n");
printf("***** 5.取模6.异或 ******\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;
}
int Dvi(int x, int y)
{
return x/y;
}
int Mol(int x, int y)
{
return x%y;
}
int Xor(int x, int y)
{
return x^y;
}
int main()
{
int input,a,b;
do
{
menu();
printf("请选择计算类型>:");
scanf("%d", &input);
if (0:");
scanf("%d%d", &a, &b);
int(*Fun[])(int, int) = { 0, Add, Sub, Mul, Dvi, Mol, Xor };
printf("%d\n", Fun[input](a, b));
}
else if (input==0)
{
printf("计算器关闭\n");
}
else
{
printf("输入错误\n");
break;
}
} while (input);
return 0;
}
推荐阅读
- C语言|C语言两种方法计算一个数所有位上的数的总和
- 蓝桥杯|蓝桥杯第十届C语言b组——B: 年号字串
- 蓝桥杯|蓝桥杯.颠倒的价牌(暴力枚举)
- 蓝桥杯|萌新打卡 蓝桥杯 算法基础 暴力枚举——立方和等式 暴力大法好
- 每日刷题———蓝桥杯真题|蓝桥杯2018第九届C语言B组省赛总决赛习题题解——习题A.换零钞(暴力枚举法)
- 蓝桥杯算法训练|蓝桥杯算法训练 数字游戏 C语言实现
- YY|【C语言】三子棋游戏与多子棋 (保姆级的实现过程)
- 《网络安全快速入门》|别让数据库的报错信息,暴露了网站的用户数据。
- 安全生产一点通题库|2021年N1叉车司机考试报名及N1叉车司机免费试题