- 分享
各类运算符
- 2025-3-1 15:58:25 @
CSP-J 运算符核心知识点总结(基于考纲)
一、运算符分类与功能
1. 算术运算符
运算符 | 名称 | 功能 | 示例 | 注意事项 |
---|---|---|---|---|
+ |
加法 | 数值相加 | 3 + 5 → 8 |
支持整数、浮点数混合运算 |
- |
减法 | 数值相减 | 10 - 4 → 6 |
负数运算:5 - 7 → -2 |
* |
乘法 | 数值相乘 | 3 * 4 → 12 |
注意数据溢出(如 1000000 * 1000000 ) |
/ |
除法 | 数值相除 | 7 / 2 → 3 (整型) |
整型除法会向下取整 |
% |
取模 | 求余数 | 7 % 2 → 1 |
仅适用于整数 |
考纲重点:
- 整数除法的取整规则(如
9 / 4 = 2
) - 取模运算的符号与被除数一致(如
-7 % 3 = -1
)
2. 比较运算符(关系运算符)
运算符 | 名称 | 功能 | 示例 | 运算结果 |
---|---|---|---|---|
> |
大于 | 判断左值是否大于右值 | 5 > 3 → true |
bool 类型 |
< |
小于 | 判断左值是否小于右值 | 2 < 1 → false |
|
>= |
大于等于 | 判断左值是否≥右值 | 5 >= 5 → true |
|
<= |
小于等于 | 判断左值是否≤右值 | 4 <= 3 → false |
|
== |
等于 | 判断两值是否相等 | 5 == 5 → true |
|
!= |
不等于 | 判断两值是否不等 | 3 != 2 → true |
考纲重点:
- 比较运算的结果为布尔值(
true
/false
) - 浮点数比较需考虑精度误差(如
1.0/3.0 == 0.333333
可能为假)
3. 逻辑运算符
运算符 | 名称 | 功能 | 示例 | 短路特性 |
---|---|---|---|---|
&& |
逻辑与 | 两条件都为真时结果为真 | (5>3) && (2<1) → false |
左操作数为假时跳过右操作数计算 |
|| |
逻辑或 | 任一条件为真时结果为真 | (5>3) || (2<1) → true |
左操作数为真时跳过右操作数计算 |
! |
逻辑非 | 取反布尔值 | !(5>3) → false |
单目运算符 |
考纲重点:
- 短路求值特性(优化程序执行效率)
- 运算符优先级:
!
>&&
>\|\|
二、运算符优先级与结合性(核心必考)
优先级 | 运算符 | 结合性 | 示例解析 |
---|---|---|---|
1 | () (括号) |
左→右 | (3+5)*2 → 8*2=16 |
2 | ! + (正) - (负) |
右→左 | -3*4 → (-3)*4=-12 |
3 | * / % |
左→右 | 5+3*2 → 5+6=11 |
4 | + - |
7 - 3 + 2 → 4+2=6 |
|
5 | < <= > >= |
5 > 3 == true → true == true → true |
|
6 | == != |
5 != 3 + 1 → 5 != 4 → true |
|
7 | && |
a > 0 && a < 10 |
|
8 | || |
x < 0 || x > 100 |
|
9 | = += -= 等赋值运算符 |
右→左 | a = b = 5 → a = (b=5) |
三、考纲真题演练
题目1(2022 CSP-J 模拟题):
以下代码的输出结果是什么?
int a = 5, b = 3;
cout << a * b % 4 + 2; // 解析:((5*3)%4)+2 → (15%4)+2 → 3+2=5
题目2(2023 CSP-J 模拟题):
以下逻辑表达式的值是什么?
int x = 5, y = 7;
bool res = !(x > 3) || (y < 10 && x != 5);
// 解析:!(true) || (true && false) → false || false → false
四、易错点总结
错误类型 | 错误示例 | 修正方案 |
---|---|---|
混淆 / 与 % |
5 / 2 = 2.5 (整型运算) |
整型除法结果应为 2 |
忽略运算符优先级 | 5 + 3 * 2 误算为 16 |
正确计算顺序:3*2+5=11 |
误用 = 代替 == |
if(a = 5) |
应改为 if(a == 5) |
浮点数精确比较 | 0.1 + 0.2 == 0.3 |
使用误差范围判断 |
五、编程技巧
- 多用括号:
// 易混淆表达式加括号明确优先级 int result = (a + b) * (c - d);
- 避免复杂表达式:
// 拆分复杂逻辑表达式 bool cond1 = (x > 0); bool cond2 = (y < 100); if (cond1 && cond2) { ... }
- 防御性编程:
// 检查除数非零 if (b != 0) { int result = a / b; }
附:优先级速记口诀
括号单目乘除余,加减比较等与不等,
逻辑与或赋值低,右左结合要分清!
0 条评论
目前还没有评论...