第 6 课:基本运算与赋值运算
本课学习目标: 1. 熟练计算加、减、乘、除(
/)以及取余(%)。 2. 彻底理解并掌握整数除法会舍去小数部分的规则。 3. 掌握取余运算符%的经典应用(判断整除、判断奇偶、提取个位数)。 4. 牢记算术运算符的优先级及“同级从左到右”的计算顺序。 5. 掌握复合赋值运算符(如+=,%=)以及自增自减(++,--)的前置与后置区别。
一、 算术运算与“坑人”的整数除法
C++ 中的基本算术运算符包括:+(加)、-(减)、*(乘)、/(除)、%(取余)。
1. 整数除法 /
当 / 的两边都是整数时,结果也必须是整数,小数部分会被直接无条件舍去(不是四舍五入)。
* cout << 7 / 2; ➡️ 输出:3 (数学结果是 3.5,但 C++ 整数除法直接砍掉 .5,得到 3)。
* cout << 9 / 4; ➡️ 输出:2 (因为 $9 = 4 \times 2 + 1$)。
2. 取余运算 %
% 符号用于求两个整数相除后的余数。
* cout << 7 % 2; ➡️ 输出:1 (因为 $7 \div 2 = 3 \dots 1$)。
* cout << 10 % 3; ➡️ 输出:1 (因为 $10 = 3 \times 3 + 1$)。
💡 取余
%的三大必考应用场景: 1. 判断能否整除:若a % b == 0,说明a能被b整除。 2. 判断奇偶数:n % 2 == 0为偶数;n % 2 == 1(或!= 0)为奇数。 3. 提取个位数:对任意正整数n,n % 10结果就是它的个位数。
二、 运算优先级与结合性
当一个表达式里有多个运算符时,C++ 严格按照以下优先级进行计算:
- 括号
():最高优先级,括号内的先算。 - 乘、除、取余
*,/,%。 - 加、减
+,-。 - 赋值
=:最低优先级。
📌 两大黄金法则: * 先乘除取余,后加减。 * 同级运算(如连续的乘除或加减),严格按照“从左到右”的顺序计算!
经典易错表达式剖析:
- 例 1:
cout << 2 + 3 * 4; - 步骤:先算乘法
3 * 4 = 12,再算加法2 + 12 = 14。结果为14。 - 例 2(同级从左到右):
cout << 16 / 4 % 2; - 步骤:
/和%同级,必须从左到右! - 先算
16 / 4 = 4; - 再算
4 % 2 = 0。结果为0。(如果错误地从右往左算4 % 2 = 0并在16 / 0就会导致程序崩溃或错答案)。
三、 复合赋值运算
为了让代码更简短,C++ 提供了复合赋值运算符:
| 复合写法 | 等价展开写法 | 含义说明 |
|---|---|---|
a += b; |
a = a + b; |
把 a + b 的结果赋给 a |
a -= b; |
a = a - b; |
把 a - b 的结果赋给 a |
a *= b; |
a = a * b; |
把 a * b 的结果赋给 a |
a /= b; |
a = a / b; |
把 a / b 的结果赋给 a |
a %= b; |
a = a % b; |
把 a % b 的结果赋给 a |
- 示例:
cpp int a = 6; a %= 4; // 等价于 a = 6 % 4; cout << a; // 输出 2
四、 自增 ++ 与自减 --(考试高频陷阱)
a++;或++a;核心作用都是让变量a的值 增加 1(等价于a += 1;或a = a + 1;)。- 但当它们参与到复杂的输出或表达式中时,前置和后置有天壤之别!
| 写法 | 名称 | 核心规则(口诀) | 代码示例与输出结果 |
|---|---|---|---|
++a |
前置自增 | 先加后用(先让 a 自增 1,再拿新值去参与运算) |
int a = 5;cout << ++a; 👉 输出 6(a自身变成6) |
a++ |
后置自增 | 先用后加(先拿 a 原来的值去参与运算,用完后 a 再自增 1) |
int a = 5;cout << a++; 👉 输出 5(随后 a 变成 6) |
五、 GESP 一级真题与例题精讲
练一练 1:同级运算从左到右
【题目】 下面表达式的值是( )。
3 * 4 % 5 / 6
A. 10
B. 5
C. 2
D. 0
正确答案:D 名师解析:
*、%、/属于同级运算符,必须严格从左到右计算: 1. 先算3 * 4 = 12; 2. 再算12 % 5 = 2; 3. 最后算2 / 6。因为是整数除法,2 / 6结果为0。
练一练 2:复合赋值运算
【题目】 下面程序输出是( )。
int a = 6;
a %= 4;
cout << a;
A. 1
B. 2
C. 3
D. 4
正确答案:B 名师解析:
a %= 4等价于展开为a = a % 4。把当前的a = 6带入进去,即6 % 4,商 1 余 2,因此a的新值变为2。
练一练 3:后置自增陷阱
【题目】 下面程序输出是( )。
int a = 5;
cout << a++;
cout << " ";
cout << a;
A. 5 6
B. 6 6
C. 6 5
D. 5 5
正确答案:A 名师解析: 1. 执行第一句
cout << a++;时,由于是后置自增,先使用a的原值5进行输出,输出打印出5,随后a在暗中自增变成了6。 2. 执行第三句cout << a;时,打印出此时a最新的值6。 3. 最终屏幕上输出:5 6。
—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com