第5章 第5节:循环的嵌套(练习)-《C语言程序设计》(电子工业出版社)上好课

2026-04-29
| 2份
| 27页
| 36人阅读
| 0人下载

内容正文:

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); } } } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。