内容正文:
5.5节:循环的嵌套
一、单项选择题
1.对于如下循环嵌套结构,则内层循环总共执行的次数是( )
int i,j;
for(i=1;i<=3;i++){
for(j=1;j<=2;j++){
printf("*"); } }
A. 3 次 B. 5 次 C. 6 次 D. 2 次
2.以下程序片段的输出结果是()
int i,j;
for(i=1;i<=2;i++){
for(j=1;j<=2;j++){
printf("%d",i+j); } }
A. 2334 B. 1223 C. 3445 D. 2233
3.以下程序片段中,内层循环执行的次数是()
int i,j;
for(i=1;i<=3;i++){
for(j=3;j>=i;j--){
printf("*"); } }
A. 3 次 B. 6 次 C. 9 次 D. 4 次
4.以下代码中,循环体执行的次数是()
#include <stdio.h>
main() {
int i, j, count = 0;
for (i = 1; i <= 4; i++)
for (j = 1; j <= i / 2 + 1; j++)
count++;
printf("%d", count);
}
A. 6次 B. 8次 C. 10次 D. 12次
5.下列循环嵌套写法中,属于语法非法、绝对不能编译通过的是()
A. while(){ for(;;){ } } B. for(;;){ do{ }while(); }
C. for(;;{ while(){ } }) D. do{ while(){ } }while();
6.以下嵌套循环执行完毕后,count的值为()
int i,j,count=0;
for(i=1;i<=3;i++)
for(j=i;j<=3;j++)
count++;
A. 6 B. 7 C. 8 D. 9
7.嵌套循环中,内层循环条件恒假,则整体程序效果为()
A. 外层循环完全不执行 B. 外层正常迭代,内层无执行
C. 内外层均进入死循环 D. 程序直接编译失败
8.对比单层循环,循环嵌套最核心的作用是()
A. 简化代码书写格式 B. 解决双重维度的重复问题
C. 降低程序运行耗时 D. 统一所有程序结构
二、填空题。
1.循环嵌套中,若外层循环执行 m 次,内层循环执行 n 次,则内层循环体的总执行次数为___________。
2.以下程序片段的输出结果是___________。
int i,j;
for(i=1;i<=2;i++){
for(j=1;j<=i;j++){
printf("%d",j); } }
3.以下程序片段中,会导致死循环的原因是___________。
int i=1,j;
while(i<=3){
for(j=1;j<=2;j++){ }
}
4.循环嵌套中,内层循环的循环体执行完毕后,程序会回到______循环的下一次迭代。
5.以下程序片段的输出结果是___________。
int i,j;
for(i=1;i<=2;i++){
for(j=1;j<=2;j++){
printf("%d",i*j); }
}
6.以下程序片段中,内层循环执行的次数是___________。
int i,j;
for(i=2;i<=3;i++){
for(j=i;j<=3;j++){ }
}
7.双层循环嵌套中,外层循环变量更新语句缺失,会造成___________。
8.代码 for(i=1;i<=4;i++) for(j=i;j<=4;j++) 内层循环总执行次数为___________。
三、阅读程序题。
1.写出下列程序段的输出结果:________________。
#include <stdio.h>
main(){
int i,j;
for(i=1;i<=2;i++)
for(j=1;j<=2;j++)
printf("%d ",i+j);
}
2.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int i,j;
for(i=1;i<=3;i++){
for(j=1;j<=i;j++)
printf("*");
printf("
");
}
}
3.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int i,j;
for(i=3;i>=1;i--){
for(j=1;j<=i;j++)
printf("%d",j);
printf("
"); }
}
4.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int i,j,sum=0;
for(i=1;i<=2;i++)
for(j=1;j<=2;j++)
sum += i*j;
printf("%d",sum);
}
5.写出下列程序段的输出结果:________________。
#include <stdio.h>
main(){
int i,j;
for(i=1;i<=2;i++){
printf("%d:",i);
for(j=1;j<=3;j++)
printf("%d ",j);
printf("
");
}
}
6.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int i=1,j;
do{
for(j=1;j<=2;j++){
printf("%d",i*j); }
i++;
}while(i<=2);
}
7.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{int m = 0,i,j;
for (i = 1; i <= 3; i++) {
for (j = i; j <= 3; j++) {
m += i * j;
}
}
printf("m = %d", m);}
8.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int i, j, flag;
for (i = 4; i <= 25; i++) {
flag = 1;
for (j = 2; j <= i / 2; j++) {
if (i % j == 0)
flag = 0; }
if (flag == 1)
printf("%d ", i); }
}
9.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int i, j;
for (i = 1; i <= 3; i++) {
for (j = 1; j <= 3; j++) {
if (j == 2)
i = 5;
printf("%d", j); }
}
printf("End");}
10.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int i, j, count = 0;
for (i = 2; i <= 5; i++) {
int is_prime = 1;
for (j = 2; j < i; j++) {
if (i % j == 0)
is_prime = 0;
}
if (is_prime == 1)
count++; }
printf("%d", count); }
四、程序填空题(根据题意,将空缺的语句补上)
1.补充以下代码,使其输出九九乘法表:
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
printf("%d×%d=%d ", i, j, ______①______ );
}
______②______;
}
2.使用循环嵌套打印 3 行 3 列的正方形,补充完整程序。
#include <stdio.h>
main(){
int i,j;
for(i=1;___①___;i++){
for(___②___;j<=3;j++){
printf("*");
}
printf("
");
}
}
3.使用循环嵌套计算 1 到 3 的平方和(1²+2²+3²),补充完整程序。
#include <stdio.h>
main(){
int i,j,sum=0;
for(i=1;i<=3;i++){
for(j=1;__①___;j++){
sum += i;
}
}
printf("%d",sum);
}
4.使用循环嵌套打印等腰三角形(3 行),补充完整程序。
#include <stdio.h>
main(){
int i,j;
for(i=1;i<=3;i++){
for(j=3;j>i;j--)
printf(" ");
for(j=1;___①___;j++)
printf("*");
___②___; }
}
5.功能:打印一个 3行4列 的矩阵,其中的数字是斐波那契数列的连续项。
1 1 2 3
5 8 13 21
34 55 89 144
#include <stdio.h>
main() {
int i, j;
int f1 = 1, f2 = 1, next;
for (i = 1; i <= 3; i++) { // 3行
for (j = 1; j <= 4; j++) { // 4列
printf("%d ", f1);
next = ___①___;
f1 = ___②___;
f2 = ___③___; }
printf("
"); } }
三、编程题。
1. 编写程序,不使用数组,输出如下数字金字塔(使用循环嵌套控制输出位置):
1
2 3
4 5 6
7 8 9 10
2.找出100以内的所有素数(质数),每行输出5个。
3.编写程序,计算并输出1到10的阶乘值。
4.编写程序,输出杨辉三角的前n行(n由用户输入,不使用数组存储)。
5.如果A的因子和等于B,且B的因子和等于A,则A,B为亲密数。输入一个范围N,输出N以内的所有的亲密数对。
输入示例:300
输出示例:220 284
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
5.5节:循环的嵌套
一、单项选择题
1.对于如下循环嵌套结构,则内层循环总共执行的次数是( )
int i,j;
for(i=1;i<=3;i++){
for(j=1;j<=2;j++){
printf("*"); } }
A. 3 次 B. 5 次 C. 6 次 D. 2 次
【答案】C
【解析】外层循环执行 1 次,内层循环完整执行一轮(2 次),因此总次数为 3×2=6 次。
2.以下程序片段的输出结果是( )
int i,j;
for(i=1;i<=2;i++){
for(j=1;j<=2;j++){
printf("%d",i+j); } }
A. 2334 B. 1223 C. 3445 D. 2233
【答案】A
【解析】i=1 时,j=1 输出 2,j=2 输出 3;i=2 时,j=1 输出 3,j=2 输出 4,拼接结果为 2334。
3.以下程序片段中,内层循环执行的次数是( )
int i,j;
for(i=1;i<=3;i++){
for(j=3;j>=i;j--){
printf("*"); } }
A. 3 次 B. 6 次 C. 9 次 D. 4 次
【答案】B
【解析】i=1 时,j 从 3 到 1,执行 3 次;i=2 时,j 从 3 到 2,执行 2 次;i=3 时,j 从 3 到 3,执行 1 次;总次数为 3+2+1=6 次。
4.以下代码中,循环体执行的次数是( )
#include <stdio.h>
main() {
int i, j, count = 0;
for (i = 1; i <= 4; i++)
for (j = 1; j <= i / 2 + 1; j++)
count++;
printf("%d", count);
}
A. 6次 B. 8次 C. 10次 D. 12次
【答案】B
【解析】外层循环4次,i=1时内层1次,i=2时内层2次,i=3时内层2次,i=4时内层3次,总次数为1+2+2+3=8次.
5.下列循环嵌套写法中,属于语法非法、绝对不能编译通过的是( )
A. while(){ for(;;){ } } B. for(;;){ do{ }while(); }
C. for(;;{ while(){ } }) D. do{ while(){ } }while();
【答案】C
【解析】C选项括号配对错误,属于交叉畸形嵌套,语法报错,其余均为标准合法嵌套。
6.以下嵌套循环执行完毕后,count的值为( )
int i,j,count=0;
for(i=1;i<=3;i++)
for(j=i;j<=3;j++)
count++;
A. 6 B. 7 C. 8 D. 9
【答案】A
【解析】3+2+1=6次计数,count最终等于6。
7.嵌套循环中,内层循环条件恒假,则整体程序效果为( )
A. 外层循环完全不执行 B. 外层正常迭代,内层无执行
C. 内外层均进入死循环 D. 程序直接编译失败
【答案】B
【解析】内外循环相互独立,内层条件不影响外层循环迭代。
8.对比单层循环,循环嵌套最核心的作用是( )
A. 简化代码书写格式 B. 解决双重维度的重复问题
C. 降低程序运行耗时 D. 统一所有程序结构
【答案】B
【解析】单层循环解决一维重复,嵌套循环解决二维、多维重复逻辑。
二、填空题。
1.循环嵌套中,若外层循环执行 m 次,内层循环执行 n 次,则内层循环体的总执行次数为___________。
【答案】m×n
【解析】外层循环每执行一次,内层循环完整执行一轮。
2.以下程序片段的输出结果是___________。
int i,j;
for(i=1;i<=2;i++){
for(j=1;j<=i;j++){
printf("%d",j); } }
【答案】112
【解析】i=1 时输出 1,i=2 时输出 12,拼接结果为 112。
3.以下程序片段中,会导致死循环的原因是___________。
int i=1,j;
while(i<=3){
for(j=1;j<=2;j++){ }
}
【答案】外层 while 循环的循环变量 i 未更新,循环条件永远成立
【解析】i 始终为 1,i<=3 恒为真,导致死循环。
4.循环嵌套中,内层循环的循环体执行完毕后,程序会回到______循环的下一次迭代。
【答案】外层
【解析】内层循环执行一轮后,外层循环执行下一次迭代。
5.以下程序片段的输出结果是___________。
int i,j;
for(i=1;i<=2;i++){
for(j=1;j<=2;j++){
printf("%d",i*j); }
}
【答案】1224
【解析】i=1 时,j=1 输出 1,j=2 输出 2;i=2 时,j=1 输出 2,j=2 输出 4,拼接结果为 1224。
6.以下程序片段中,内层循环执行的次数是___________。
int i,j;
for(i=2;i<=3;i++){
for(j=i;j<=3;j++){ }
}
【答案】3次
【解析】i=2 时,j 从 2 到 3,执行 2 次;i=3 时,j 从 3 到 3,执行 1 次;总次数为 3 次。
7.双层循环嵌套中,外层循环变量更新语句缺失,会造成___________。
【答案】死循环
【解析】外层变量无更新,循环条件恒成立,触发逻辑死循环。
8.代码 for(i=1;i<=4;i++) for(j=i;j<=4;j++) 内层循环总执行次数为___________。
【答案】10
【解析】4+3+2+1=10次。
三、阅读程序题。
1.写出下列程序段的输出结果:________________。
#include <stdio.h>
main(){
int i,j;
for(i=1;i<=2;i++)
for(j=1;j<=2;j++)
printf("%d ",i+j);
}
【答案】2 3 3 4
2.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int i,j;
for(i=1;i<=3;i++){
for(j=1;j<=i;j++)
printf("*");
printf("
");
}
}
【答案】
*
**
***
3.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int i,j;
for(i=3;i>=1;i--){
for(j=1;j<=i;j++)
printf("%d",j);
printf("
"); }
}
【答案】
123
12
1
4.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int i,j,sum=0;
for(i=1;i<=2;i++)
for(j=1;j<=2;j++)
sum += i*j;
printf("%d",sum);
}
【答案】9
5.写出下列程序段的输出结果:________________。
#include <stdio.h>
main(){
int i,j;
for(i=1;i<=2;i++){
printf("%d:",i);
for(j=1;j<=3;j++)
printf("%d ",j);
printf("
");
}
}
【答案】
1:1 2 3
2:1 2 3
6.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int i=1,j;
do{
for(j=1;j<=2;j++){
printf("%d",i*j); }
i++;
}while(i<=2);
}
【答案】1224
7.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{int m = 0,i,j;
for (i = 1; i <= 3; i++) {
for (j = i; j <= 3; j++) {
m += i * j;
}
}
printf("m = %d", m);}
【答案】m = 25
8.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int i, j, flag;
for (i = 4; i <= 25; i++) {
flag = 1;
for (j = 2; j <= i / 2; j++) {
if (i % j == 0)
flag = 0; }
if (flag == 1)
printf("%d ", i); }
}
【答案】5 7 11 13 17 19 23
9.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int i, j;
for (i = 1; i <= 3; i++) {
for (j = 1; j <= 3; j++) {
if (j == 2)
i = 5;
printf("%d", j); }
}
printf("End");}
【答案】123End
10.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int i, j, count = 0;
for (i = 2; i <= 5; i++) {
int is_prime = 1;
for (j = 2; j < i; j++) {
if (i % j == 0)
is_prime = 0;
}
if (is_prime == 1)
count++; }
printf("%d", count); }
【答案】3
四、程序填空题(根据题意,将空缺的语句补上)
1.补充以下代码,使其输出九九乘法表:
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
printf("%d×%d=%d ", i, j, ______①______ );
}
______②______;
}
【答案】① i * j ② printf("
");
2.使用循环嵌套打印 3 行 3 列的正方形,补充完整程序。
#include <stdio.h>
main(){
int i,j;
for(i=1;___①___;i++){
for(___②___;j<=3;j++){
printf("*");
}
printf("
");
}
}
【答案】①i<=3; ②j=1
3.使用循环嵌套计算 1 到 3 的平方和(1²+2²+3²),补充完整程序。
#include <stdio.h>
main(){
int i,j,sum=0;
for(i=1;i<=3;i++){
for(j=1;__①___;j++){
sum += i;
}
}
printf("%d",sum);
}
【答案】①j<=i
4.使用循环嵌套打印等腰三角形(3 行),补充完整程序。
#include <stdio.h>
main(){
int i,j;
for(i=1;i<=3;i++){
for(j=3;j>i;j--)
printf(" ");
for(j=1;___①___;j++)
printf("*");
___②___; }
}
【答案】①j<=2*i-1; ②printf("
")
5.功能:打印一个 3行4列 的矩阵,其中的数字是斐波那契数列的连续项。
1 1 2 3
5 8 13 21
34 55 89 144
#include <stdio.h>
main() {
int i, j;
int f1 = 1, f2 = 1, next;
for (i = 1; i <= 3; i++) { // 3行
for (j = 1; j <= 4; j++) { // 4列
printf("%d ", f1);
next = ___①___;
f1 = ___②___;
f2 = ___③___; }
printf("
"); } }
【答案】①f1 + f2 ②f2 ③next
三、编程题。
1. 编写程序,不使用数组,输出如下数字金字塔(使用循环嵌套控制输出位置):
1
2 3
4 5 6
7 8 9 10
【参考代码】
#include <stdio.h>
main()
{ int row, col, num = 1, spaces, i;
for (row = 1; row <= 4; row++) {
// 输出空格
for (spaces = 1; spaces <= 4 - row; spaces++)
printf(" ");
// 输出数字
for (col = 1; col <= row; col++) {
printf("%d", num++);
if (col < row) printf(" ");
}
printf("
");
}
}
2.找出100以内的所有素数(质数),每行输出5个。
【参考代码】
#include <stdio.h>
main()
{ int num, i, is_prime, count = 0;
for (num = 2; num <= 100; num++) {
is_prime = 1;
for (i = 2; i * i <= num; i++) {
if (num % i == 0) {
is_prime = 0;
break;
}
}
if (is_prime) {
printf("%-4d", num);
count++;
if (count % 5 == 0) printf("
");
}
}
}
3.编写程序,计算并输出1到10的阶乘值。
【参考代码】
#include <stdio.h>
main()
{
int i, j;
for (i = 1; i <= 10; i++) {
int factorial = 1;
for (j = 1; j <= i; j++)
factorial *= j;
printf("%d! = %d
", i, factorial);
}
}
4.编写程序,输出杨辉三角的前n行(n由用户输入,不使用数组存储)。
【参考代码】
#include <stdio.h>
main()
{
int n, row, col, num = 1, spaces;
printf("请输入杨辉三角的行数: ");
scanf("%d", &n);
for (row = 1; row <= n; row++) {
// 输出空格
for (spaces = 1; spaces <= n - row; spaces++)
printf(" ");
// 输出数字
for (col = 1; col <= row; col++) {
if (col == 1 || col == row)
num = 1;
else
num = num * (row - col + 1) / (col - 1);
printf("%d ", num);
}
printf("
");
}
}
5.如果A的因子和等于B,且B的因子和等于A,则A,B为亲密数。输入一个范围N,输出N以内的所有的亲密数对。
输入示例:300
输出示例:220 284
【参考代码】
#include <stdio.h>
main() {
int n, a, b, i, sum_a, sum_b;
printf("请输入范围 N: ");
scanf("%d", &n);
for (a = 2; a <= n; a++) {
// 1. 计算 a 的因子和
sum_a = 0;
for (i = 1; i < a; i++)
if (a % i == 0)
sum_a += i;
b = sum_a;
// 2. 计算 b 的因子和
if (b > a && b <= n) { // 避免重复输出和越界
sum_b = 0;
for (i = 1; i < b; i++)
if (b % i == 0) sum_b += i;
// 3. 判定
if (sum_b == a)
printf("%d %d
", a, b);
}
}
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$