两种方法实现计算器
1.switch+函数实现
#include <stdio.h>
#pragma warning(disable:4996)
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 select;
printf("**********************\n");
printf("***1:add 2:sub***\n");
printf("***3:mul 4:div***\n");
printf("**** 0:exit***\n");
printf("***********************\n");
printf("请选择要执行的运算:");
scanf("%d", &select);
const char *lable = "+-*/";
while (select)
{
switch (select)
{
int x, y, z = 0;
case 1:
printf("请输入两个操作数:\n");
scanf("%d %d", &x, &y);
z = add(x, y);
printf("%d %c %d = %d\n", x, lable[select - 1], y, z);
break;
case 2:
printf("请输入两个操作数:\n");
scanf("%d %d", &x, &y);
z = sub(x, y);
printf("%d %c %d = %d\n", x, lable[select - 1], y, z);
break;
case 3:
printf("请输入两个操作数:\n");
scanf("%d %d", &x, &y);
z = mul(x, y);
printf("%d %c %d = %d\n", x, lable[select - 1], y, z);
break;
case 4:
printf("请输入两个操作数:\n");
scanf("%d %d", &x, &y);
if (y == 0)
{
printf("error,分母不能为0");
}
z = div(x, y);
printf("%d %c %d = %d\n", x, lable[select - 1], y, z);
break;
case 0:
printf("beybey!");
select = 0;
break;
default:
printf("error!请重新输入。");
break;
}
}
}
2.函数指针数组形成转移表实现计算器
通过观察可以发现,上面的代码,switch语句存在很多重复语句,下面利用函数指针数组来简化代码
#include <stdio.h>
//#include <stdlib.h>
#pragma warning(disable:4996)
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)
{
if (y==0)
{
printf("error,分母不能为0");
}
return x / y;
}
int main()
{
int select = 1;
const char *lable = "+-*/";
int(*p[5])(int x, int y) = { add,sub,mul,div};
while (select)
{
printf("**********************\n");
printf("***1:add 2:sub***\n");
printf("***3:mul 4:div***\n");
printf("**** 0:exit***\n");
printf("***********************\n");
printf("请选择要执行的运算:");
scanf("%d", &select);
if (select < 5 && select>0)
{
int x, y, z = 0;
printf("请输入两个操作数:\n");
scanf("%d %d", &x, &y);
z = (*p[select-1])(x, y);
printf("%d %c %d = %d\n", x, lable[select - 1], y, z);
}
else
{
printf("请重新输入\n");
}
}
}