在C语言编程学习中,实现一个简易计算器是一个常见且有趣的练习项目。它不仅能帮助我们巩固基本的语法知识,如函数、循环、分支结构,还能让我们深入理解程序设计的逻辑。接下来,我们将分析三段实现简易计算器功能的C语言代码,探讨它们的特点和优势。
一、基础版本:简单直接的功能实现
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void menu()
{
printf("***1.add 2.sub****\n");
printf("***3.mul 4.div****\n");
printf("****** 0.exit ******\n");
printf("********************\n");
printf("请选择:");
}
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()
{
menu();
int input = 0;
scanf("%d", &input);
int x = 0;
int y = 0;
printf("请输入:");
scanf("%d%d", &x, &y);
int ret = 0;
switch (input)
{
case 1:
ret = add(x, y);
printf("结果为:%d\n", ret);
break;
case 2:
ret = sub(x, y);
printf("结果为:%d\n", ret);
break;
case 3:
ret = mul(x, y);
printf("结果为:%d\n", ret);
break;
case 4:
ret = div(x, y);
printf("结果为:%d\n", ret);
break;
case 0:
printf("退出成功!\n");
break;
default:
printf("输入错误,请重新输入!\n");
}
return 0;
}
这个版本的代码结构清晰,易于理解。 menu 函数负责打印操作选项菜单,让用户选择要进行的运算。 add 、 sub 、 mul 、 div 四个函数分别实现加、减、乘、除四种基本运算。在 main 函数中,通过 switch 语句根据用户的选择调用相应的函数进行计算,并输出结果。如果用户输入0,则退出程序;输入其他无效选项时,提示错误。
这种实现方式的优点是逻辑简单明了,初学者容易上手。但缺点也很明显,代码的扩展性和复用性较差,如果需要添加新的运算功能,需要在 switch 语句中添加新的分支,修改的地方较多。
二、进阶版本:使用函数指针数组优化
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void menu()
{
printf("***1.add 2.sub****\n");
printf("***3.mul 4.div****\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 div(int x, int y)
{
return x / y;
}
int main()
{
int(*pf[5])(int, int) = { 0, add, sub, mul, div };
int input = 0;
int x = 0;
int y = 0;
do
{
menu();
printf("请选择:");
scanf("%d", &input);
if (input == 0)
{
printf("退出成功!\n");
return 0;
}
else if (input >= 1 && input <= 4)
{
printf("请输入:");
scanf("%d%d", &x, &y);
int ret = pf[input](x, y);
printf("%d\n", ret);
}
else
{
printf("输入错误!");
}
} while (input);
return 0;
}
这个版本引入了函数指针数组 pf ,将四个运算函数的指针存储在数组中。通过 do-while 循环,不断显示菜单并获取用户输入。当用户输入有效选项时,直接通过函数指针数组调用相应的函数进行计算,大大简化了 switch 语句的复杂结构。
这种实现方式的优势在于提高了代码的可维护性和扩展性。如果需要添加新的运算功能,只需要在函数指针数组中添加新的函数指针,而不需要大幅修改 main 函数中的逻辑。
三、改进版本:分离输出功能
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void menu()
{
printf("***1.add 2.sub****\n");
printf("***3.mul 4.div****\n");
printf("****** 0.exit ******\n");
printf("********************\n");
printf("请选择:");
}
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 test(int m)
{
printf("结果为:%d\n", m);
}
int main()
{
menu();
int input = 0;
scanf("%d", &input);
int x = 0;
int y = 0;
printf("请输入:");
scanf("%d%d", &x, &y);
int ret = 0;
switch (input)
{
case 1:
ret = add(x, y);
test(ret);
break;
case 2:
ret = sub(x, y);
test(ret);
break;
case 3:
ret = mul(x, y);
test(ret);
break;
case 4:
ret = div(x, y);
test(ret);
break;
case 0:
printf("退出成功!\n");
break;
default:
printf("输入错误,请重新输入!\n");
}
return 0;
}
这个版本在基础版本的基础上,将结果输出功能分离到 test 函数中。在 switch 语句的每个分支中,先调用相应的运算函数得到结果,再调用 test 函数输出结果。
这样做的好处是将计算和输出功能解耦,使代码结构更加清晰,也便于后续对输出格式或方式进行统一修改。
通过对这三段代码的分析,我们可以看到在C语言编程中,从简单的功能实现到逐步优化代码结构,提升代码的可维护性和扩展性是一个不断学习和进步的过程。每一次改进都体现了对C语言特性的更深入理解和应用,希望这些分析能帮助大家在C语言学习和编程实践中有所收获。