内容正文:
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");
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$