C语言实现 简易计算器教程

制作简易的算术计算器

编写程序实现一个简单的计算器(可实现加减乘除即可)。

要求从键盘输入2个数和一个运算符,输出对应的计算结果。

#include <stdio.h>

int main()
{
double num1, num2, result;
char symbol;
printf("简易计算器\n");
printf("请输入算式(格式:数字 运算符 数字):\n");
if (scanf("%lf %c %lf", &num1,&symbol,&num2) != 3)
{
printf("输入格式错误!\n");
return 1;
}
switch (symbol)
{
case '+':
result = num1 + num2;
printf("%.2lf + %.2lf = %.2lf\n", num1, num2, result);
break;
case '-':
result = num1 - num2;
printf("%.2lf - %.2lf = %.2lf\n", num1, num2, result);
break;
case '*':
case 'x':
case 'X':
result = num1 * num2;
printf("%.2lf * %.2lf = %.2lf\n", num1, num2, result);
break;
case '/':
if (num2 == 0)
{
printf("错误:除数不能为零!\n");
return 1;
}
result = num1 / num2;
printf("%.2lf / %.2lf = %.2lf\n", num1, num2, result);
break;
default:
printf("错误:不支持的运算符 '%c'\n", symbol);
printf("支持的运算符:+ - * / x X\n");
return 1;
}
return 0;
}

📜 代码整体结构

变量声明 :使用 double 保证计算精度。
输入与验证 :利用 scanf 的返回值进行一次性格式检查。
核心逻辑 :使用 switch 语句分发不同的运算任务。
安全机制 :专门处理除数为零的情况。
输出 :格式化输出结果,保留两位小数。

🧐 逐行详细解析

1. 变量定义与提示

double:这里没有使用 floatint,而是选择了 double(双精度浮点型)。这是科学计算和工程应用中的标准选择,因为它能提供更高的精度,减少计算误差。
提示语 :清晰地告诉用户预期的输入格式(例如 10 + 20),这是良好用户交互的第一步。

2. 高级输入验证(亮点)

scanf 的返回值:这是一个非常专业的用法。scanf 函数会返回成功读取并赋值的变量个数
复制代码
##### 如果用户输入 `10 + 5`,`scanf` 成功读取了三个数据,返回 `3`,程序继续。
复制代码
##### 如果用户输入 `abc + 5`(第一个不是数字),或者只输入了 `10 +`(缺少数据),`scanf` 返回的值就会小于 3。
作用 :这一行代码就防止了因为用户乱输入导致程序后续逻辑崩溃的情况,体现了代码的健壮性

3. Switch 分支与多重 Case

Case 穿透(Fall-through):注意看乘法部分,连续写了三个 case 却没有加 break
复制代码
##### 这意味着,如果用户输入 `*`、`x` 或 `X`,程序都会执行同一块代码(乘法运算)。
复制代码
##### **用户体验** :这非常贴心,因为普通键盘上打不出数学乘号 `×`,用户习惯用字母 `x` 或 `X` 代替,代码完美兼容了这种习惯。

4. 除零保护

逻辑:在执行除法前,必须检查分母(num2)是否为 0。
后果:在数学中除以零无意义;在计算机中,浮点数除以零可能得到无穷大(inf),而整数除以零会导致程序直接崩溃。这里通过 if 判断优雅地拦截了这种错误,并返回错误码 1

5. 默认错误处理

如果用户输入了 %& 等不支持的符号,程序会进入 default 分支。
提示:它不仅报错,还告诉用户"支持哪些运算符",这是一种非常友好的错误提示设计。

6. 格式化输出

%.2lf:这是一个格式控制符。
复制代码
##### `l` 代表 `long`(对应 double)。
复制代码
##### `.2` 代表**保留两位小数** 。例如输入 `10 / 3`,结果显示为 `3.33`,使界面整洁美观。

📊 功能特性总结

特性 代码实现细节 优点
精度 使用 double%lf 计算结果准确,支持小数运算
安全性 scanf(...) != 3 检查 防止非法输入导致程序异常
兼容性 case 'x': case 'X': 符合用户直觉,不仅限于标准符号
防御性 if (num2 == 0) 避免运行时崩溃(除零错误)
可读性 %.2lf 输出结果整齐划一,易于阅读
相关推荐
JieE21219 小时前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack201 天前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树1 天前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE2122 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2122 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术2 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦2 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
用户497863050732 天前
(一)小红的数组操作
算法·编程语言
怕浪猫2 天前
Electron 系列文章封面图
算法·架构·前端框架