内容正文:
5.1与5.2节:循环的概念与while语句
一、单项选择题
1.下列关于循环结构的描述中,正确的是( )
A. 循环结构只能处理固定次数的重复操作
B. 循环结构是程序中实现重复执行某段代码的控制结构
C. C 语言中循环结构的执行顺序一定是先执行循环体再判断条件
D. 循环结构中不能嵌套其他控制语句
【答案】B
【解析】循环结构是实现重复执行代码的控制结构,可处理固定或不固定次数的重复操作;while 循环是先判断条件再执行循环体;循环结构中可嵌套其他控制语句。
2.若int i = 1; while(i < 5) {i++;},则循环体执行的次数是( )
A. 3 次 B. 4 次 C. 5 次 D. 6 次
【答案】B
【解析】初始 i=1,循环条件 i<5 成立,执行循环体 i++,依次 i=2、3、4、5,共执行 4 次循环体,当 i=5 时条件不成立,循环结束。
3.下列 while 循环中,属于死循环的是( )
A. int i=0; while(i<3) {i++;} B. int i=1; while(i>0) {i--;}
C. int i=1; while(1) {break;} D. int i=0; while(1) {i++;}
【答案】D
【解析】D 选项中 while 条件恒为 1(真),且循环体内无 break 语句,会一直执行循环体,属于死循环;C 选项中 break 语句会终止循环,不是死循环。
4.执行int i=3; while(i-- > 0) printf("%d", i);的输出结果是( )
A. 321 B. 210 C. 3210 D. 21
【答案】B
【解析】初始 i=3,判断 i-- > 0(先判断 i>0,再 i 自减):3>0 成立,i 变为 2,输出 2;2>0 成立,i 变为 1,输出 1;1>0 成立,i 变为 0,输出 0;0>0 不成立,循环结束,输出 210。
5.若int a=5; while(a>0) {printf("%d", a); a-=2;},则循环体执行的次数是( )
A. 2 次 B. 3 次 C. 4 次 D. 5 次
【答案】B
【解析】 初始 a=5,a>0 成立,输出 5,a=3;a=3>0 成立,输出 3,a=1;a=1>0 成立,输出 1,a=-1;a=-1>0 不成立,循环结束,共执行 3 次。
6.若int i=0; while(i<3) {i++;},下列说法正确的是( )
A. 循环体执行 3 次,结束后 i 的值为 3
B. 循环体执行 2 次,结束后 i 的值为 3
C. 循环体执行 3 次,结束后 i 的值为 2
D. 循环体执行 2 次,结束后 i 的值为 2
【答案】A
【解析】 i 从 0 开始,依次执行 i=0→1、1→2、2→3,共 3 次循环体,结束时 i=3,条件不成立。
7.执行int x=0; while(!x) {x++; printf("%d", x);}的输出结果是( )
A. 1 B. 0 C. 无输出 D. 死循环输出 111…
【答案】A
【解析】初始 x=0,!x 为真,执行循环体 x++(x=1),输出 1;再次判断!x 为!1=0(假),循环结束,输出 1。
8.若int n=10; while(n>5) {n--;},循环结束后 n 的值是( )
A. 4 B. 5 C. 6 D. 9
【答案】B
【解析】n 从 10 开始递减,当 n=6 时,执行 n-- 后 n=5,此时判断 n>5 不成立,循环结束,n=5。
9.执行int a=1, b=3; while(a<b) {a++; b--;},循环结束后 a 和 b 的值分别是( )
A. a=2, b=2 B. a=3, b=1 C. a=1, b=3 D. a=2, b=1
【答案】A
【解析】初始 a=1,b=3,a<b 成立,a=2,b=2;再次判断 a<b 不成立,循环结束,a=2,b=2。
10.若int i=5; while(i>0) {printf("%d", i); i-=2;},则输出结果是( )
A. 531 B. 53 C. 31 D. 5
【答案】A
【解析】i=5>0,输出 5,i=3;i=3>0,输出 3,i=1;i=1>0,输出 1,i=-1;循环结束,输出 531。
二、填空题。
1.C 语言中,while 循环的控制条件表达式的值为______时,执行循环体;值为______时,结束循环。
【答案】非零(或真);零(或假)
【解析】C 语言中,非零值代表逻辑真,零值代表逻辑假,while 循环根据条件表达式的真假决定是否执行循环体。
2.若int i=0; while(i<5) {i++;},循环结束后 i 的值为___________。
【答案】5
【解析】 i 从 0 开始递增,当 i=5 时,条件 i<5 不成立,循环结束,i 的值为 5。
3.执行int sum=0, i=1; while(i<=3) {sum += i; i++;},sum 的值为___________。
【答案】6
【解析】循环体依次执行 sum=1(i=1)、sum=3(i=2)、sum=6(i=3),i=4 时条件不成立,sum=1+2+3=6。
4.若int a=10; while(a>0) {a -= 3;},循环体执行的次数是______次。
【答案】4
【解析】 a=10→7→4→1→-2,依次执行 4 次循环体,当 a=-2 时条件 a>0 不成立,循环结束。
5.while 循环的一般格式为:while(______) {循环体语句}。
【答案】表达式(或条件表达式)
【解析】while 循环的语法格式中,括号内必须是合法的表达式,作为循环的控制条件。
6.执行int x=3; while(x--) {;},循环结束后 x 的值为___________。
【答案】-1
【解析】x=3 时,x-- 为 3(真),x=2;x=2→1,x=1→0,x=0 时 x-- 为 0(假),x=-1,循环结束,x=-1。
7.执行int n=5; while(n) {printf("%d", n); n--;},输出结果为___________。
【答案】54321
【解析】 n 从 5 递减到 1,每次条件 n 为非零(真),输出 n,n=0 时条件为假,循环结束,输出 54321。
8.若int i=1; while(i<4) {printf("%d", i); i+=2;},循环体执行______次,输出结果为___________。
【答案】2;13
【解析】 i=1<4 成立,输出 1,i=3;i=3<4 成立,输出 3,i=5;i=5<4 不成立,循环结束,执行 2 次,输出 13。
9.执行int a=2, b=4; while(a<b) {a++; b--;},循环结束后 a 的值为______,b 的值为______。
【答案】3;3
【解析】初始 a=2,b=4,a<b 成立,a=3,b=3;再次判断 a<b 不成立,循环结束,a=3,b=3。
10.执行int sum=0; int i=5; while(i>0) {sum += i; i--;},sum 的值为___________。
【答案】15
【解析】sum=5+4+3+2+1=15,循环结束后 sum=15。
三、阅读程序题。
1.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int i = 1;
while(i <= 3) {
printf("%d ", i);
i++; }
}
【答案】1 2 3
2.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int a = 5;
while(a > 0) {
printf("%d ", a);
a -= 2; }
}
【答案】5 3 1
3.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int sum = 0;
int i = 0;
while(i < 5) {
if(i % 2 == 0)
sum += i;
i++; }
printf("sum=%d", sum); }
【答案】sum=6
4.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int a = 6;
while(a % 2 == 0) {
printf("%d ", a);
a /= 2; }
}
【答案】6 3
5.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int m = 7;
while(m % 3 != 0)
{ m--; }
printf("%d",m);}
【答案】6
6.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int x = 4;
while(!(x <= 6))
{ x++; }
printf("%d",x);
}
【答案】4
7.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int p = 12;
while(p > 5)
{ if(p % 4 == 0)
{ p = p / 4; }
p--; }
printf("%d",p);
}
【答案】5
8.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int a = 1, b = 1, c, i = 3;
while (i <= 5) {
c = a + b;
a = b;
b = c;
i++; }
printf("%d", b); }
【答案】5
9.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int n = 100;
while (n > 10)
n = n % 10 + n / 10;
printf("%d", n);
}
【答案】10
10.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int n = 8;
int count = 0;
while (n) {
n = n >> 1;
count++; }
printf("%d", count); }
【答案】4
四、程序填空题(根据题意,将空缺的语句补上)
1.下列程序的功能是计算 1~3 的阶乘(1!、2!、3!),请补充完整:
#include <stdio.h>
main() {
int n = 1;
int fact = 1;
while(n <= 3) {
fact *= n;
printf("%d! = %d
", n, fact);
______; }
}
【答案】n++(或 n += 1)
2.下列程序的功能是输出 2、4、6(1~6 中的偶数),请补充完整:
#include <stdio.h>
main() {
int i = 2;
while(i <= 6) {
printf("%d ", i);
______;
}
}
【答案】i += 2(或 i = i + 2)
3.下列程序的功能是:找出 10 以内第一个能被 4 整除的正整数
#include <stdio.h>
main()
{ int i = 1;
while(i <= 10)
{
if(__________)
break;
i++;
}
printf("%d",i);
}
【答案】i % 4 == 0
4.程序的功能是:求 1-1/2+1/3...-1/100 的值。
int i = 1;
double sum = 0.0;
int sign = 1;
while (i <= 100) {
sum += sign * (1.0 / i);
______;
i++;
}
【答案】sign = -sign
5.下列程序的功能:寻找水仙花数(三位数)。
#include <stdio.h>
main()
{ int i = 100, a, b, c;
while (i < 1000) {
a = i / 100;
b = (i / 10) % 10;
c = i % 10;
if (______)
printf("%d", i);
i++; }
}
【答案】a*a*a + b*b*b + c*c*c == i
五、编程题。
1. 编写程序,使用 while 循环统计用户输入的一串字符中元音字母(a、e、i、o、u,不区分大小写)的个数,以换行符结束输入。
【参考代码】
#include <stdio.h>
main() {
char ch;
int count = 0;
printf("请输入一串字符(以换行结束):");
ch = getchar();
while(ch != '
') {
if(ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u'
|| ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U')
count++;
ch = getchar();
}
printf("元音字母的个数为:%d", count); }
2.编写程序,使用 while 循环计算 1~n 中所有奇数的和(n 由用户输入,如 n=5 时输出 9)。
【参考代码】
#include <stdio.h>
main() {
int n, sum = 0;
int i = 1;
printf("请输入一个正整数n:");
scanf("%d", &n);
while(i <= n) {
if(i % 2 != 0)
sum += i;
i++;
}
printf("1~n中所有奇数的和为:%d", sum);
}
3.输入若干整数,以正数结束输入,使用 while 循环统计一共输入了多少个负数。
【参考代码】
#include <stdio.h>
main()
{ int num,cnt=0;
scanf("%d",&num);
while(num <= 0)
{
if(num < 0)
cnt++;
scanf("%d",&num);
}
printf("负数个数:%d",cnt);
}
4.猴子采摘了若干个桃子,每天都会吃掉一部分桃子。
规律如下:
每天吃掉当天现有桃子数量的一半,并且额外再多吃 1 个。
猴子连续吃了 9 天,到第 10 天清晨时,发现只剩下 1 个桃子。
请利用 while 循环 编写程序,逆向推算并输出猴子第一天一共摘下多少个桃子。
【参考代码】
#include <stdio.h>
main() {
int day = 9; // 从第1天推到第9天(第10天已知)
int peaches = 1; // 第10天的数量
while (day > 0) {
peaches = (peaches + 1) * 2;
day--;
}
printf("%d", peaches);
}
5.编程实现:输入两个正整数,求出两个数的最大公约数和最小公倍数。
【参考代码】
#include <stdio.h>
main() {
int a, b, temp, original_a, original_b;
scanf("%d %d", &a, &b);
original_a = a;
original_b = b;
// 辗转相除法
while (b != 0) {
temp = a % b;
a = b;
b = temp; }
// 此时a为最大公约数
int lcm = (original_a * original_b) / a;
printf("GCD: %d, LCM: %d", a, lcm);
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
5.1与5.2节:循环的概念与while语句
一、单项选择题
1.下列关于循环结构的描述中,正确的是( )
A. 循环结构只能处理固定次数的重复操作
B. 循环结构是程序中实现重复执行某段代码的控制结构
C. C 语言中循环结构的执行顺序一定是先执行循环体再判断条件
D. 循环结构中不能嵌套其他控制语句
2.若int i = 1; while(i < 5) {i++;},则循环体执行的次数是()
A. 3 次 B. 4 次 C. 5 次 D. 6 次
3.下列 while 循环中,属于死循环的是()
A. int i=0; while(i<3) {i++;} B. int i=1; while(i>0) {i--;}
C. int i=1; while(1) {break;} D. int i=0; while(1) {i++;}
4.执行int i=3; while(i-- > 0) printf("%d", i);的输出结果是()
A. 321 B. 210 C. 3210 D. 21
5.若int a=5; while(a>0) {printf("%d", a); a-=2;},则循环体执行的次数是()
A. 2 次 B. 3 次 C. 4 次 D. 5 次
6.若int i=0; while(i<3) {i++;},下列说法正确的是()
A. 循环体执行 3 次,结束后 i 的值为 3
B. 循环体执行 2 次,结束后 i 的值为 3
C. 循环体执行 3 次,结束后 i 的值为 2
D. 循环体执行 2 次,结束后 i 的值为 2
7.执行int x=0; while(!x) {x++; printf("%d", x);}的输出结果是()
A. 1 B. 0 C. 无输出 D. 死循环输出 111…
8.若int n=10; while(n>5) {n--;},循环结束后 n 的值是()
A. 4 B. 5 C. 6 D. 9
9.执行int a=1, b=3; while(a<b) {a++; b--;},循环结束后 a 和 b 的值分别是()
A. a=2, b=2 B. a=3, b=1 C. a=1, b=3 D. a=2, b=1
10.若int i=5; while(i>0) {printf("%d", i); i-=2;},则输出结果是()
A. 531 B. 53 C. 31 D. 5
二、填空题。
1.C 语言中,while 循环的控制条件表达式的值为______时,执行循环体;值为______时,结束循环。
2.若int i=0; while(i<5) {i++;},循环结束后 i 的值为___________。
3.执行int sum=0, i=1; while(i<=3) {sum += i; i++;},sum 的值为___________。
4.若int a=10; while(a>0) {a -= 3;},循环体执行的次数是______次。
5.while 循环的一般格式为:while(______) {循环体语句}。
6.执行int x=3; while(x--) {;},循环结束后 x 的值为___________。
7.执行int n=5; while(n) {printf("%d", n); n--;},输出结果为___________。
8.若int i=1; while(i<4) {printf("%d", i); i+=2;},循环体执行______次,输出结果为___________。
9.执行int a=2, b=4; while(a<b) {a++; b--;},循环结束后 a 的值为______,b 的值为______。
10.执行int sum=0; int i=5; while(i>0) {sum += i; i--;},sum 的值为___________。
三、阅读程序题。
1.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int i = 1;
while(i <= 3) {
printf("%d ", i);
i++; }
}
2.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int a = 5;
while(a > 0) {
printf("%d ", a);
a -= 2; }
}
3.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int sum = 0;
int i = 0;
while(i < 5) {
if(i % 2 == 0)
sum += i;
i++; }
printf("sum=%d", sum); }
4.写出下列程序段的输出结果:________________。
#include <stdio.h>
main() {
int a = 6;
while(a % 2 == 0) {
printf("%d ", a);
a /= 2; }
}
5.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int m = 7;
while(m % 3 != 0)
{ m--; }
printf("%d",m);}
6.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int x = 4;
while(!(x <= 6))
{ x++; }
printf("%d",x);
}
7.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int p = 12;
while(p > 5)
{ if(p % 4 == 0)
{ p = p / 4; }
p--; }
printf("%d",p);
}
8.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int a = 1, b = 1, c, i = 3;
while (i <= 5) {
c = a + b;
a = b;
b = c;
i++; }
printf("%d", b); }
9.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int n = 100;
while (n > 10)
n = n % 10 + n / 10;
printf("%d", n);
}
10.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int n = 8;
int count = 0;
while (n) {
n = n >> 1;
count++; }
printf("%d", count); }
四、程序填空题(根据题意,将空缺的语句补上)
1.下列程序的功能是计算 1~3 的阶乘(1!、2!、3!),请补充完整:
#include <stdio.h>
main() {
int n = 1;
int fact = 1;
while(n <= 3) {
fact *= n;
printf("%d! = %d
", n, fact);
______; }
}
2.下列程序的功能是输出 2、4、6(1~6 中的偶数),请补充完整:
#include <stdio.h>
main() {
int i = 2;
while(i <= 6) {
printf("%d ", i);
______;
}
}
3.下列程序的功能是:找出 10 以内第一个能被 4 整除的正整数
#include <stdio.h>
main()
{ int i = 1;
while(i <= 10)
{
if(__________)
break;
i++;
}
printf("%d",i);
}
4.程序的功能是:求 1-1/2+1/3...-1/100 的值。
int i = 1;
double sum = 0.0;
int sign = 1;
while (i <= 100) {
sum += sign * (1.0 / i);
______;
i++;
}
5.下列程序的功能:寻找水仙花数(三位数)。
#include <stdio.h>
main()
{ int i = 100, a, b, c;
while (i < 1000) {
a = i / 100;
b = (i / 10) % 10;
c = i % 10;
if (______)
printf("%d", i);
i++; }
}
五、编程题。
1. 编写程序,使用 while 循环统计用户输入的一串字符中元音字母(a、e、i、o、u,不区分大小写)的个数,以换行符结束输入。
2.编写程序,使用 while 循环计算 1~n 中所有奇数的和(n 由用户输入,如 n=5 时输出 9)。
3.输入若干整数,以正数结束输入,使用 while 循环统计一共输入了多少个负数。
4.猴子采摘了若干个桃子,每天都会吃掉一部分桃子。
规律如下:
每天吃掉当天现有桃子数量的一半,并且额外再多吃 1 个。
猴子连续吃了 9 天,到第 10 天清晨时,发现只剩下 1 个桃子。
请利用 while 循环 编写程序,逆向推算并输出猴子第一天一共摘下多少个桃子。
5.编程实现:输入两个正整数,求出两个数的最大公约数和最小公倍数。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$