第5章 第7、8、9节:循环结构程序设计应用(练习)-《C语言程序设计》(电子工业出版社)上好课

2026-04-30
| 2份
| 32页
| 47人阅读
| 0人下载

内容正文:

5.7、5.8、5.9节:循环结构程序设计应用 一、单项选择题 1.执行int x=0;for(;x<4;x++);,循环结束后 x 的值为( ) A.0 B.3 C.4 D.5 【答案】C 【解析】空循环执行 4 次,x 自增到 4 后退出循环。 2.执行for(int i=1;i<=3;i++){if(i==2)continue;printf("%d",i);},输出结果是( ) A. 123 B. 13 C. 23 D. 12 【答案】B 【解析】i=2 时执行 continue,跳过输出,仅输出 1、3。 3.设有定义:int i,则以下能实现循环执行 5 次的 for 语句是( ) A. for (int i=0;i<5;i++) B. for (int i=1;i<5;i++) C. for (int i=0;i<=5;i++) D. for (int i=2;i<5;i++) 【答案】A 【解析】i=0~4,共 5 次;其余选项执行次数均不满足。 4.执行int a=0,b=0;while(a<3){a++;b+=a;},b 最终的值是( ) A. 3 B. 4 C. 5 D. 6 【答案】D 【解析】a=1→b=1;a=2→b=3;a=3→b=6,循环结束。 5.执行以下程序段后,变量s的值是( ) int i, s = 0; for(i = 1; i <= 10; i++){ if(i % 3 == 0) continue; if(i % 7 == 0) break; s += i; } A. 1 B. 3 C. 7 D. 12 【答案】D 【解析】​ 循环从1到10,当i为3、6、9时跳过,i为7时终止循环。所以累加1+2+4+5=12,和为12。 6.要使以下代码输出5行"Hello",下划线处应填入( ) int i = 0; do {printf("Hello "); i++; } while(_______); A. i < 5 B. i <= 5 C. i < 4 D. i <= 4 【答案】D 【解析】do-while至少执行一次,i从0开始,执行5次的条件是i<=4,即i=0,1,2,3,4时执行,共5次。 7.以下代码的输出结果是( ) int a = 0, b = 0; while(a < 5){ a++; if(a % 2 == 0) continue; b += a; } printf("%d", b); A. 4 B. 9 C. 16 D. 25 【答案】B 【解析】循环5次(a=1~5),当a为奇数(1,3,5)时累加到b,b=1+3+5=9。 8.以下代码段的功能是( ) int n, m, t, r; scanf("%d%d", &n, &m); if(n < m){ t = n; n = m; m = t; } while(m != 0){ r = n % m;n = m;m = r;} printf("%d", n); A. 求n和m的最小公倍数 B. 求n和m的最大公约数 C. 交换n和m的值 D. 判断n是否能被m整除 【答案】B 【解析】这是辗转相除法(欧几里得算法)求最大公约数的实现。 9.要使k的值最终为10,下划线处应填( ) int i, j, k = 0; for(i = 0; i < 10; i++){ for(______) k++;} A. j = 0; j < 1; j++ B. j = 0; j < i; j++ C. j = i; j < 10; j++ D. j = 0; j < 10; j++ 【答案】A 【解析】外层循环10次,要使k=10,内层每次循环只能执行1次。A选项内层循环j从0到<1,执行1次。 10.以下代码的输出是( ) int i = 1, s = 0; while(i <= 5){ s += i * i; if(s > 20) break; i++;} printf("%d", s); A. 14 B. 30 C. 55 D. 91 【答案】B 【解析】计算平方和:1²=1, 2²=4(和5), 3²=9(和14), 4²=16(和30), 此时s=30>20,break,输出30。 二、填空题。 1.int i=1;while(i<=4)i++; 循环执行次数为___________。 【答案】4 【解析】i=1、2、3、4 时执行,共 4 次。 2.for(int i=1;i<=5;i++){if(i==3)continue;printf("%d",i);} 输出结果为___________。 【答案】1245 【解析】i=3 跳过输出,其余数字正常打印。 3.int x=5;do{x--;}while(x>3); 循环结束后 x=___________。 【答案】3 【解析】x 依次 4→3,3 不满足 x>3,循环结束。 4.嵌套循环for(i=1;i<=3;i++)for(j=1;j<=2;j++) 内层总执行次数___________。 【答案】6 【解析】3×2=6 次。 5.for(int i=2;i<10;i+=3) 循环中 i 的取值为___________。 【答案】2、5、8 【解析】步长为 3,i=2→5→8,11 退出循环。 6.int a=6;while(a>2)a-=2; 循环执行次数___________。 【答案】2 【解析】a=6→4→2,执行 2 次后退出。 7.int k=0;for(;k<3;k++); 空循环结束后 k=___________。 【答案】3 【解析】循环执行 3 次,k 自增到 3。 8.int m=0;while(m<5){if(m%2==1)break;m++;} 循环结束后 m=___________。 【答案】1 【解析】m=0→m=1,满足 break 条件,终止循环。 9.int x=1,y=0;while(x<=4){y+=x;x++;} y 最终值___________。 【答案】10 【解析】1+2+3+4=10。 10.int a=3;while(a) 循环条件等价于___________。 【答案】a!=0 【解析】非 0 值为真,a=0 时条件为假。 三、阅读程序题。 1.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int i, j; for (i = 1; i <= 3; i++) { for (j = 1; j <= 3; j++) { if ((i + j) % 2 == 0) printf("1"); else printf("0"); } printf(" "); } } 【答案】 101 010 101 2.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int n = 1; do { int m = 1; while (m <= 3) { if (n + m == 4) { m++; continue; } if (n == 2 && m == 1) { n++; break; } printf("%d", n + m); m++; } n++; } while (n <= 3); } 【答案】23 3.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int x = 0,y; for (; x < 5; x++) { if (x == 1) { for (y = 0; y < 2; y++) { if (y == 1) break; printf("X"); } continue; } if (x == 3) break; printf("%d", x); } printf("END"); } 【答案】0X2END 4.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int i, j, n = 4; for(i = 1; i <= n; i++){ for(j = 1; j <= n; j++){ if(i + j <= n + 1) printf("*"); else printf(" "); } printf(" "); } } 【答案】 **** *** ** * 5.写出下列程序段的输出结果:________________。 #include <stdio.h> main(){ int i, j; for(i = 1; i <= 4; i++){ for(j = 1; j <= 5; j++){ if(i == 3 && j == 3) break; printf("%d ", i*j); } printf(" "); } } 【答案】 1 2 3 4 5 2 4 6 8 10 3 6 4 8 12 16 20 6.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int i, s = 0; for(i = 1; i <= 10; i++){ s += i*i; if(s > 50) break; } printf("i=%d,s=%d", i, s); } 【答案】i=5,s=55 7.写出下列程序段的输出结果:________________。 #include <stdio.h> main(){ int x = 12321, t = 0, y = 0, z = x; while(x > 0){ t = x % 10; y = y * 10 + t; x /= 10; } if(z == y) printf("Yes"); else printf("No"); } 【答案】Yes 8.写出下列程序段的输出结果:________________。 #include <stdio.h> main(){ int m = 5, n = 0; while(m > 0){ switch(m){ case 5: n += 2; break; case 4: n += 3; case 3: n += 4; break; case 2: n += 5; default: n += 6; } m--; } printf("n=%d", n); } 【答案】n=30 9.写出下列程序段的输出结果:________________。 #include <stdio.h> main(){ int a = 0, b = 1, c, i; printf("%d %d ", a, b); for(i = 3; i <= 8; i++){ c = a + b; printf("%d ", c); a = b; b = c; } } 【答案】0 1 1 2 3 5 8 13 10.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int i, j, k = 0; for (i = 1; i <= 3; i++) { for (j = 1; j <= 3; j++) { if (i == 2 && j == 2) { k++; continue; } k++; } } printf("%d", k);} 【答案】9 四、程序填空题(根据题意,将空缺的语句补上) 1.找出 1000 以内的“完全数”(完全数等于其所有真因子之和,如 6=1+2+3 )。 #include <stdio.h> main() { int n, i, sum; for (n = 2; n <= 1000; n++) { sum = 0; for (i = 1; ___①___; i++) { if (___②___) sum += i; } if (___③___) printf("%d ", n); }} 【答案】①i < n ②n % i == 0 ③sum == n 2.求 S=a+aa+aaa+aaaa+... 的值。例如 2+22+222+2222 。假设求前 5 项和,a=2。 #include <stdio.h> main() { int i, j; int a = 2, n = 5; long long sum = 0; long long term = 0; // 当前项的值 for (i = 1; i <= n; i++) { term = 0; for (j = 1; j <= i; j++) term = ___①___; sum = ___②___; } printf("%lld", sum); } 【答案】①term * 10 + a ②sum + term 3.打印由星号组成的沙漏形状。 ***** *** * *** ***** #include <stdio.h> #include <stdlib.h> main() { int i, j, n = 3; for (i = 0; i < n; i++) { for (j = 0; j < i; j++) printf(" "); for (j = 0; j < ___①___; j++) printf("*"); printf(" "); } for (i = n - 2; i >= 0; i--) { for (j = 0; j < i; j++) printf(" "); for (j = 0; j < ___②___; j++) printf("*"); printf(" "); } } 【答案】①2 * (n - i) - 1 ②2 * (n - i) - 1 4.以下程序的功能是判断输入的数是否为素数。 #include <stdio.h> main() { int n, i, flag = 1; scanf("%d", &n); for(i = 2; i <= n/2; i++){ if(___①___){ flag = 0; break; } } if(flag && n > 1) printf("Yes"); else printf("No"); } 【答案】①n % i == 0 5.以下程序的功能是验证哥德巴赫猜想:大于2的偶数可表示为两素数之和。 #include <stdio.h> main() { int n, i, j, flag1, flag2, k; scanf("%d", &n); // n为偶数 for(i = 2; i <= n/2; i++){ _______①_______; for(k = 2; k <= i/2; k++){ if(i % k == 0){ flag1 = 0; break; } } if(flag1){ j = n - i; flag2 = 1; for(k = 2; k <= j/2; k++){ if(_____②______){ flag2 = 0; break; } } if(______③_____) printf("%d = %d + %d ", n, i, j); } } } 【答案】①flag1 = 1 ②j % k == 0 ③flag2 五、编程题。 1. 编写程序,输出指定行数的空心菱形图案(例如输入5行,输出如下图案)。 * * * * * * * * 【参考代码】 #include <stdio.h> main() { int rows = 5, i, j, spaces; // 输出上半部分 for (i = 1; i <= rows / 2 + 1; i++) { for (spaces = 1; spaces <= rows / 2 - i + 1; spaces++) { printf(" "); } for (j = 1; j <= 2 * i - 1; j++) { if (j == 1 || j == 2 * i - 1) printf("*"); else printf(" "); } printf(" "); } // 输出下半部分 for (i = rows / 2; i >= 1; i--) { for (spaces = 1; spaces <= rows / 2 - i + 1; spaces++) printf(" "); for (j = 1; j <= 2 * i - 1; j++) { if (j == 1 || j == 2 * i - 1) printf("*"); else printf(" "); } printf(" "); } } 2.编写程序,输出指定行数的空心三角形(例如输入5行,输出如下图案)。 * * * * * * * ********* 【参考代码】 #include <stdio.h> main() { int rows = 5, i, j, spaces; for (i = 1; i <= rows; i++) { // 输出空格 for (spaces = 1; spaces <= rows - i; spaces++) printf(" "); // 输出星号 for (j = 1; j <= 2 * i - 1; j++) { if (i == rows || j == 1 || j == 2 * i - 1) printf("*"); else printf(" "); } printf(" "); } } 3.编写程序,输出100以内所有能被7整除或包含数字7的数。 【参考代码】 #include <stdio.h> main(){ int i; for(i = 1; i <= 100; i++){ if(i % 7 == 0 || i % 10 == 7 || i / 10 == 7) printf("%d ", i); } } 4.编写程序,输入一个整数,将它逆序输出。例如输入12345,输出54321。 【参考代码】 #include <stdio.h> main(){ int n, digit; scanf("%d", &n); if(n < 0){ printf("-"); n = -n; } while(n > 0){ digit = n % 10; printf("%d", digit); n /= 10; } } 5.编写程序,输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数(以回车结束输入)。 【参考代码】 #include <stdio.h> main(){ char ch; int letters = 0, digits = 0, spaces = 0, others = 0; while((ch = getchar()) != ' '){ if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) letters++; else if(ch >= '0' && ch <= '9') digits++; else if(ch == ' ') spaces++; else others++; } printf("letters=%d, digits=%d, spaces=%d, others=%d", letters, digits, spaces, others); } 6.编写程序,用迭代法求a的平方根。求平方根的迭代公式为:x_{n+1} = (x_n + a/x_n)/2,要求前后两次求出的x的差的绝对值小于10^{-5}。 【参考代码】 #include <stdio.h> #include <math.h> main(){ double a, x0, x1; scanf("%lf", &a); if(a < 0) return 0; x0 = a / 2; x1 = (x0 + a / x0) / 2; while(fabs(x1 - x0) >= 1e-5){ x0 = x1; x1 = (x0 + a / x0) / 2; } printf("sqrt(%.2f)=%.5f", a, x1); } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 5.7、5.8、5.9节:循环结构程序设计应用 一、单项选择题 1.执行int x=0;for(;x<4;x++);,循环结束后 x 的值为( ) A.0 B.3 C.4 D.5 2.执行for(int i=1;i<=3;i++){if(i==2)continue;printf("%d",i);},输出结果是() A. 123 B. 13 C. 23 D. 12 3.设有定义:int i,则以下能实现循环执行 5 次的 for 语句是() A. for (int i=0;i<5;i++) B. for (int i=1;i<5;i++) C. for (int i=0;i<=5;i++) D. for (int i=2;i<5;i++) 4.执行int a=0,b=0;while(a<3){a++;b+=a;},b 最终的值是() A. 3 B. 4 C. 5 D. 6 5.执行以下程序段后,变量s的值是() int i, s = 0; for(i = 1; i <= 10; i++){ if(i % 3 == 0) continue; if(i % 7 == 0) break; s += i; } A. 1 B. 3 C. 7 D. 12 6.要使以下代码输出5行"Hello",下划线处应填入() int i = 0; do {printf("Hello "); i++; } while(_______); A. i < 5 B. i <= 5 C. i < 4 D. i <= 4 7.以下代码的输出结果是() int a = 0, b = 0; while(a < 5){ a++; if(a % 2 == 0) continue; b += a; } printf("%d", b); A. 4 B. 9 C. 16 D. 25 8.以下代码段的功能是() int n, m, t, r; scanf("%d%d", &n, &m); if(n < m){ t = n; n = m; m = t; } while(m != 0){ r = n % m;n = m;m = r;} printf("%d", n); A. 求n和m的最小公倍数 B. 求n和m的最大公约数 C. 交换n和m的值 D. 判断n是否能被m整除 9.要使k的值最终为10,下划线处应填() int i, j, k = 0; for(i = 0; i < 10; i++){ for(______) k++;} A. j = 0; j < 1; j++ B. j = 0; j < i; j++ C. j = i; j < 10; j++ D. j = 0; j < 10; j++ 10.以下代码的输出是() int i = 1, s = 0; while(i <= 5){ s += i * i; if(s > 20) break; i++;} printf("%d", s); A. 14 B. 30 C. 55 D. 91 二、填空题。 1.int i=1;while(i<=4)i++; 循环执行次数为___________。 2.for(int i=1;i<=5;i++){if(i==3)continue;printf("%d",i);} 输出结果为___________。 3.int x=5;do{x--;}while(x>3); 循环结束后 x=___________。 4.嵌套循环for(i=1;i<=3;i++)for(j=1;j<=2;j++) 内层总执行次数___________。 5.for(int i=2;i<10;i+=3) 循环中 i 的取值为___________。 6.int a=6;while(a>2)a-=2; 循环执行次数___________。 7.int k=0;for(;k<3;k++); 空循环结束后 k=___________。 8.int m=0;while(m<5){if(m%2==1)break;m++;} 循环结束后 m=___________。 9.int x=1,y=0;while(x<=4){y+=x;x++;} y 最终值___________。 10.int a=3;while(a) 循环条件等价于___________。 三、阅读程序题。 1.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int i, j; for (i = 1; i <= 3; i++) { for (j = 1; j <= 3; j++) { if ((i + j) % 2 == 0) printf("1"); else printf("0"); } printf(" "); } } 2.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int n = 1; do { int m = 1; while (m <= 3) { if (n + m == 4) { m++; continue; } if (n == 2 && m == 1) { n++; break; } printf("%d", n + m); m++; } n++; } while (n <= 3); } 3.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int x = 0,y; for (; x < 5; x++) { if (x == 1) { for (y = 0; y < 2; y++) { if (y == 1) break; printf("X"); } continue; } if (x == 3) break; printf("%d", x); } printf("END"); } 4.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int i, j, n = 4; for(i = 1; i <= n; i++){ for(j = 1; j <= n; j++){ if(i + j <= n + 1) printf("*"); else printf(" "); } printf(" "); } } 5.写出下列程序段的输出结果:________________。 #include <stdio.h> main(){ int i, j; for(i = 1; i <= 4; i++){ for(j = 1; j <= 5; j++){ if(i == 3 && j == 3) break; printf("%d ", i*j); } printf(" "); } } 6.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int i, s = 0; for(i = 1; i <= 10; i++){ s += i*i; if(s > 50) break; } printf("i=%d,s=%d", i, s); } 7.写出下列程序段的输出结果:________________。 #include <stdio.h> main(){ int x = 12321, t = 0, y = 0, z = x; while(x > 0){ t = x % 10; y = y * 10 + t; x /= 10; } if(z == y) printf("Yes"); else printf("No"); } 8.写出下列程序段的输出结果:________________。 #include <stdio.h> main(){ int m = 5, n = 0; while(m > 0){ switch(m){ case 5: n += 2; break; case 4: n += 3; case 3: n += 4; break; case 2: n += 5; default: n += 6; } m--; } printf("n=%d", n); } 9.写出下列程序段的输出结果:________________。 #include <stdio.h> main(){ int a = 0, b = 1, c, i; printf("%d %d ", a, b); for(i = 3; i <= 8; i++){ c = a + b; printf("%d ", c); a = b; b = c; } } 10.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int i, j, k = 0; for (i = 1; i <= 3; i++) { for (j = 1; j <= 3; j++) { if (i == 2 && j == 2) { k++; continue; } k++; } } printf("%d", k);} 四、程序填空题(根据题意,将空缺的语句补上) 1.找出 1000 以内的“完全数”(完全数等于其所有真因子之和,如 6=1+2+3 )。 #include <stdio.h> main() { int n, i, sum; for (n = 2; n <= 1000; n++) { sum = 0; for (i = 1; ___①___; i++) { if (___②___) sum += i; } if (___③___) printf("%d ", n); }} 2.求 S=a+aa+aaa+aaaa+... 的值。例如 2+22+222+2222 。假设求前 5 项和,a=2。 #include <stdio.h> main() { int i, j; int a = 2, n = 5; long long sum = 0; long long term = 0; // 当前项的值 for (i = 1; i <= n; i++) { term = 0; for (j = 1; j <= i; j++) term = ___①___; sum = ___②___; } printf("%lld", sum); } 3.打印由星号组成的沙漏形状。 ***** *** * *** ***** #include <stdio.h> #include <stdlib.h> main() { int i, j, n = 3; for (i = 0; i < n; i++) { for (j = 0; j < i; j++) printf(" "); for (j = 0; j < ___①___; j++) printf("*"); printf(" "); } for (i = n - 2; i >= 0; i--) { for (j = 0; j < i; j++) printf(" "); for (j = 0; j < ___②___; j++) printf("*"); printf(" "); } } 4.以下程序的功能是判断输入的数是否为素数。 #include <stdio.h> main() { int n, i, flag = 1; scanf("%d", &n); for(i = 2; i <= n/2; i++){ if(___①___){ flag = 0; break; } } if(flag && n > 1) printf("Yes"); else printf("No"); } 5.以下程序的功能是验证哥德巴赫猜想:大于2的偶数可表示为两素数之和。 #include <stdio.h> main() { int n, i, j, flag1, flag2, k; scanf("%d", &n); // n为偶数 for(i = 2; i <= n/2; i++){ _______①_______; for(k = 2; k <= i/2; k++){ if(i % k == 0){ flag1 = 0; break; } } if(flag1){ j = n - i; flag2 = 1; for(k = 2; k <= j/2; k++){ if(_____②______){ flag2 = 0; break; } } if(______③_____) printf("%d = %d + %d ", n, i, j); } } } 五、编程题。 1. 编写程序,输出指定行数的空心菱形图案(例如输入5行,输出如下图案)。 * * * * * * * * 2.编写程序,输出指定行数的空心三角形(例如输入5行,输出如下图案)。 * * * * * * * ********* 3.编写程序,输出100以内所有能被7整除或包含数字7的数。 4.编写程序,输入一个整数,将它逆序输出。例如输入12345,输出54321。 5.编写程序,输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数(以回车结束输入)。 6.编写程序,用迭代法求a的平方根。求平方根的迭代公式为:x_{n+1} = (x_n + a/x_n)/2,要求前后两次求出的x的差的绝对值小于10^{-5}。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

第5章 第7、8、9节:循环结构程序设计应用(练习)-《C语言程序设计》(电子工业出版社)上好课
1
第5章 第7、8、9节:循环结构程序设计应用(练习)-《C语言程序设计》(电子工业出版社)上好课
2
第5章 第7、8、9节:循环结构程序设计应用(练习)-《C语言程序设计》(电子工业出版社)上好课
3
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。