AI开发C语言应用按步走,表达式计算器calc的第二十四步,结束开发,生成calc 用法指南

calc 用法指南

版本:2.0 | 本文档通过场景化示例展示 calc 的全部功能


1. 入门

1.1 编译

bash 复制代码
$ cd calc && make

1.2 批处理模式

bash 复制代码
$ ./build/calc "(90-18)/3+15"
39

1.3 交互模式(REPL)

bash 复制代码
$ ./build/calc
calc> (90-18)/3+15
  90 - 18 = 72
  72 / 3 = 24
  24 + 15 = 39
  result: 39
calc> exit

1.4 管道输入

bash 复制代码
$ echo "3.14 * 2" | ./build/calc
6.28

1.5 查看版本和帮助

bash 复制代码
$ ./build/calc --version
calc version 2.0

$ ./build/calc --help

2. 算术运算

2.1 四则运算

bash 复制代码
$ ./build/calc "3 + 5"
8
$ ./build/calc "10 - 3"
7
$ ./build/calc "4 * 2"
8
$ ./build/calc "10 / 3"
3.33333

2.2 取模

bash 复制代码
$ ./build/calc "10 % 3"
1
$ ./build/calc "10 % 3.5"
3

2.3 运算符优先级

乘除优先于加减:

bash 复制代码
$ ./build/calc "3 + 5 * 2"
13
$ ./build/calc "10 / 2 + 3"
8

2.4 括号改变优先级

bash 复制代码
$ ./build/calc "(3 + 5) * 2"
16
$ ./build/calc "((3 + 5) * 2)"
16

2.5 链式运算

bash 复制代码
$ ./build/calc "1 + 2 + 3 + 4 + 5"
15
$ ./build/calc "10 - 3 - 2"
5
$ ./build/calc "100 / 5 / 2"
10
$ ./build/calc "10 * 2 / 5"
4

2.6 浮点运算

bash 复制代码
$ ./build/calc "3.5 + 1.5"
5
$ ./build/calc ".5 * 2"
1
$ ./build/calc "3 / 2"
1.5

2.7 科学计数法

bash 复制代码
$ ./build/calc "1e2"
100
$ ./build/calc "1e6 * 1e6"
1e+12

3. 数字格式

3.1 十进制

bash 复制代码
$ ./build/calc "42"
42

3.2 十六进制

bash 复制代码
$ ./build/calc "0xFF"
255
$ ./build/calc "0xff"
255
$ ./build/calc "0xFF & 0x0F"
15

3.3 八进制

bash 复制代码
$ ./build/calc "0777"
511

3.4 二进制

bash 复制代码
$ ./build/calc "0b1010"
10

4. 一元运算

4.1 负号

bash 复制代码
$ ./build/calc "-5"
-5
$ ./build/calc "-5 + 3"
-2

4.2 双重负号

bash 复制代码
$ ./build/calc "--5"
5

4.3 逻辑非

bash 复制代码
$ ./build/calc "!true"
0
$ ./build/calc "!false"
1
$ ./build/calc "!0"
1
$ ./build/calc "!5"
0

4.4 按位取反

bash 复制代码
$ ./build/calc "~0"
-1
$ ./build/calc "~5"
-6
$ ./build/calc "~-1"
0

5. 比较运算

5.1 相等/不等

bash 复制代码
$ ./build/calc "3 == 3"
1
$ ./build/calc "3 != 3"
0
$ ./build/calc "3.0 == 3"
1

5.2 大小比较

bash 复制代码
$ ./build/calc "3 < 5"
1
$ ./build/calc "3 > 5"
0
$ ./build/calc "3 <= 3"
1
$ ./build/calc "3 >= 5"
0
$ ./build/calc "5 > 3"
1
$ ./build/calc "5 >= 3"
1

5.3 比较与逻辑混合

bash 复制代码
$ ./build/calc "1 < 2 && 2 < 3"
1
$ ./build/calc "3 + 5 == 8"
1
$ ./build/calc "3 + 5 * 2 == 13"
1

6. 逻辑运算

6.1 逻辑值

bash 复制代码
$ ./build/calc "true"
1
$ ./build/calc "false"
0

6.2 逻辑与

bash 复制代码
$ ./build/calc "true && true"
1
$ ./build/calc "true && false"
0

6.3 逻辑或

bash 复制代码
$ ./build/calc "true || false"
1
$ ./build/calc "false || false"
0

6.4 混合优先级

&& 优先于 ||

bash 复制代码
$ ./build/calc "false || true && false"
0
$ ./build/calc "!true && false"
0

7. 位运算

7.1 按位与

bash 复制代码
$ ./build/calc "3 & 6"
2

7.2 按位或

bash 复制代码
$ ./build/calc "3 | 6"
7

7.3 按位异或

bash 复制代码
$ ./build/calc "3 ^ 6"
5
$ ./build/calc "5 ^ 5"
0

7.4 移位

bash 复制代码
$ ./build/calc "1 << 3"
8
$ ./build/calc "8 >> 2"
2
$ ./build/calc "0 << 3"
0
$ ./build/calc "0 >> 3"
0

7.5 混合优先级

位运算优先于比较,后于算术:

bash 复制代码
$ ./build/calc "3 + 5 & 2"
0
$ ./build/calc "3 & 6 | 1"
3
$ ./build/calc "~0 >> 1"
-1

8. 变量系统

8.1 变量赋值

bash 复制代码
$ ./build/calc "x = 5 + 3"
8

8.2 复合赋值

bash 复制代码
$ ./build/calc "x = 5; x += 3; x"
8
$ ./build/calc "x = 10; x -= 3; x"
7
$ ./build/calc "x = 5; x *= 2; x"
10
$ ./build/calc "x = 10; x /= 2; x"
5

8.3 自增/自减

复制代码
calc> x = 5
calc> ++x
  6
calc> x++
  6
calc> x
  7
calc> --x
  6
calc> x--
  6
calc> x
  5

8.4 查看变量

复制代码
calc> vars
  x = 5
  y = 16

9. 条件表达式

9.1 基本条件

bash 复制代码
$ ./build/calc "1 ? 2 : 3"
2
$ ./build/calc "0 ? 2 : 3"
3

9.2 条件与比较结合

bash 复制代码
$ ./build/calc "1 < 2 ? 3 : 4"
3
$ ./build/calc "true ? 1 : 0"
1
$ ./build/calc "false ? 1 : 0"
0

9.3 嵌套条件

bash 复制代码
$ ./build/calc "1 ? 2 : 3 ? 4 : 5"
2
$ ./build/calc "0 ? 1 : 2 ? 3 : 4"
3

10. 内置函数

10.1 三角函数

bash 复制代码
$ ./build/calc "sin(0)"
0
$ ./build/calc "cos(0)"
1
$ ./build/calc "tan(0)"
0
$ ./build/calc "sin(3.14159 / 2)"
1

10.2 平方根和幂

bash 复制代码
$ ./build/calc "sqrt(16)"
4
$ ./build/calc "pow(2, 10)"
1024
$ ./build/calc "sqrt(4) + 1"
3

10.3 取整和绝对值

bash 复制代码
$ ./build/calc "floor(3.7)"
3
$ ./build/calc "ceil(3.2)"
4
$ ./build/calc "abs(-5)"
5

10.4 嵌套调用

bash 复制代码
$ ./build/calc "sin(sqrt(4))"
0.909297
$ ./build/calc "atan2(1, 1)"
0.785398

11. 多表达式

11.1 分号分隔

bash 复制代码
$ ./build/calc "1; 2; 3"
3
$ ./build/calc "1 + 1; 2 + 2; 3 + 3"
6

11.2 链式赋值

bash 复制代码
$ ./build/calc "a = 5; b = 6; a + b"
11
$ ./build/calc "x = 1; x += 2; x * 3"
9

11.3 混合运算

bash 复制代码
$ ./build/calc "true; false; true || false"
1
$ ./build/calc "3; 2; 1"
1

12. REPL 高级功能

12.1 历史记录

复制代码
calc> 3 + 5
calc> 2 * 3
calc> history
  #1  3 + 5
  #2  2 * 3
calc> !1
  >> 3 + 5
  8
calc> !!
  >> 3 + 5
  8

12.2 进制输出

复制代码
calc> dec
  output base: dec
calc> 255
  255
calc> hex
  output base: hex
calc> 255
  0xFF
calc> bin
  output base: bin
calc> 255
  0b11111111
calc> oct
  output base: oct
calc> 255
  0377

12.3 多行输入

当括号未闭合时自动提示续行:

复制代码
calc> (3 + 5
...> ) * 2
  3 + 5 = 8
  8 * 2 = 16
  result: 16

12.4 配置文件

创建 ~/.calcrc 文件,启动时自动加载:

复制代码
# ~/.calcrc
PI = 3.141592653589793
E = 2.718281828459045

启动后可直接使用:

复制代码
calc> PI
  3.14159
calc> E
  2.71828

13. 错误处理

13.1 非法字符

复制代码
calc> 3 + @ 5
  3 + @ 5
       ^
  error: unexpected character at position 5

13.2 除零

bash 复制代码
$ ./build/calc "3 / 0"
  error: division by zero

13.3 未定义变量

bash 复制代码
$ ./build/calc "z + 1"
  error: undefined variable 'z'

13.4 未知函数

bash 复制代码
$ ./build/calc "unknown()"
  error: unknown function 'unknown'

13.5 结果溢出

bash 复制代码
$ ./build/calc "1e5000 * 1e5000"
  error: result overflow

13.6 错误恢复

分号分隔的表达式,前一个出错后继续执行后续:

复制代码
calc> 1/0; 3 + 5
  error: division by zero
  3 + 5 = 8
  result: 8

13.7 常见错误

错误用法 正确用法 说明
3++5 3+5 连续运算符非法
++5 --- 前缀 ++ 需要变量
x++ --- 后缀 ++ 需要先定义变量
1?2 1?2:3 条件表达式缺少 :
3== 3==5 比较运算符缺少右操作数
3& 3&5 位运算符缺少右操作数

14. 实用技巧

14.1 常量折叠(缓存)

calc 自动缓存最近 16 个表达式的结果,相同表达式重复求值时直接返回:

bash 复制代码
$ ./build/calc "3+5*2"
13
# 第二次求值直接从缓存读取

14.2 管道配合 printf

bash 复制代码
$ printf 'x=5\ny=x*2\nx+y\nexit\n' | ./build/calc

14.3 注释

bash 复制代码
$ ./build/calc "3 + 5 # 加法运算"
8

14.4 安装到系统

bash 复制代码
$ make install
$ calc "3 + 5"
8

14.5 源码打包

bash 复制代码
$ make dist
created calc-2.0.tar.gz
相关推荐
长不胖的路人甲1 小时前
Serial 串行、Parallel 并行、CMS 并发收集器
java·开发语言·jvm
霸道流氓气质3 小时前
分布式系统中接口时序不确定性处理
java·开发语言·分布式
库克克3 小时前
【C++】C++11 包装器function 与 绑定器 bind
开发语言·c++
0x3F(小茶)3 小时前
STM32 SPI的5种方向模式
c语言·stm32·单片机·嵌入式硬件
多加点辣也没关系3 小时前
JavaScript|第30章:事件机制
开发语言·javascript
小大宇3 小时前
python milvus 案例
开发语言·python·milvus
Gauss松鼠会3 小时前
【GaussDB】GaussDB锁阻塞源头查询
java·开发语言·前端·数据库·算法·gaussdb·经验总结
mingo_敏4 小时前
DeepAgents : 后端(Backends)
java·开发语言
mabing9934 小时前
Qt QMessageBox、QDialogButtonBox中英文翻译动态切换
开发语言·qt