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 输出结果整齐划一,易于阅读
相关推荐
得物技术2 小时前
生成式召回在得物的落地技术分享与思考
算法·性能优化·程序员
W23035765732 小时前
回溯法经典实战:0/1 全排列与 N 皇后问题(递归 + 非递归双实现)
算法·回溯法·n皇后
charlie1145141912 小时前
嵌入式现代C++教程实战篇第12篇:C宏时代的LED驱动 —— 能跑但不优雅
c语言·c++·stm32·单片机·嵌入式硬件·c
YuanDaima20483 小时前
队列与单调队列基础原理与题目说明
人工智能·python·算法·leetcode·队列·手撕代码
董董灿是个攻城狮3 小时前
放风的 Claude 你怕不怕
算法
wunaiqiezixin3 小时前
链表多项式大整数-BigInt
数据结构·c++·链表
Fanfanaas3 小时前
Linux 系统编程 进程篇 (二)
linux·运维·服务器·c语言·开发语言·学习
阿杰学AI3 小时前
AI核心知识122—大语言模型之 直接偏好优化(简洁且通俗易懂版)
人工智能·算法·机器学习·ai·强化学习·dpo·直接优化偏好
kyle~3 小时前
BFS(广度优先搜索)与 DFS (深度优先搜索)
c++·算法·深度优先·宽度优先