C语言–实现一个计算器
实现一个计算器,具备加减乘除的功能
用户输入1,2,3,4,0分别对应加,减,乘,除,退出的功能。
1. 通常代码
贴上代码:
void menu()
{
printf("*****************************\n");
printf("******* 1 Add, 2 Sub *******\n");
printf("******* 3 Mul, 4 Div *******\n");
printf("******* 0 Exit *******\n");
printf("*****************************\n");
}
int Add(int a, int b)
{
return a + b;
}
int Sub(int a, int b)
{
return a - b;
}
int Mul(int a, int b)
{
return a * b;
}
int Div(int a, int b)
{
return a / b;
}
int main()
{
int input = 0;
int a = 0, b = 0, result = 0;
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 1:
printf("输入两个操作数:");
scanf("%d %d", &a, &b); '//1,2,3,4几种情况看起来非常冗余,想办法优化一下'
result = Add(a, b);
printf("%d\n", result);
break;
case 2:
printf("输入两个操作数:");
scanf("%d %d", &a, &b);
result = Sub(a, b);
printf("%d\n", result);
break;
case 3:
printf("输入两个操作数:");
scanf("%d %d", &a, &b);
result = Mul(a, b);
printf("%d\n", result);
break;
case 4:
printf("输入两个操作数:");
scanf("%d %d", &a, &b);
result = Div(a, b);
printf("%d\n", result);
break;
case 0:
printf("Exit,退出");
break;
default:
printf("输入错误,请重新输入!\n");
break;
}
} while (input);
return 0;
}
运行结果如下图:
2. 函数指针数组优化
- 基本实现功能,但是主函数看起来非常的冗余,我们这里可以使用
函数指针数组
来优化一下main()函数: - 其中pfarr[1]对应int Add(int, int),pfarr[2]对应int Sub(int int) … …
int main()
{
int (*pfarr[5])(int, int) = { 0, Add, Sub, Mul, Div }; '//函数指针数组'
int input = 0, a = 0, b = 0, result = 0; ' //几个所需的局部变量'
do
{
menu();
scanf("%d", &input);
if (input >= 1 && input <= 4)
{
printf("请输入两个操作数:");
scanf("%d %d", &a, &b);
result = pfarr[input](a, b);
printf("%d\n", result);
}
else if (input == 0)
{
printf("退出游戏\n");
break;
}
else
printf("输入错误,请重新输入\n");
}while(input);
return 0;
}
3. 回调函数优化
- 回调函数通过修改函数参数,可以调用不同的函数
- 重新定义一个回调函数calc(int (*pf) (int, int)),通过调整pf函数指针,从而调用不同的函数。
int calc(int (*pf)(int, int)) '//回调函数 '
{
int a = 0, b = 0;
printf("请输入两个操作数:");
scanf("%d %d", &a, &b);
return pf(a, b);
}
int main()
{
int input = 0;
int result = 0;
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 1:
result = calc(Add);
printf("%d\n", result);
break;
case 2:
result = calc(Sub);
printf("%d\n", result);
break;
case 3:
result = calc(Mul);
printf("%d\n", result);
break;
case 4:
result = calc(Div);
printf("%d\n", result);
break;
case 0:
printf("Exit,退出");
break;
default:
printf("输入错误,请重新输入!\n");
break;
}
} while (input);
return 0;
}
总的来说,还是第三种,使用回调函数这种方法更常见,也更灵活