用c语言实现计算器的功能
计算器的功能的实现有两种方法
一、选择分支法
- 使用do…while循环语句来选择
- 在do…while循环语句实现switch语句选择
这种方法是比较冗余的一种方法,就是重复的语句会比较多。
选择分支法的代码实现如下
void Reckoner1()
{
/* 用switch语句来实现计算器功能 */
meun();
int input = 0;
float i = 0;
float j = 0;
do
{
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 0:
printf("退出计算器\n");
break;
case 1:
printf("加法运算\n");
printf("请输入两个操作数:>");
scanf("%f%f", &i, &j);
printf(" %0.3f + %0.3f = %0.3f\n", i, j, i + j);
break;
case 2:
printf("减法运算\n");
printf("请输入两个操作数:>");
scanf("%f%f", &i, &j);
printf(" %0.3f - %0.3f = %0.3f\n", i, j, i - j);
break;
case 3:
printf("乘法运算\n");
printf("请输入两个操作数:>");
scanf("%f%f", &i, &j);
printf(" %0.3f x %0.3f = %0.3f\n", i, j, i * j);
break;
case 4:
printf("除法运算\n");
printf("请输入两个操作数:>");
scanf("%f%f", &i, &j);
printf(" %0.3f / %0.3f = %0.3f\n", i, j, i / j);
break;
default:
printf("选择错误,重新选择\n");
break;
}
}while (input);
}
二、转移表
1.转移表需要用到一个函数指针数组
2.创建相对应运算函数
函数指针数组
int(*parr[5])(int, int) = {0,Add,Sub,Mul,Div};/* 创建*/
int ret = parr[input](i, j); /* 使用 */
加法函数
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 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;
}
void meun()/* 菜单函数 */
{
printf("================计算器================\n");
printf("************* 1.Add 2.Sub ***********\n");
printf("************* 3.Mul 4.Div ***********\n");
printf("************* 0.exit ***********\n");
printf("================计算器================\n");
}
void Reckoner1()
{
/* 用switch语句来实现计算器功能 */
meun();
int input = 0;
float i = 0;
float j = 0;
do
{
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 0:
printf("退出计算器\n");
break;
case 1:
printf("加法运算\n");
printf("请输入两个操作数:>");
scanf("%f%f", &i, &j);
printf(" %0.3f + %0.3f = %0.3f\n", i, j, i + j);
break;
case 2:
printf("减法运算\n");
printf("请输入两个操作数:>");
scanf("%f%f", &i, &j);
printf(" %0.3f - %0.3f = %0.3f\n", i, j, i - j);
break;
case 3:
printf("乘法运算\n");
printf("请输入两个操作数:>");
scanf("%f%f", &i, &j);
printf(" %0.3f x %0.3f = %0.3f\n", i, j, i * j);
break;
case 4:
printf("除法运算\n");
printf("请输入两个操作数:>");
scanf("%f%f", &i, &j);
printf(" %0.3f / %0.3f = %0.3f\n", i, j, i / j);
break;
default:
printf("选择错误,重新选择\n");
break;
}
}while (input);
}
//-------------------------------------------------------
/* 转移表 */
void Reckoner2()
{
meun();
int(*parr[5])(int, int) = {0,Add,Sub,Mul,Div};
int i = 0;
int j = 0;
int input = 0;
do
{
printf("请选择:>");
scanf("%d", &input);
if (input == 0)
{
printf("退出计算器\n");
}
else if (input >= 1 && input <= 4)
{
printf("请输入两个操作数:>");
scanf("%d%d", &i, &j);
int ret = parr[input](i, j);
printf("运算结果:%d\n", ret);
}
else
{
printf("选择错误,重新选择\n");
}
} while (input);
}
void test3()
{
Reckoner1();//使用switch语句的计算器
Reckoner2();
}
int main()
{
//test1();//奇数再前,偶数再后
//test2();//判断字符串2是不是字符串1旋转过后的字符.
test3();//计算器
return 0;
}