第5章 第3节:do……while语句(练习)-《C语言程序设计》(电子工业出版社)上好课

2026-04-30
| 2份
| 22页
| 33人阅读
| 0人下载

内容正文:

5.3节:do……while语句 一、单项选择题 1.有代码int a=1; do{a++;}while(a<5);,该循环体执行次数为( ) A. 3 次 B. 4 次 C. 5 次 D. 0 次 2.以下选项中,属于 do…while 循环合法语法结构的是() A. do {} while (表达式); B. do { } while (表达式) C. do (表达式){ } while; D. while (表达式) do { } 3.代码int x=5; do{x--;}while(x>2);,循环结束后 x 的值为() A. 2 B. 1 C. 3 D. 0 4.执行int m=0; do{m+=2;}while(m<6);,循环一共执行() A. 2 次 B. 3 次 C. 4 次 D. 6 次 5.有定义int n=3; do{}while(n++<7);,循环结束后 n 的值为() A. 7 B. 8 C. 6 D. 9 6.代码int s=1; do{s*=2;}while(s<=8);,循环结束后 s 的值为() A. 8 B. 16 C. 9 D. 4 7.执行int k=10; do{k--;}while(k>=5);,循环执行次数为() A. 4 次 B. 5 次 C. 6 次 D. 7 次 8.代码int b=2; do{b+=3;}while(b<10);,循环结束时 b 为() A. 11 B. 9 C. 10 D. 5 9.设有如下程序段,执行后的输出结果是() int x = -2, y = 0; do {y += x; x--; } while (!x); printf("%d", y); A. -2 B. -3 C. 0 D. 死循环 10.以下程序的运行结果是() int i = 1, s = 0; do {s += i * i; i++; } while (i <= 4); printf("%d", s); A. 10 B. 20 C. 30 D. 14 二、填空题。 1.do…while 语句的关键字 while 末尾必须添加______作为语句结束符。 2.执行代码:int i=5; do{i--;}while(i-->2);,循环结束后变量 i 的值为___________。 3.代码:int a=2; do{a+=a;}while(a<15);,循环体一共执行______次。 4.若do{ }while(!(x>3));,当 x 取值为 5 时,循环条件的值为___________。 5.执行int k=1; do{k=k+2;}while(k<=7);,循环正常结束时,k 的最终数值为___________。 6.代码:int m=8; do{m=m-2;}while(m>=3);,该循环一共执行______次。 7.有语句:int n=0; do{n++;}while(++n<4);,循环结束后 n 的值为___________。 8.执行int s=3; do{s*=s;}while(s<=20);,循环体执行次数为___________。 9.代码:int b=7; do{++b;}while(b<10);,循环结束后 b 的数值为___________。 10.代码:int p=10; do{p--;}while(p%3!=0);,循环结束后 p 的值为___________。 三、阅读程序题。 1.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int n = 123; do { printf("%d", n % 10); n /= 10; } while (n > 0); } 2.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int i = 1, s = 1; do { s *= i; i += 2; } while (i <= 5); printf("%d", s); } 3.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int k = 1, sum = 0; do { if (k % 2 == 0) { sum += k; } k++; } while (k <= 6); printf("%d", sum); } 4.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int m = 2, n = 1; do { n = n * m; m++; } while (m <= 4); printf("%d", n); } 5.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a = 1, b = 1; do { int temp = a + b; a = b; b = temp; } while (b < 10); printf("%d", b); } 6.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a = 1071, b = 462, r; do { r = a % b; a = b; b = r; } while (b != 0); printf("%d", a); } 7.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int n = 17, i = 2; int is_prime = 1; do { if (n % i == 0) { is_prime = 0; break; } i++; } while (i * i <= n); printf("%d", is_prime); } 8.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int n = 100, p = 2, count = 0; do { n /= p; count += n; } while (n >= p); printf("%d", count); } 9.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int low = 1, high = 100, mid, target = 42; int steps = 0; do { mid = (low + high) / 2; steps++; if (mid == target) break; if (mid < target) low = mid + 1; else high = mid - 1; } while (low <= high); printf("%d", steps); } 10.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int n = 153, temp = n, sum = 0, digit; do { digit = temp % 10; sum += digit * digit * digit; temp /= 10; } while (temp > 0); printf("%d", sum == n); } 四、程序填空题(根据题意,将空缺的语句补上) 1.题目:计算正整数的阶乘(n!),假设n已输入且 n≥1。 int n, i = 1; long long fact = 1; scanf("%d", &n); do { fact *= i; i++; } while (__________); printf("%lld", fact); 2.利用辗转相除法求两个正整数 a 和 b的最大公约数。 int a, b, r; scanf("%d%d", &a, &b); do { r = a % b; a = b; b = r; } while (__________); printf("%d", a); 3.判断输入的整数 n是否为素数(假设 n>2)。若是素数,flag 保持 1;否则 flag 变为 0。 int n, i = 2, flag = 1; scanf("%d", &n); do { if (n % i == 0) { flag = 0; break; } i++; } while (__________); printf("%d", flag); 4.题目:将十进制整数 n 转换为二进制并逆序输出(即从低位到高位打印)。 int n; scanf("%d", &n); do { printf("%d", n % 2); n /= 2; } while (__________); 5.题目:计算x的n次幂(n>=0)。 int x, n, i = 0; long long power = 1; scanf("%d%d", &x, &n); do { power *= x; i++; } while (__________); printf("%lld", power); 五、编程题(要求使用do……while语句编写)。 1. 题目:逆序输出正整数。输入一个正整数(如 12345),将其逆序输出(如 54321)。 2.题目:计算最大公约数 输入两个正整数,使用辗转相除法计算它们的最大公约数。 3.题目:统计数字位数。输入一个长整型数,计算它是几位数。 4.题目:水仙花数判断 输入一个三位数,判断它是否为水仙花数(各位数字立方和等于其本身)。 5.题目:完数查找 输入一个正整数 n,判断 n 是否为完数(因子之和等于本身,如 6=1+2+3)。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 5.3节:do……while语句 一、单项选择题 1.有代码int a=1; do{a++;}while(a<5);,该循环体执行次数为( ) A. 3 次 B. 4 次 C. 5 次 D. 0 次 【答案】B 【解析】a 初始 1,依次自增为 2、3、4、5,满足条件执行 4 次。 2.以下选项中,属于 do…while 循环合法语法结构的是( ) A. do {} while (表达式); B. do { } while (表达式) C. do (表达式){ } while; D. while (表达式) do { } 【答案】A 【解析】do…while 末尾必须加分号,为固定语法格式。 3.代码int x=5; do{x--;}while(x>2);,循环结束后 x 的值为( ) A. 2 B. 1 C. 3 D. 0 【答案】A 【解析】x 依次变为 4、3、2,x=2 时条件不成立,循环终止。 4.执行int m=0; do{m+=2;}while(m<6);,循环一共执行( ) A. 2 次 B. 3 次 C. 4 次 D. 6 次 【答案】B 【解析】m 取值 2、4、6,三次执行后条件不满足,循环结束。 5.有定义int n=3; do{}while(n++<7);,循环结束后 n 的值为( ) A. 7 B. 8 C. 6 D. 9 【答案】B 【解析】后置自增先判断再自增,条件不成立后仍会完成一次自增。 6.代码int s=1; do{s*=2;}while(s<=8);,循环结束后 s 的值为( ) A. 8 B. 16 C. 9 D. 4 【答案】B 【解析】s 依次为 2、4、8、16,超出限制后循环停止。 7.执行int k=10; do{k--;}while(k>=5);,循环执行次数为( ) A. 4 次 B. 5 次 C. 6 次 D. 7 次 【答案】C 【解析】k=10/9/8/7/6/5,共执行 6 次,k=4 时终止。 8.代码int b=2; do{b+=3;}while(b<10);,循环结束时 b 为( ) A. 11 B. 9 C. 10 D. 5 【答案】A 【解析】b=5、8、11,第三次执行后条件不成立。 9.设有如下程序段,执行后的输出结果是( ) int x = -2, y = 0; do {y += x; x--; } while (!x); printf("%d", y); A. -2 B. -3 C. 0 D. 死循环 【答案】A 【解析】do...while循环至少执行一次。初始x=-2,y=0。第一次循环:y=0+(-2)=-2,x变为-3。判断while条件!x,即!(-3),-3为非零值,逻辑非后为0(假),循环终止。因此y的最终值为-2。 10.以下程序的运行结果是( ) int i = 1, s = 0; do {s += i * i; i++; } while (i <= 4); printf("%d", s); A. 10 B. 20 C. 30 D. 14 【答案】C 【解析】循环依次计算1²+2²+3²+4²。第一次循环:s=1,i=2;第二次:s=1+4=5,i=3;第三次:s=5+9=14,i=4;第四次:s=14+16=30,i=5。此时i=5>4,循环结束,输出30。 二、填空题。 1.do…while 语句的关键字 while 末尾必须添加______作为语句结束符。 【答案】分号; 2.执行代码:int i=5; do{i--;}while(i-->2);,循环结束后变量 i 的值为___________。 【答案】1 【解析】先执行循环体i=4;判断i-->2(4>2 为真,i 后置自减为 3);继续循环i=2;判断i-->2(2>2 为假,i 后置自减为 1),循环终止。 3.代码:int a=2; do{a+=a;}while(a<15);,循环体一共执行______次。 【答案】3 【解析】第 1 次 a=4,第 2 次 a=8,第 3 次 a=16;16 不满足小于 15,循环结束,共 3 次。 4.若do{ }while(!(x>3));,当 x 取值为 5 时,循环条件的值为___________。 【答案】0 【解析】x>3 为真(非 0),逻辑非!取反,结果为 0(假),循环仅执行一次。 5.执行int k=1; do{k=k+2;}while(k<=7);,循环正常结束时,k 的最终数值为___________。 【答案】9 【解析】k 依次为 3、5、7、9;9>7 条件不成立,循环终止。 6.代码:int m=8; do{m=m-2;}while(m>=3);,该循环一共执行______次。 【答案】3 【解析】m=6、4、2;判断 2>=3 不成立,执行 3 次。 7.有语句:int n=0; do{n++;}while(++n<4);,循环结束后 n 的值为___________。 【答案】4 【解析】前置自增先运算再判断,层层叠加,最终条件不成立后变量持续自增。 8.执行int s=3; do{s*=s;}while(s<=20);,循环体执行次数为___________。 【答案】2 【解析】第一次 s=9,第二次 s=81,超出范围,执行 2 次。 9.代码:int b=7; do{++b;}while(b<10);,循环结束后 b 的数值为___________。 【答案】10 【解析】前置自增,b 依次 8、9、10,10 不满足小于 10,循环停止。 10.代码:int p=10; do{p--;}while(p%3!=0);,循环结束后 p 的值为___________。 【答案】9 【解析】依次递减,直到 p=9,9 对 3 取余为 0,条件为假,循环结束。 三、阅读程序题。 1.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int n = 123; do { printf("%d", n % 10); n /= 10; } while (n > 0); } 【答案】321 2.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int i = 1, s = 1; do { s *= i; i += 2; } while (i <= 5); printf("%d", s); } 【答案】15 3.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int k = 1, sum = 0; do { if (k % 2 == 0) { sum += k; } k++; } while (k <= 6); printf("%d", sum); } 【答案】12 4.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int m = 2, n = 1; do { n = n * m; m++; } while (m <= 4); printf("%d", n); } 【答案】24 5.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a = 1, b = 1; do { int temp = a + b; a = b; b = temp; } while (b < 10); printf("%d", b); } 【答案】13 6.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int a = 1071, b = 462, r; do { r = a % b; a = b; b = r; } while (b != 0); printf("%d", a); } 【答案】21 7.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int n = 17, i = 2; int is_prime = 1; do { if (n % i == 0) { is_prime = 0; break; } i++; } while (i * i <= n); printf("%d", is_prime); } 【答案】1 8.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int n = 100, p = 2, count = 0; do { n /= p; count += n; } while (n >= p); printf("%d", count); } 【答案】97 9.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int low = 1, high = 100, mid, target = 42; int steps = 0; do { mid = (low + high) / 2; steps++; if (mid == target) break; if (mid < target) low = mid + 1; else high = mid - 1; } while (low <= high); printf("%d", steps); } 【答案】7 10.写出下列程序段的输出结果:________________。 #include <stdio.h> main() { int n = 153, temp = n, sum = 0, digit; do { digit = temp % 10; sum += digit * digit * digit; temp /= 10; } while (temp > 0); printf("%d", sum == n); } 【答案】1 四、程序填空题(根据题意,将空缺的语句补上) 1.题目:计算正整数的阶乘(n!),假设n已输入且 n≥1。 int n, i = 1; long long fact = 1; scanf("%d", &n); do { fact *= i; i++; } while (__________); printf("%lld", fact); 【答案】i <= n 2.利用辗转相除法求两个正整数 a 和 b的最大公约数。 int a, b, r; scanf("%d%d", &a, &b); do { r = a % b; a = b; b = r; } while (__________); printf("%d", a); 【答案】b != 0 或 r != 0 3.判断输入的整数 n是否为素数(假设 n>2)。若是素数,flag 保持 1;否则 flag 变为 0。 int n, i = 2, flag = 1; scanf("%d", &n); do { if (n % i == 0) { flag = 0; break; } i++; } while (__________); printf("%d", flag); 【答案】i <= n / 2 或 i * i <= n 4.题目:将十进制整数 n 转换为二进制并逆序输出(即从低位到高位打印)。 int n; scanf("%d", &n); do { printf("%d", n % 2); n /= 2; } while (__________); 【答案】n > 0 5.题目:计算x的n次幂(n>=0)。 int x, n, i = 0; long long power = 1; scanf("%d%d", &x, &n); do { power *= x; i++; } while (__________); printf("%lld", power); 【答案】i < n 五、编程题(要求使用do……while语句编写)。 1. 题目:逆序输出正整数。输入一个正整数(如 12345),将其逆序输出(如 54321)。 【参考代码】 #include <stdio.h> main() { int n, digit; scanf("%d", &n); do { digit = n % 10; printf("%d", digit); n /= 10; } while (n > 0); } 2.题目:计算最大公约数 输入两个正整数,使用辗转相除法计算它们的最大公约数。 【参考代码】 #include <stdio.h> main() { int a, b, r; scanf("%d %d", &a, &b); do { r = a % b; a = b; b = r; } while (b != 0); printf("%d", a); } 3.题目:统计数字位数。输入一个长整型数,计算它是几位数。 【参考代码】 #include <stdio.h> main() { long long n; int count = 0; scanf("%lld", &n); if (n == 0) count = 1; // 特殊情况处理 else { do { n /= 10; count++; } while (n > 0); } printf("%d", count); } 4.题目:水仙花数判断 输入一个三位数,判断它是否为水仙花数(各位数字立方和等于其本身)。 【参考代码】 #include <stdio.h> main() { int n, temp, digit, sum = 0; scanf("%d", &n); temp = n; do { digit = temp % 10; sum += digit * digit * digit; temp /= 10; } while (temp > 0); if (sum == n) printf("Yes"); else printf("No"); } 5.题目:完数查找 输入一个正整数 n,判断 n 是否为完数(因子之和等于本身,如 6=1+2+3)。 【参考代码】 #include <stdio.h> main() { int n, i = 1, sum = 0; scanf("%d", &n); do { if (n % i == 0 && i != n) { sum += i; } i++; } while (i < n); if (sum == n) printf("Yes"); else printf("No"); } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

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