5.8 KiB
C++ 多重循环与循环嵌套 课后习题
姓名: ___________________
一、 填空题
-
在一个循环的循环体里再放入另一个循环,这种写法叫作________。外面的循环叫作________循环,里面的循环叫作________循环。
-
下面的程序共输出________行,每一行的输出内容为________。
for (int i = 1; i <= 2; i++) {
for (int j = 1; j <= 5; j++) { cout << '*'; }
cout << '\n';
}
- 在下面的程序中,每进入新的一行,内层变量
j都会重新从________开始;换行语句一共执行________次。
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 4; j++) { cout << '*'; }
cout << '\n';
}
-
数字直角三角形的第一行有
n个数,以后每行少一个。第i行有________个数(用含n、i的式子表示)。当n=7、i=3时,这一行有________个数。 -
编号从 1 开始、换行后接着增加时,应将
int cnt = 1;写在外层循环________(填“之前”或“之内”)。每输出一个编号后,cnt的值应增加________。 -
下面的代码执行后,输出结果为________。
long long factor = 1;
for (int j = 1; j <= 3; j++) { factor *= j; }
cout << factor;
-
阶乘之和
1!+2!+3!的值为________。 -
已知
int tmp = 1020;,则tmp % 10的结果为________;执行tmp /= 10;后,tmp的值为________。 -
下面的程序在第一行输出
010203。第二行的输出内容为________,第三行的输出内容为________;全部循环结束后,cnt的值为________。
int n = 3, cnt = 1;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n - i + 1; j++) {
if (cnt < 10) { cout << '0'; }
cout << cnt; cnt++;
}
cout << '\n';
}
- 下面的代码保留上一项阶乘,避免从头计算。循环结束后,
factor的值为________,ans的值为________。
long long ans = 0, factor = 1;
for (int i = 1; i <= 4; i++) { factor *= i; ans += factor; }
二、 单项选择题
( ) 1. 下列哪种情况属于循环嵌套?
A. 先执行一个 for,结束后再执行另一个 for
B. 在一个 if 的分支中放入一个 for
C. 在一个 for 的循环体中放入一个 while
D. 在一个 for 的循环体中放入两条输出语句
( ) 2. 下面输出星号的语句一共执行多少次?
for (int i = 1; i <= 2; i++) {
for (int j = 1; j <= 3; j++) { cout << '*'; }
}
A. 2 次 B. 6 次 C. 3 次 D. 5 次
( ) 3. 要输出 3 行、每行 4 个星号,换行语句应放在哪里?
A. 内层循环体中 B. 外层循环开始之前 C. 外层循环结束之后 D. 内层结束后、外层循环体内
( ) 4. 下面的程序输出什么?选项中“/”表示换行,实际输出中没有“/”。
for (int i = 1; i <= 2; i++) {
for (int j = 1; j <= 3; j++) { cout << j; }
cout << '\n';
}
A. 123/123 B. 111/222 C. 123/456 D. 12/12/12
( ) 5. 如果将第 4 题中的 cout << j; 改为 cout << i;,输出是什么?选项中“/”表示换行。
A. 123/123 B. 12/12/12 C. 111/222 D. 111/111
( ) 6. 数字直角三角形的第一行有 n 个数,以后每行少一个。当 n=6 时,第 4 行有几个数?
A. 2 个 B. 3 个 C. 4 个 D. 6 个
( ) 7. 求 $1!+2!+\cdots+n!$,且 1≤n≤20。为了保存较大的乘积和总和,factor 和 ans 应使用下列哪种类型?
A. char B. bool C. int D. long long
( ) 8. 执行下面的代码后,digit 和 tmp 的值分别是多少?
int tmp = 92, digit = tmp % 10;
tmp /= 10;
A. 2 和 9 B. 9 和 2 C. 2 和 92 D. 9 和 92
( ) 9. 下面的代码中,cnt++ 一共执行多少次?
int cnt = 0;
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= i; j++) { cnt++; }
}
A. 4 次 B. 8 次 C. 10 次 D. 16 次
( ) 10. 统计从 1 到 20 的所有整数中,数字 1 出现的总次数。每个数位都要统计,答案是多少?
A. 12 B. 11 C. 10 D. 13
三、 判断题 (对的打“√”,错的打“×”)
( ) 1. 两个 for 循环只要出现在同一个程序里,就构成循环嵌套。
( ) 2. 外层循环执行一轮时,内层循环的循环体一定只执行一次。
( ) 3. C++ 根据大括号判断语句属于哪一层循环;把缩进改了,不会改变语句的归属。
( ) 4. 在星号矩形的写法中,内层为 for (int j = 1; j <= 4; j++),每次外层执行到这条语句时,都会重新执行 int j = 1。
( ) 5. 数字三角形要求编号跨行连续,因此应在每一轮外层循环开始时,将 cnt 重新设为 1。
( ) 6. 用累乘的方法计算阶乘时,将累乘器的初值设为 0,也能得到正确的阶乘。
( ) 7. 对于本课 n≤20 的阶乘之和,乘积和总和可以用 long long 保存,但 long long 也有上限。
( ) 8. 逐位统计数字出现次数时,无论当前数位是否等于目标数字,都需要执行 tmp /= 10;,继续处理下一位。
( ) 9. 使用 printf("%02d", 123) 输出整数时,只会显示最后两位,结果为 23。
( ) 10. 下面的代码没有在每一项开始时重置 factor,最终输出的是 15。
long long ans = 0, factor = 1;
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= i; j++) { factor *= j; }
ans += factor;
}
cout << ans;