一、项目基本信息
项目内容:编写简易四则计算器程序。
开放难度:C语言零基础学员(刚学完循环、分支、输入输出)。
二、项目成果
1. 知识目标
巩固C语言四大核心基础:标准输入输出、变量、while循环、switch多分支判断,理解简单程序的完整执行流程。
2. 能力目标
能独立写出可运行的四则计算器代码,具备基础的异常处理思维(防除0、防非法运算符),掌握分段编码、分段测试的编程习惯。
3. 编程思维培养
建立先框架、再功能、再容错、再优化的初级编程工程思维。
三、编写代码
很多新手同学在学习C语言后,能够看懂简单的代码,但一写代码就懵,不知道怎么把知识点串起来,现在就跟老师实战写一个简易四则计算器程序,全文边敲边讲,大家跟着敲代码,保证所有人都能跑通。
第一步:搭建整体框架,定义变量
我们写代码一定不要一上来就写功能,先搭骨架。所有C语言程序都要引入标准输入输出头文件,也就是 #include <stdio.h>,没有这行,printf和scanf等函数都用不了。
然后是主函数 main,所有程序入口都在这里,返回值int,最后return 0。
接下来定义变量:首先是char op,用来存我们输入的加减乘除运算符;然后两个double类型的数字num1、num2,还有结果res。num1和num2数据类型为什么不用int?因为int只能存整数,会出现整数相除丢失小数的问题,用double可以兼容小数、整数,计算更精准。最后定义一个flag变量,用来判断要不要继续计算。
最后写一个while(1)无限循环,目的就是让程序可以重复计算,不用每次重新运行。
当前阶段代码(框架版)
#include <stdio.h>
int main()
{
char op;
double num1, num2, res;
int flag;
printf("===== 简易四则计算器 =====\n");
while(1)
{
// 后续所有功能写在这里
}
return 0;
}
注意要点:有没有同学知道,while(1)是死循环,那我们之后怎么让程序正常退出?
易错点提前提醒:新手最容易犯的错,所有变量一定要定义在函数开头,不要零散定义,养成规范编码习惯。
第二步:实现用户输入功能
框架搭好后,先做输入功能。先提示用户输入运算符,然后分别输入第一个数字、第二个数字,用%lf接收double类型数据,注意不要和float的%f搞混。
对应代码
printf("\n请输入运算符(+ - * /):");
scanf(" %c", &op);
printf("请输入第一个数字:");
scanf("%lf", &num1);
printf("请输入第二个数字:");
scanf("%lf", &num2);
易错点强调:scanf参数一定要加取地址符&,漏掉直接编译报错,新手高频错误!
第三步:switch分支实现四则运算
用户输入完运算符和数字,下一步就要判断做什么运算,使用switch语法比较简洁,比使用一堆if else代码更清晰,适合多条件匹配。
每一个case对应一个运算符,匹配成功就执行对应的计算,然后用break结束当前分支。大家注意,每个case后面的break都不能少,少了会连续执行多个运算,结果完全错误。
预防BUG重点:除法是唯一会让程序崩溃的运算,所以必须加if判断:如果第二个数字等于0,直接提示错误,不执行计算,这就是程序的容错能力,防止闪退。
最后加一个default默认分支,用户输入#、@、字母这些非法符号,直接提示输入错误,覆盖所有异常情况。
对应代码
switch(op)
{
case '+':
res = num1 + num2;
printf("计算结果:%.2f + %.2f = %.2f\n", num1, num2, res);
break;
case '-':
res = num1 - num2;
printf("计算结果:%.2f - %.2f = %.2f\n", num1, num2, res);
break;
case '*':
res = num1 * num2;
printf("计算结果:%.2f * %.2f = %.2f\n", num1, num2, res);
break;
case '/':
if(num2 == 0)
{
printf("错误:除数不能为0!\n");
}
else
{
res = num1 / num2;
printf("计算结果:%.2f / %.2f = %.2f\n", num1, num2, res);
}
break;
default:
printf("错误:输入的运算符不合法!\n");
}
课堂提问3:大家思考一下,如果除法不判断num2==0,程序运行会出现什么问题?(程序崩溃、运行报错)
第四步:实现循环继续/退出功能
单次计算完成后,程序可以给用户选择权,让用户选中是继续算还是退出。输入1继续,输入0退出。如果flag等于0,打印退出提示,用break跳出while死循环,程序正常结束。
对应代码
printf("是否继续计算?(1继续 / 0退出):");
scanf("%d", &flag);
if(flag == 0)
{
printf("程序已退出,感谢使用!\n");
break;
}
四、整体运行测试
1. 正常场景:小数加法、乘法运算,验证结果保留两位小数;
2. 临界场景:除法输入除数0,验证报错提示、不崩溃;
3. 异常场景:输入@、字母等非法运算符,验证错误提示;
4. 退出场景:输入0,正常退出程序。
五、零基础高频易错点
1. scanf("%c")前面忘记加空格,导致输入错乱、程序自动跳过输入;
2. 漏掉scanf的取地址符&,直接编译报错;
3. switch分支少写break,出现case穿透,运算结果错乱;
4. 除法不做除0判断,程序运行崩溃;
5. 全部代码堆在main函数,没有分层逻辑(新手坏习惯);
6. 用int定义数字,导致小数计算精度丢失。
六、项目小结
今天我们用一个计算器项目,把输入输出、变量、循环、分支四大核心知识点全部串起来了。大家一定要记住,编程不是背语法,是用语法解决问题。这个程序的的开发思路是:搭框架→写输入→写核心逻辑→做容错→完善交互,这是所有C语言小项目的通用开发流程。
新手写代码要点:写一段、跑一段、测一段,绝对不要一次性写完几百行再运行。
七、完整可运行代码
#include <stdio.h>
int main()
{
char op;
double num1, num2, res;
int flag;
printf("===== 简易四则计算器 =====\n");
while(1)
{
// 输入运算符和两个运算数字
printf("\n请输入运算符(+ - * /):");
scanf(" %c", &op);
printf("请输入第一个数字:");
scanf("%lf", &num1);
printf("请输入第二个数字:");
scanf("%lf", &num2);
// 四则运算逻辑判断
switch(op)
{
case '+':
res = num1 + num2;
printf("计算结果:%.2f + %.2f = %.2f\n", num1, num2, res);
break;
case '-':
res = num1 - num2;
printf("计算结果:%.2f - %.2f = %.2f\n", num1, num2, res);
break;
case '*':
res = num1 * num2;
printf("计算结果:%.2f * %.2f = %.2f\n", num1, num2, res);
break;
case '/':
if(num2 == 0)
{
printf("错误:除数不能为0!\n");
}
else
{
res = num1 / num2;
printf("计算结果:%.2f / %.2f = %.2f\n", num1, num2, res);
}
break;
default:
printf("错误:输入的运算符不合法!\n");
}
// 判断是否继续计算
printf("是否继续计算?(1继续 / 0退出):");
scanf("%d", &flag);
if(flag == 0)
{
printf("程序已退出,感谢使用!\n");
break;
}
}
return 0;
}