返回 课程
信奥AC之路-1级
0% 完成
0/0 步骤
-
第1课 开发环境与基础输出5 主题|小节
-
第2课 算术运算符7 主题|小节
-
第3课 printf与运算输出7 主题|小节
-
第4课 数的进制与拆位6 主题|小节
-
第5课 变量与基础运算17 主题|小节
-
第6课 常量与取整运算8 主题|小节
-
第7课 关系运算8 主题|小节
-
第8课 逻辑运算9 主题|小节
-
第9课 输入与计算进阶10 主题|小节
-
第10课 if语句及双分支语句8 主题|小节
-
第11课 if语句及双分支进阶11 主题|小节
-
第12课 三目运算9 主题|小节
-
第13课 多分支、多if和switch语句11 主题|小节
-
第14课 循环(基本输出)7 主题|小节
-
第15课 循环(While+If)8 主题|小节
-
第16课 循环(计数、求和、求乘积)10 主题|小节
-
第17课 循环进阶(While+)8 主题|小节
-
第18课 do-while及while其他用法8 主题|小节
-
第19课 For循环基础9 主题|小节
-
第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(条件);
- while循环:先判断条件,再决定是否执行循环体,可能一次也不执行
- 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:
- 当循环体需要至少执行一次时
- 当处理用户输入并验证合法性时
- 当条件依赖于循环体内计算的结果时
何时使用while:
- 当循环可能一次也不执行时
- 当需要在循环开始前检查条件时
- 当处理未知数量的输入数据时
使用无限循环和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; // 更新循环不变量
}