4.2 KiB
4.2 KiB
C++ 多重循环与循环嵌套 课后习题参考答案
本卷共 30 题:填空、选择、判断各 10 题。其中基础题 24 题,占 80%;基础应用与迁移题 6 题,占 20%。每类题的第 1~8 题为基础题,第 9~10 题为应用与迁移题。
考查范围限于本课的循环嵌套、循环范围、变量初始化、星号矩形、数字三角形、阶乘之和及数位计数。判断题第 9 题的 %02d 来自所提供的 PPT 内容。
一、 填空题
| 题号 | 参考答案 | 简要说明 |
|---|---|---|
| 1 | 循环嵌套(或“多重循环”);外层;内层 | 循环之间存在包含关系 |
| 2 | 2;***** |
外层执行 2 轮,每轮在同一行输出 5 个星号 |
| 3 | 1;3 | 每次进入内层都重新初始化;每轮外层换行一次 |
| 4 | n - i + 1(或 n - (i - 1));5 |
第 3 行比第一行少 2 个 |
| 5 | 之前;1 | 每输出一个编号就增加 1,编号跨行保留 |
| 6 | 6 | 累乘结果为 1\times1\times2\times3=6 |
| 7 | 9 | 1!+2!+3!=1+2+6=9 |
| 8 | 0;102 | 取出个位 0,再通过整数除法去掉个位 |
| 9 | 0405;06;7 |
各行数量为 3、2、1,共输出 6 个编号;最后的变量记录下一个编号 |
| 10 | 24;33 | 四轮的阶乘依次为 1、2、6、24,总和为 33 |
第 4 题中,与参考答案等价的表达式也可判为正确。填写输出内容时,前导零应保留。
二、 单项选择题
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | C | B | D | A | C | B | D | A | C | A |
- C。
while放在for的循环体内,形成包含关系。前后执行的两个循环不属于嵌套。 - B。 外层执行 2 轮,每轮内层执行 3 次,共
2\times3=6次。 - D。 先输出当前行的全部星号,再换行;换行仍属于外层的任务。
- A。 每一行的
j都从 1 开始,依次输出 1、2、3。 - C。 第一行中
i始终为 1,输出111;第二行中i始终为 2,输出222。 - B。 第 4 行有
6-4+1=3个数。 - D。 常见的 32 位
int无法保存13!。本题范围内的乘积和总和可以用long long保存。 - A。
92 % 10得到 2,整数除法92 / 10得到 9。 - C。 每轮内层分别执行 1、2、3、4 次,总共
1+2+3+4=10次,不能直接算成 4×4。 - A。 整数 1 贡献一次;10~19 的十位共贡献 10 次;11 的个位再贡献一次;20 不贡献,总共
1+10+1=12次。
三、 判断题
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | × | × | √ | √ | × | × | √ | √ | × | √ |
- ×。 要有包含关系:一个循环位于另一个循环的循环体内。
- ×。 内层执行多少次由自己的初始化、条件、更新及循环体决定。本课矩形例子中,一轮外层对应内层的多次执行。
- √。 大括号决定归属,缩进帮助阅读。
- √。 每次执行到内层
for,都先执行其初始化部分。 - ×。
cnt应在外层之前初始化;放进外层会让每行编号重新从 1 开始。 - ×。 从 0 开始累乘,之后乘任何数仍然为 0。累乘器应从 1 开始。
- √。
long long足以保存本题范围内的结果,但不能保存任意大的整数。 - √。 不匹配的数位也已经检查完毕,应去掉它并继续。把去位语句放进匹配成功的分支,可能导致程序停留在同一数位。
- ×。 2 表示最小宽度,不会截断超过两位的整数,实际输出为
123。 - √。 这段程序的结果不是正确的阶乘之和,变量变化如下。
外层 i |
进入本轮时的 factor |
内层计算后的 factor |
累加后的 ans |
|---|---|---|---|
| 1 | 1 | 1 × 1 = 1 |
1 |
| 2 | 1 | 1 × 1 × 2 = 2 |
3 |
| 3 | 2 | 2 × 1 × 2 × 3 = 12 |
15 |
这里沿用了“每项从头乘 1 到 i”的内层循环,所以每项开始时应把 factor 重置为 1。若改用保留上一项阶乘的方法,则应删除内层循环,每轮只执行 factor *= i。