编写一个C语言代码,实现计算器加减乘除的功能
方法一:
第一步:实现菜单功能,菜单包括加法,减法,乘法,除法以及退出五个选项。利用printf实现。
printf("************************************\n");
printf("*********1.add 2.sub********\n");
printf("*********3.mul 4.div********\n");
printf("*********0.exit*********************\n");
printf("************************************\n");
printf("************************************\n");
完成后定义一个input用来输入我们要选择的功能,定义x和y输入我们的两个操作数,定义一个ret输出我们的结果。
int input = 0;
int x = 0;
int y = 0;
int ret = 0;
使用do....while循环嵌套switch语句,实现计算器的循环使用和功能。
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
printf("请输入两个操作数:");
scanf("%d %d", &x, &y);
ret = add(x, y);
printf("%d\n", ret);
break;
case 2:
printf("请输入两个操作数:");
scanf("%d %d", &x, &y);
ret = sub(x, y);
printf("%d\n", ret);
break;
case 3:
printf("请输入两个操作数:");
scanf("%d %d", &x, &y);
ret = mul(x, y);
printf("%d\n", ret);
break;
case 4:
printf("请输入两个操作数:");
scanf("%d %d", &x, &y);
ret = div(x, y);
printf("%d\n", ret);
break;
case 0:
printf("退出计算器\n");
break;
default :
printf("输入错误,请重新输入\n");
break;
}
} while (input);
其中case语句中加减乘除的通过函数调用实现。定义四个函数分别实现加减乘除。
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/sub/mul/div+(int x,int y)
完整代码为:
void menu()
{
printf("************************************\n");
printf("*********1.add 2.sub********\n");
printf("*********3.mul 4.div********\n");
printf("*********0.exit*********************\n");
printf("************************************\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 div(int x, int y)
{
return x / y;
}
int main()
{
int input = 0;
int x = 0;
int y = 0;
int ret = 0;
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
printf("请输入两个操作数:");
scanf("%d %d", &x, &y);
ret = add(x, y);
printf("%d\n", ret);
break;
case 2:
printf("请输入两个操作数:");
scanf("%d %d", &x, &y);
ret = sub(x, y);
printf("%d\n", ret);
break;
case 3:
printf("请输入两个操作数:");
scanf("%d %d", &x, &y);
ret = mul(x, y);
printf("%d\n", ret);
break;
case 4:
printf("请输入两个操作数:");
scanf("%d %d", &x, &y);
ret = div(x, y);
printf("%d\n", ret);
break;
case 0:
printf("退出计算器\n");
break;
default :
printf("输入错误,请重新输入\n");
break;
}
} while (input);
return 0;
}
虽然以上代码能够实现加减乘除运算,但其中的代码重复度高,造成冗余。而且如果计算器要添加其它运算(&,|,^等),case语句会一直延长,代码可观性差。
方法二:
我们可以利用函数指针的方式将代码简化,使代码更简洁,可读性更高
首先创建函数指针变量pfarr,它指向的函数参数为int int,返回类型为int.
int(*pfarr[5])(int, int) = { 0,add,sub,mul,div };
通过函数指针pfarr [input] (x,y)可以将操作数x,y传给加减乘除函数进行计算,将返回值传给ret进行输出。
再通过if语句进行判断;当input>=1且<=4时,将参数传递给加减乘除函数,当input==0时,退出if语句,程序结束。当input为其他值时,使用printf输出(输入错误,请重新输入)。
完整代码如下:
void menu()
{
printf("************************************\n");
printf("*********1.add 2.sub********\n");
printf("*********3.mul 4.div********\n");
printf("*********0.exit*********************\n");
printf("************************************\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 div(int x, int y)
{
return x / y;
}
int main()
{
int input = 0;
int x = 0;
int y = 0;
int ret = 0;
int(*pfarr[5])(int, int) = { 0,add,sub,mul,div };
do
{
menu();
printf("请选择:");
scanf("%d", &input);
if (input >= 1 && input <= 4)
{
printf("请输入两个操作数:");
scanf("%d %d", &x, &y);
ret = pfarr[input](x, y);
printf("%d\n", ret);
}
else if (input == 0)
{
printf("退出计算器\n");
}
else
{
printf("输入错误,请重新输入\n");
}
} while (input);
return 0;
}
这样通过函数指针就将代码优化好了,通过优化,代码长度缩短,可读性更高,避免了代码的冗余。
总结:
第一种方法不需要使用指针,编写难度较低,第二种方法需要熟练使用函数指针,难度较第一种稍高。两种方法都可实现计算器,按需使用即可。