4.4.2《while循环的应用》粤教版(2019)-数据与计算必修1-课后练习(含答案)

资源下载
  1. 二一教育资源

4.4.2《while循环的应用》粤教版(2019)-数据与计算必修1-课后练习(含答案)

资源简介

while循环的应用练习题
(粤教版·必修一《数据与计算》4.4.2)
一、单选题(共15题,每题5分,共75分)
1. 在Python中,while循环的基本语法格式是(  )
A. while 条件: 语句块
B. while (条件) 语句块
C. while 条件: 语句块
D. while 条件 语句块
2. 执行以下代码,输出结果是(  )
```python
i = 1
while i < 3:
print(i, end=' ')
i += 1
```
A. 1 2
B. 1 2 3
C. 1 1 1 ...
D. 无输出
3. 下列代码中,会导致无限循环的是(  )
A.
```python
i = 5
while i > 0:
print(i)
i -= 1
```
B.
```python
i = 1
while i <= 5:
print(i)
```
C.
```python
i = 0
while i < 10:
print(i)
i += 2
```
D.
```python
i = 10
while i > 0:
print(i)
i = i - 2
```
4. 以下关于while循环的说法,正确的是(  )
A. while循环至少会执行一次循环体
B. while循环的条件可以是任意表达式,只要结果为布尔值或可转换为布尔值
C. while循环中必须使用break语句才能退出
D. while循环不能嵌套使用
5. 执行以下代码,输出结果是(  )
```python
i = 0
s = 0
while i <= 10:
i += 2
s += i
print(s)
```
A. 30
B. 42
C. 20
D. 36
6. 下列代码的功能是计算1+2+...+100的和,其中正确的是(  )
A.
```python
i = 1; sum = 0
while i <= 100:
sum += i
```
B.
```python
i = 1; sum = 0
while i < 100:
sum += i
i += 1
```
C.
```python
i = 1; sum = 0
while i <= 100:
sum += i
i += 1
```
D.
```python
i = 0; sum = 0
while i < 100:
i += 1
sum += i
```
C和D都正确
7. 执行以下代码,输出结果中数字的个数是(  )
```python
i = 1
while i < 10:
if i % 2 == 0:
i += 1
continue
print(i, end=' ')
i += 1
```
A. 4
B. 5
C. 9
D. 10
8. 在while循环中使用break语句的作用是(  )
A. 跳过本次循环的剩余语句,进入下一次循环
B. 立即终止整个循环,继续执行循环后的代码
C. 结束整个程序
D. 使循环条件变为False
9. 执行以下代码,输出结果是(  )
```python
n = 1234
count = 0
while n > 0:
count += 1
n //= 10
print(count)
```
A. 3
B. 4
C. 5
D. 报错
10. 下列哪种情况最适合使用while循环而不是for循环?(  )
A. 遍历一个列表的所有元素
B. 计算1到1000所有整数的和
C. 用户输入密码,直到输入正确为止
D. 打印乘法口诀表
11. 执行以下代码,如果输入为 0,输出结果是(  )
```python
num = int(input("输入一个正整数:"))
i = 1
while i <= num:
print(i, end=' ')
i += 1
```
A. 无输出
B. 输出"1"
C. 输出空行
D. 死循环
12. 下面代码中,与 `for i in range(5, 0, -1): print(i)` 功能完全相同的while循环是(  )
A.
```python
i = 5
while i > 0:
print(i)
i -= 1
```
B.
```python
i = 5
while i >= 0:
print(i)
i -= 1
```
C.
```python
i = 5
while i < 0:
print(i)
i -= 1
```
D.
```python
i = 5
while i > 1:
print(i)
i -= 1
```
13. 执行以下代码,输出结果是(  )
```python
i = 2
while True:
if i % 3 == 0:
break
print(i, end=' ')
i += 2
```
A. 2 4
B. 2
C. 2 4 6
D. 无限循环
14. 下列代码实现了输出斐波那契数列的前n项,但有一处错误,请找出(  )
```python
n = int(input())
a, b = 0, 1
i = 0
while i < n:
print(a, end=' ')
a, b = b, a + b
i += 1
```
A. 变量a初始值应为1
B. 循环条件应为 `i <= n`
C. 缺少缩进
D. 代码没有错误
15. 关于while循环的 `else` 子句,下列说法正确的是(  )
A. 无论循环是否执行,else子句都会执行
B. 只有当循环条件为False时,else子句才会执行(且没有被break终止)
C. 只有使用break退出循环时,else子句才会执行
D. while循环不能与else配合使用
二、填空题(共10题,每题2分,共20分)
1. while循环中,如果循环条件__________(永远为True),且循环体内没有__________语句,就会形成无限循环(死循环)。
2. 以下代码用于计算n的阶乘,请补充完整。
```python
n = 5
result = 1
i = 1
while i <= n:
result = result __________
__________
print(result)
```
3. 执行以下代码,输出结果是__________。
```python
i = 10
while i > 0:
if i % 2 == 1:
print(i, end=' ')
i -= 1
```
4. 以下代码中,循环体执行的次数是__________次。
```python
i = 0
while i < 10:
print(i)
i += 2
```
5. 执行 `s = 0; i = 1; while i <= 5: s += i; i += 1` 后,s的值为__________。
6. 编写一个while循环,输出1到100之间所有3的倍数,请补充代码。
```python
i = 3
while i <= 100:
print(i, end=' ')
__________
```
7. 在循环中,__________语句用于提前终止整个循环,__________语句用于跳过本次循环的剩余语句。
8. 执行以下代码,输入 `-5` 时,输出结果是__________。
```python
num = int(input())
while num < 0:
print("负数")
break
else:
print("非负数")
```
9. 下面的while循环期望输出5,4,3,2,1,请补充条件。
```python
i = 5
while __________:
print(i, end=' ')
i -= 1
```
10. 下列代码的运行结果是__________。
```python
x = 0
while x < 3:
x += 1
print(x)
```
三、情景作答题(共3题)
情景一:猜数字游戏(经典创新)
计算机随机生成一个1-100之间的整数,用户输入猜测的数字,程序提示“猜大了”、“猜小了”或“恭喜猜对了!”。用户猜中后,程序输出总共猜测的次数。如果用户输入的不是数字,程序应提示“输入无效,请重新输入”,不计入猜测次数。
要求: 使用while循环实现,并处理好非法输入。
问题:
1. 写出完整的Python代码。(8分)
2. 如果用户一直不猜中,理论上有无限次猜测机会,但实际运行中如何避免程序无响应?(给出一种方法即可)(4分)
3. 如果想增加“最多猜10次,超过则失败”的规则,应如何修改代码?(4分)
情景二:统计正负数与求和(创新情景)
某班级进行了一次测验,老师需要输入所有学生的成绩(整数),输入 `0` 表示结束(成绩0表示结束标志,不纳入统计且假设没有学生得0分)。请编写程序,统计并输出:
- 输入的总人数(不包括结束标志0)
- 正数成绩(>0)的人数、负数成绩(<0)的人数(假设有负分??可理解为成绩可能负分?但通常成绩非负,可改为统计及格及不及格?为了有趣,改成统计正数和负数,或统计奇偶。但贴合生活,建议统计不及格(<60)和及格(>=60)。但原题要求正负数,我们就保持输入有正有负,例如加分的题。这里改一下合理一些:统计正数和负数的个数以及总和。使用while循环不断输入,直到输入0结束。)
问题:
1. 编写程序实现上述统计功能,输出:正数个数、负数个数、所有非零数的总和。(8分)
2. 如果要求输入的成绩必须在-100到100之间,否则提示“成绩无效,请重新输入”并不计入统计,应如何修改?(4分)
3. 若将结束标志改为输入空行(直接按回车),该如何修改输入检测?(4分)
情景三:水仙花数的while循环求解
水仙花数是指一个三位数,其各位数字的立方和等于该数本身,例如153=1 +5 +3 。请使用while循环找出所有的水仙花数。
问题:
1. 写出判断一个三位数n是否为水仙花数的代码片段(用while或拆解数字)。(6分)
2. 使用while循环遍历100-999之间的所有整数,输出所有的水仙花数。(6分)
3. 在寻找水仙花数的过程中,如果改用for循环会更加简洁,为什么还要学习while循环?请说明while循环在哪些场景下比for循环更合适。(4分)
参考答案与解析
一、单选题答案解析
1. A
解析:while循环语法为 `while 条件:` 后跟冒号和缩进语句块。A正确(注意题目中A和C选项可能因排版相同,实际应选择带有冒号的)。
2. A
解析:i初始1,条件i<3成立,输出1,i变为2;i<3仍成立,输出2,i变为3;i<3不成立,循环结束。输出1 2。
3. B
解析:B中循环变量i始终为1,没有改变,条件永远为真,导致无限循环。其他选项循环变量都会变化最终使条件为假。
4. B
解析:A错误,while循环可能一次都不执行(条件开始为假);B正确;C错误,条件变假或break都可退出;D错误,可以嵌套。
5. A
解析:跟踪i和s:i=0→i=2,s=2;i=4,s=6;i=6,s=12;i=8,s=20;i=10,s=30;i=12不满足≤10退出。s=30。
6. D
解析:A中i不变,死循环;B中只加到99;C正确求和1-100;D正确先加1再累加,同样得到1-100的和(注意i从0开始,第一次i=1后累加1,最后i=100时累加100)。所以C和D都对。
7. B
解析:i从1到9,if i%2==0时i+=1然后continue,即偶数时跳过打印并增加i(相当于偶数不输出,但i增加1)。奇数时打印i,然后i+=1。模拟:i=1奇数→打印1,i=2;i=2偶数→i=3;i=3奇数→打印3,i=4;i=4偶数→i=5;i=5奇数→打印5,i=6;i=6偶数→i=7;i=7奇数→打印7,i=8;i=8偶数→i=9;i=9奇数→打印9,i=10循环结束。输出1 3 5 7 9,共5个数字。
8. B
解析:break终止整个循环,continue跳过本次循环剩余语句进入下一次。
9. B
解析:n=1234,每次整除10去掉末位,count记录次数,直到n=0。1234→123→12→1→0,共4次,即数字位数。
10. C
解析:用户输入密码直到正确,循环次数未知,适合while。A、B、D次数确定适合for。
11. A
解析:输入0,条件 i<=num 即1<=0为假,循环一次也不执行,无输出。
12. A
解析:for i in range(5,0,-1)输出5,4,3,2,1。A中i=5,条件i>0输出后i减1,输出5,4,3,2,1相同。B输出5,4,3,2,1,0;C不执行;D输出5,4,3,2。
13. A
解析:i=2,while True无限循环,i%3!=0,打印2,i=4;i=4%3!=0,打印4,i=6;i=6%3==0,break退出。输出2 4。
14. D
解析:代码正确,输出斐波那契数列前n项(a初始0,第一项0)。通常斐波那契从0,1开始。所以无错误。
15. B
解析:while-else中,当循环正常结束(条件为假)且没有被break终止时,执行else子句。若被break终止,则不执行else。
二、填空题答案解析
1. 恒真(True);break
2. i;i += 1
3. 9 7 5 3 1(从10向下,奇数打印,注意顺序从大到小)
4. 5(i=0,2,4,6,8,共5次)
5. 15(1+2+3+4+5=15)
6. i += 3
7. break;continue
8. 负数(输入-5,while条件True,打印"负数",break跳出,不执行else)
9. i >= 1 或 i > 0
10. 3(x初始0,当x<3时循环,x自增1,经过3次后x=3,循环结束,打印3)
三、情景作答题答案解析
情景一:猜数字游戏
1. 完整代码
```python
import random
target = random.randint(1, 100)
count = 0
while True:
user_input = input("猜一个数字(1-100):")
if not user_input.isdigit():
print("输入无效,请重新输入")
continue
guess = int(user_input)
count += 1
if guess < target:
print("猜小了")
elif guess > target:
print("猜大了")
else:
print(f"恭喜猜对了!共猜了{count}次")
break
```
2. 避免程序无响应
理论上while True会一直运行,但实际用户输入会等待,不会无响应。如果担心用户一直不猜,可以增加超时机制或最大次数限制。
3. 增加最多10次限制
在循环内增加次数判断:`if count >= 10: print("失败,次数用尽"); break`。
情景二:统计正负数与求和
1. 基本统计
```python
pos = neg = total = 0
while True:
num = int(input("请输入成绩(输入0结束):"))
if num == 0:
break
if num > 0:
pos += 1
elif num < 0:
neg += 1
total += num
print(f"正数个数:{pos},负数个数:{neg},总和:{total}")
```
2. 增加范围限制
```python
while True:
num = int(input("请输入-100~100之间的整数:"))
if num == 0:
break
if num < -100 or num > 100:
print("成绩无效,请重新输入")
continue
统计代码同上
```
3. 结束标志为空行
```python
while True:
s = input("请输入成绩(直接回车结束):")
if s == "":
break
num = int(s)
统计
```
情景三:水仙花数的while循环求解
1. 判断水仙花数代码
```python
def is_narcissistic(n):
sum_cubes = 0
temp = n
while temp > 0:
digit = temp % 10
sum_cubes += digit 3
temp //= 10
return sum_cubes == n
```
2. 遍历并输出
```python
num = 100
while num <= 999:
if is_narcissistic(num):
print(num)
num += 1
```
3. while与for的适用场景
while循环适用于循环次数未知、需要根据条件动态控制的情况,如用户输入、迭代收敛、无限循环等。for循环适用于遍历已知序列或确定次数。学习while有助于理解更一般的循环控制结构,培养逻辑思维能力。

展开更多......

收起↑

资源预览