2.1.1 整数的魔法运算
“小朋友们,让我们先来玩玩最简单的整数魔法!” 我变出一个大大的黑板,开始写下示例。

// 简单的加法魔法
cout << 5 + 3 << endl; // 输出:8(就像变魔法一样,5和3合在一起变成了8)
cout << 100 + 200 << endl; // 输出:300(大数也能轻松相加)
cout << 1 + (-5) << endl; // 输出:-4(加上负数就变成了减法)
// 神奇的减法魔法
cout << 10 - 4 << endl; // 输出:6(10里面减去4,还剩6)
cout << 3 - 8 << endl; // 输出:-5(3不够减8,所以变成负数啦)
cout << -5 - (-3) << endl; // 输出:-2(负数减负数,要先想清楚哦)
// 快乐的乘法魔法
cout << 6 * 3 << endl; // 输出:18(6连加3次,或者3连加6次)
cout << 2 * (-4) << endl; // 输出:-8(乘以负数,结果要变号)
cout << (-2) * (-3) << endl; // 输出:6(负数乘以负数,变成正数啦)
“哇!计算机真的好厉害!” 小明惊叹道。

接着,我继续在黑板上写道:
// 神奇的除法魔法
cout << 10 / 3 << endl; // 输出:3(整数除法,小数部分不要啦)
cout << 2 / 7 << endl; // 输出:0(2比7小,除不开,就得到0)
cout << 100 / 20 << endl; // 输出:5(正好整除,得到5)
// 负数的除法魔法
cout << (-10) / 3 << endl; // 输出:-3(负数除以正数,结果是负数)
cout << 10 / (-3) << endl; // 输出:-3(正数除以负数,结果也是负数)
cout << (-10) / (-3) << endl; // 输出:3(负数除以负数,得到正数)
// 取模魔法(求余数)
cout << 10 % 3 << endl; // 输出:1(10除以3,余数是1)
cout << 2 % 7 << endl; // 输出:2(2除不开7,余数就是2)
cout << 100 % 20 << endl; // 输出:0(整除的情况,没有余数)
“等一下,”小红举手问道,”为什么10除以3等于3呢?不是应该是3.333…吗?”

“这是个好问题!” 我笑着说,”让我们来看看下一个魔法!”
2.1.2 小数的奥秘

// 小数的加法魔法
cout << 3.5 + 2.3 << endl; // 输出:5.8(小数相加,结果也是小数)
cout << 0.1 + 0.2 << endl; // 输出:0.3(小数点后的数字也要算哦)
cout << 5.0 + 3 << endl; // 输出:8.0(整数和小数相加,结果保留小数点)
// 小数的减法魔法
cout << 5.7 - 2.3 << endl; // 输出:3.4(小数相减,要仔细对齐小数点)
cout << 3.0 - 4.5 << endl; // 输出:-1.5(不够减,结果是负小数)
// 小数的乘法魔法
cout << 2.5 * 3.0 << endl; // 输出:7.5(小数相乘,结果更精确)
cout << 0.5 * 8 << endl; // 输出:4.0(0.5就是二分之一,所以是8的一半)
// 小数的除法魔法
cout << 10.0 / 3 << endl; // 输出:3.333333(看,这才是小红想要的答案)
cout << 2.0 / 7 << endl; // 输出:0.285714(小数除法,结果更精确)
练习题:
在C++中,表达式 (-15) / 4 的值为( )
A. -4
B. -3
C. -3.75
D. -5答案:B
解析:整数除法会舍弃小数部分,向零取整。-15 ÷ 4 = -3.75,所以结果为-3在C++中,表达式 5.0 / 2 的结果是( )
A. 2
B. 2.0
C. 2.5
D. 3.0答案:C
解析:当运算数中有浮点数时,结果为浮点数,5.0 / 2 = 2.5判断题:浮点数运算可能会产生微小的精度误差 ( )
答案:√
解析:由于计算机对浮点数的存储特点,某些小数运算可能产生微小误差好的,我来设计两道关于整数运算的选择题和填空题:
2.1.3 除法和取模的秘密
“现在,让我们来学习一个特别的魔法——取模!这个魔法可以告诉我们除法的余数。” 我神秘地说。

“看这个时钟,” 我指着时钟说,”如果现在是1点,过10个小时是几点?”
小朋友们开始数:”2、3、4…11点!”
“对!这就是取模魔法!10除以12余10,所以是10点。让我们再看更多例子:”
// 取模魔法的日常例子
cout << "时钟转10小时:" << 10 % 12 << "点" << endl; // 输出:时钟转10小时:10点
cout << "时钟转25小时:" << 25 % 12 << "点" << endl; // 输出:时钟转25小时:1点
// 危险的魔法(这些都不能用!)
// cout << 10 / 0 << endl; // 危险!除数不能为0
// cout << 10.5 % 2 << endl; // 错误!小数不能用取模
// cout << 7 % 0 << endl; // 危险!取模的除数也不能为0
// 有趣的取模例子
cout << 17 % 5 << endl; // 输出:2(17除以5余2)
cout << 100 % 30 << endl; // 输出:10(100除以30余10)
cout << 7 % 7 << endl; // 输出:0(整除时余数为0)
// 负数的取模运算
cout << -3 % 2 << endl; // 输出:-1 (负数除以正数,余数为负)
cout << 10 % -3 << endl; // 输出:1 (正数除以负数,余数为正)
cout << -10 % -3 << endl; // 输出:-1 (负数除以负数,余数为负)
cout << -7 % 3 << endl; // 输出:-1 (-7 = -2 * 3 + (-1))
cout << 7 % -3 << endl; // 输出:1 (7 = -2 * -3 + 1)
cout << -10 % -4 << endl; // 输出:-2 (-10 = 2 * -4 + (-2))

取模运算的规则:
- 余数的符号和被除数相同
- 商向零取整
- 满足公式:a = (a/b)*b + (a%b)
练习题:
选择题:
以下表达式中,结果为正数的是( )
A. (-20) % (-6)
B. (-15) % 4
C. (-7) * (-8)
D. (-100) / (-3)答案:C
解析:
A: -20 % (-6) = -2 (负数对负数取模,结果与被除数同号)
B: -15 % 4 = -3 (负数对正数取模,结果与被除数同号)
C: -7 * (-8) = 56 (负数乘以负数得正数)
D: -100 / (-3) ≈ 33 (负数除以负数得正数)
只有C选项-7 * (-8) = 56是正数以下表达式中,值为-2的是( ) A. (-8) % 3 B. (-14) % (-4) C. (-20) % 6 D. (-12) % 5 答案:B 解析: A: (-8) % 3 = -2 B: (-14) % (-4) = -2 C: (-20) % 6 = -2 D: (-12) % 5 = -2 所有选项结果都是-2,都是正确答案
判断题:
- 在C++中,(-25) / 3 和 25 / (-3) 的结果相同 ( ) 答案:√ 解析:(-25) / 3 = -8 (向零取整),25 / (-3) = -8 (向零取整)。负数除以正数和正数除以负数,结果都是-8
- 在C++中,负数除以负数的结果一定是负数 ( ) 答案:× 解析:负数除以负数的结果是正数,比如 (-10) / (-2) = 5。这是因为负负得正的规则
2.1.4 魔法的优先级
“魔法师施法也是有顺序的!” 我拿出一个漂亮的魔法书。

// 基础优先级规则
cout << 3 + 4 * 2 << endl; // 输出:11(先算4*2=8,再加3)
cout << (3 + 4) * 2 << endl; // 输出:14(括号内先算3+4=7,再乘2)
// 复杂一点的计算
cout << 15 / 3 * 2 + 4 << endl; // 输出:14(先算15/3=5,再乘2=10,最后加4)
cout << 10 + 20 / 5 - 2 << endl; // 输出:12(先算20/5=4,再算10+4-2)
// 更多有趣的例子
cout << 100 / (2 + 3) * 4 << endl; // 输出:80(先算括号2+3=5,再算100/5=20,最后乘4)
cout << 18 / 3 + 4 * 2 << endl; // 输出:14(先算18/3=6和4*2=8,再相加)
“记住魔法优先级的口诀:” 我领着小朋友们念道:
括号第一优先级,
乘除取模第二层,
加减最后不要急,
从左到右细思量!
练习题:
在C++中,表达式 15 – 3 * 2 的值是( )
A. 24
B. 18
C. 9
D. 12答案:C
解析:根据运算符优先级,先计算乘法 3 * 2 = 6,再计算减法 15 – 6 = 9判断题:在C++中,-5 % 2 的结果是 -1 ( )
答案:√
解析:负数取模的结果符号与被除数相同,-5 ÷ 2 = -2 余 -1在C++中,表达式 (10 + 2) % 3 的值是( )
A. 0
B. 1
C. 2
D. 3答案:D
解析:先计算括号内 10 + 2 = 12,然后 12 % 3 = 0判断题:在C++中,10 / 3 的结果是小数 3.333… ( )
答案:×
解析:整数除法结果仍为整数,舍弃小数部分,所以结果为3