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 使用误差范围判断

五、编程技巧

  1. 多用括号
    // 易混淆表达式加括号明确优先级
    int result = (a + b) * (c - d);
    
  2. 避免复杂表达式
    // 拆分复杂逻辑表达式
    bool cond1 = (x > 0);
    bool cond2 = (y < 100);
    if (cond1 && cond2) { ... }
    
  3. 防御性编程
    // 检查除数非零
    if (b != 0) {
        int result = a / b;
    }
    

附:优先级速记口诀

括号单目乘除余,加减比较等与不等,
逻辑与或赋值低,右左结合要分清!

0 条评论

目前还没有评论...