返回 课程

信奥AC之路-第一级-A学段

0% 完成
0/0 步骤
  1. 第一课 开发环境与基础输出
    4 主题|小节
  2. 第二课 算数运算符
    6 主题|小节
  3. 第三课 输入与运算
    3 主题|小节
  4. 第四课 数值操作
    4 主题|小节
  5. 第五课 表达式与运算符
    3 主题|小节
  6. 第六课 三目运算与双分支(缺导语+本课目标)
    2 主题|小节
  7. 第七课 多分支结构(缺导语+本课目标)
    1 主题|小节
  8. 第八课 多if语句
    1 主题|小节
  9. 第九课 三种分支结构的比较
    1 主题|小节
  10. 第十课 巩固学习分支结构
    1 主题|小节
  11. 第十一课 switch与复合语句
    3 主题|小节
  12. 第十二课 while循环
    2 主题|小节
  13. 第十三课 while循环的简单条件输出
    1 主题|小节
  14. 第十四课 while循环的输入序列处理
    1 主题|小节
  15. 第十五课 while循环的复杂条件输出
    2 主题|小节
  16. 第十六课 while循环与数据统计
    1 主题|小节
  17. 第十七课 for循环结构
    3 主题|小节
  18. 第十八课 for循环的输入序列处理)
    1 主题|小节
  19. 第十九课 深入探索for循环
    2 主题|小节
  20. 第二十课 三种循环的对比
    2 主题|小节
  21. 第二十一课 程序调试(一)
    3 主题|小节
  22. 第二十二课 调试工具的使用
    2 主题|小节
  23. 第二十三课 综合复习
    2 主题|小节
  24. 第二十四课 学习评估
    1 主题|小节
课 2, 主题|小节 1
进行中

2.1 神奇的计算魔法

2025年4月19日
课 进展
0% 完成

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(小数除法,结果更精确)

练习题:

  1. 在C++中,表达式 (-15) / 4 的值为( )
    A. -4
    B. -3
    C. -3.75
    D. -5


    答案:B
    解析:整数除法会舍弃小数部分,向零取整。-15 ÷ 4 = -3.75,所以结果为-3


  2. 在C++中,表达式 5.0 / 2 的结果是( )
    A. 2
    B. 2.0
    C. 2.5
    D. 3.0


    答案:C
    解析:当运算数中有浮点数时,结果为浮点数,5.0 / 2 = 2.5


  3. 判断题:浮点数运算可能会产生微小的精度误差 ( )


    答案:√
    解析:由于计算机对浮点数的存储特点,某些小数运算可能产生微小误差


    好的,我来设计两道关于整数运算的选择题和填空题:


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))

取模运算的规则:

  1. 余数的符号和被除数相同
  2. 商向零取整
  3. 满足公式:a = (a/b)*b + (a%b)

练习题:

选择题:

  1. 以下表达式中,结果为正数的是( )
    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. 以下表达式中,值为-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,都是正确答案


判断题:

  1. 在C++中,(-25) / 3 和 25 / (-3) 的结果相同 ( ) 答案:√ 解析:(-25) / 3 = -8 (向零取整),25 / (-3) = -8 (向零取整)。负数除以正数和正数除以负数,结果都是-8
  2. 在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,再相加)

“记住魔法优先级的口诀:” 我领着小朋友们念道:

括号第一优先级,
乘除取模第二层,
加减最后不要急,
从左到右细思量!

练习题:

  1. 在C++中,表达式 15 – 3 * 2 的值是( )
    A. 24
    B. 18
    C. 9
    D. 12


    答案:C
    解析:根据运算符优先级,先计算乘法 3 * 2 = 6,再计算减法 15 – 6 = 9


  2. 判断题:在C++中,-5 % 2 的结果是 -1 ( )


    答案:√
    解析:负数取模的结果符号与被除数相同,-5 ÷ 2 = -2 余 -1


  3. 在C++中,表达式 (10 + 2) % 3 的值是( )
    A. 0
    B. 1
    C. 2
    D. 3


    答案:D
    解析:先计算括号内 10 + 2 = 12,然后 12 % 3 = 0


  4. 判断题:在C++中,10 / 3 的结果是小数 3.333… ( )


    答案:×
    解析:整数除法结果仍为整数,舍弃小数部分,所以结果为3