返回 课程

信奥AC之路-1级

0% 完成
0/0 步骤
  1. 第1课 开发环境与基础输出
    5 主题|小节
  2. 第2课 算术运算符
    7 主题|小节
  3. 第3课 printf与运算输出
    7 主题|小节
  4. 第4课 数的进制与拆位
    6 主题|小节
  5. 第5课 变量与基础运算
    17 主题|小节
  6. 第6课 常量与取整运算
    8 主题|小节
  7. 第7课 关系运算
    8 主题|小节
  8. 第8课 逻辑运算
    9 主题|小节
  9. 第9课 输入与计算进阶
    10 主题|小节
  10. 第10课 if语句及双分支语句
    8 主题|小节
  11. 第11课 if语句及双分支进阶
    11 主题|小节
  12. 第12课 三目运算
    9 主题|小节
  13. 第13课 多分支、多if和switch语句
    11 主题|小节
  14. 第14课 循环(基本输出)
    7 主题|小节
  15. 第15课 循环(While+If)
    8 主题|小节
  16. 第16课 循环(计数、求和、求乘积)
    10 主题|小节
  17. 第17课 循环进阶(While+)
    8 主题|小节
  18. 第18课 do-while及while其他用法
    8 主题|小节
  19. 第19课 For循环基础
    9 主题|小节
  20. 第20课 For循环进阶
    8 主题|小节
课 18, 主题|小节 3
进行中

18.2 do-while和while循环比较和思考

2025年9月22日
课 进展
0% 完成

“小朋友们,我们已经通过这些实验深入学习了do-while和while循环的应用,现在让我们来思考一下这两种循环结构的特点和适用场景,”我解释道。

18.2.1 do-while和while循环的区别

执行顺序的区别:

// while循环
while(条件) {
    // 循环体
}

// do-while循环
do {
    // 循环体
} while(条件);
  1. while循环:先判断条件,再决定是否执行循环体,可能一次也不执行
  2. do-while循环:先执行循环体,再判断条件,至少执行一次循环体

适用场景:

  • while循环:适用于执行前需要判断条件的情况
  • do-while循环:适用于至少需要执行一次的情况,如获取用户输入直到满足特定条件

实际使用:

在实验二中,我们使用do-while循环来累加1/n,直到和超过k:

do {
    sum += 1.0/i++;
} while(sum <= k);

而用while循环实现相同功能则需要:

while(1) {
    sum += 1.0/i;
    if(sum > k) {
        cout << i;
        break;
    }
    i++;
}

18.2.2 循环结构的选择技巧

何时使用do-while:

  1. 当循环体需要至少执行一次时
  2. 当处理用户输入并验证合法性时
  3. 当条件依赖于循环体内计算的结果时

何时使用while:

  1. 当循环可能一次也不执行时
  2. 当需要在循环开始前检查条件时
  3. 当处理未知数量的输入数据时

使用无限循环和break的场景:

while(1) {
    // 执行某些操作
    if(终止条件) {
        break;
    }
}

这种模式在需要复杂终止条件或多个出口点的情况下很有用,如实验四中的锯棍问题。

18.2.3 循环的优化技巧

使用n–作为循环条件:

while(n--) {
    // 循环体
}

这种写法简洁高效,特别适合确定循环次数的情况,如实验八和实验九。

合理使用break和continue:

  • break:立即退出循环
  • continue:跳过当前迭代的剩余部分,开始下一次迭代

循环不变量的维护:

在实验六中,我们使用t变量记录上一个数字,这是维护循环不变量的一个例子:

while(cin >> x) {
    if(x == t + 1) {
        cnt++;
    } else {
        cnt = 1;
    }
    t = x;  // 更新循环不变量
}