Logo

郎哥编程

C语言初级项目《简易四则计算器》

2026-06-09 44

一、项目基本信息

项目内容:编写简易四则计算器程序。

开放难度: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;
}

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论