4.3《运用选择结构描述问题的求解过程》-2023—2024学年粤教版(2019)数据与计算必修1-课后练习(含答案)

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

4.3《运用选择结构描述问题的求解过程》-2023—2024学年粤教版(2019)数据与计算必修1-课后练习(含答案)

资源简介

运用选择结构描述问题的求解过程练习题
(粤教版·必修一《数据与计算》)
一、单选题(共15题,每题5分,共75分)
1. 在Python中,用于实现选择结构的关键字是(  )
A. if, for
B. if, else, elif
C. if, while
D. select, case
2. 下列代码的输出结果是(  )
```python
x = 5
if x > 3:
print("A")
if x < 3:
print("B")
else:
print("C")
```
A. A
B. A C
C. C
D. A B
3. 以下关于 `if-elif-else` 结构的说法,正确的是(  )
A. `elif` 子句可以有任意多个,`else` 子句最多一个
B. `elif` 和 `else` 都是必须的
C. `elif` 必须与 `else` 配对使用
D. `if` 语句中不能嵌套其他 `if` 语句
4. 表达式 `3 > 2 > 1` 在Python中的值与下列哪个选项相同?(  )
A. `(3 > 2) and (2 > 1)`
B. `(3 > 2) or (2 > 1)`
C. `3 > 2 and 2 > 1`
D. A和C都对
5. 下列代码段执行后,输出结果是(  )
```python
a = 10
b = 20
if a > b:
print(a)
else:
print(b)
```
A. 10
B. 20
C. 1020
D. 无输出
6. 下列选项中,与 `if x == y: print("相等")` 功能等价的是(  )
A. `if x = y: print("相等")`
B. `if x is y: print("相等")`
C. `if x != y: pass; else: print("相等")`
D. B和C都不完全等价
7. 某程序要求根据用户输入的成绩(0-100),输出等级:90分以上为“优秀”,80-89为“良好”,60-79为“及格”,60以下为“不及格”。以下哪个代码片段能正确实现?(  )
A.
```python
if score >= 90: print("优秀")
if score >= 80: print("良好")
if score >= 60: print("及格")
else: print("不及格")
```
B.
```python
if score >= 90: print("优秀")
elif score >= 80: print("良好")
elif score >= 60: print("及格")
else: print("不及格")
```
C. 以上都对
D. 以上都不对
8. 下列代码的输出结果是(  )
```python
x = 15
if x % 3 == 0:
if x % 5 == 0:
print("A")
else:
print("B")
else:
print("C")
```
A. A
B. B
C. C
D. 无输出
9. 关于条件表达式(三元运算符)`x if condition else y`,以下说法正确的是(  )
A. 如果condition为True,表达式的值为x,否则为y
B. 该表达式只能用于数值类型
C. 它等价于 `if condition: x else: y` 但不能赋值
D. 它不能嵌套使用
10. 执行以下代码,若输入为 `18`,输出结果是(  )
```python
age = int(input("年龄:"))
if age >= 18:
if age < 60:
print("成年")
else:
print("老年")
else:
print("未成年")
```
A. 成年
B. 老年
C. 未成年
D. 无输出
11. 下列哪个逻辑表达式等价于 `not (a > b or a < c)`?(  )
A. `a <= b and a >= c`
B. `a <= b or a >= c`
C. `a > b and a < c`
D. `a < b and a > c`
12. 若 `x = 7`,则 `print("奇") if x % 2 else print("偶")` 的输出是(  )
A. 奇
B. 偶
C. 报错
D. 无输出
13. 下列代码的输出结果是(  )
```python
x = 5
y = 10
if x > 0:
if y > 5:
z = x + y
else:
z = x - y
else:
z = -x - y
print(z)
```
A. 15
B. -5
C. 5
D. -15
14. 以下关于选择结构的描述,错误的是(  )
A. 选择结构可以根据条件是否成立,选择执行不同的语句块
B. 在Python中,`if` 语句后面必须跟冒号,且缩进表示代码块
C. `elif` 相当于 `else if` 的缩写,可以无限多个
D. `else` 子句可以单独使用,不需要 `if`
15. 某商场促销:购物满200元减30元,满100元减10元,否则不打折。以下代码中正确的是(  )
A.
```python
if amount >= 200:
amount -= 30
if amount >= 100:
amount -= 10
```
B.
```python
if amount >= 200:
amount -= 30
elif amount >= 100:
amount -= 10
```
C. 以上都正确
D. 以上都不正确
二、填空题(共10题,每题2分,共20分)
1. 在Python中,`if` 语句的条件表达式后面需要加上__________,并且子句需要__________(缩进)表示代码块。
2. 执行 `print(5 if 3 > 5 else 8)` 的输出结果是__________。
3. `if-elif-else` 结构中,`elif` 的数量可以是__________个,`else` 的数量最多__________个。
4. 以下代码的输出结果是__________。
```python
a, b = 7, 12
if a > b:
print("Max:", a)
else:
print("Min:", b)
```
5. 用条件表达式(三元运算符)实现:若 `score >= 60`,则 `result = "及格"`,否则 `result = "不及格"`,表达式为__________。
6. 以下代码的运行结果是__________。
```python
x = -3
if x:
print("非零")
else:
print("零")
```
7. 某程序输入三个整数,输出最大值。请补充以下代码:
```python
a, b, c = map(int, input().split())
max_num = a
if b > max_num:
_______
if c > max_num:
_______
print(max_num)
```
8. 条件 `(year % 400 == 0) or (year % 4 == 0 and year % 100 != 0)` 的作用是判断__________。
9. 以下代码的输出结果是__________。
```python
n = 15
if n % 2 == 0:
print("even")
else:
print("odd")
```
10. 选择结构中的条件表达式通常是__________类型(布尔类型),也可以是其他类型,Python会自动转换。例如 `if 0:` 相当于条件为__________。
三、情景作答题(共3题)
情景一:出租车计费系统
某市出租车计费规则如下:
起步价10元(含3公里);
超过3公里后,每公里加收2.5元;
如果行驶里程超过15公里,超出15公里的部分每公里加收3.5元(即超过15公里后,3-15公里部分仍按每公里2.5元计);
此外,夜间时段(22:00-6:00)加收20%的夜间服务费(总费用上浮20%)。
请编写一个函数 `taxi_fee(distance, is_night)`,其中 `distance` 为行驶里程(公里),`is_night` 为布尔值(True表示夜间),返回应付车费(保留两位小数)。
问题:
1. 写出该函数的完整代码。(8分)
2. 分别计算 distance=2, 12, 20 公里,非夜间时的车费。(4分)
3. 夜间行驶20公里比非夜间多付多少钱?(4分)
情景二:密码强度检测器(创新题)
某网站注册时要求密码强度至少为“中”。强度规则如下:
长度 < 8:弱
长度 ≥ 8 且 包含数字、大写字母、小写字母、特殊字符(!@$%^&)中的至少两类:中
长度 ≥ 8 且 包含至少三类:强
长度 ≥ 12 且 包含至少四类:超强
请编写程序,输入一个密码字符串,输出其强度等级(弱/中/强/超强)。
问题:
1. 如何判断一个字符串中是否包含数字?是否包含大写字母?小写字母?特殊字符?请写出相应的Python表达式。(4分)
2. 编写完整的密码强度检测函数 `check_strength(pwd)`。(8分)
3. 若用户输入的密码为 `"Abc123!@"`,调用函数后输出什么等级?(4分)
情景三:分段函数的实现与优化
数学中常见分段函数:
\[
f(x) =
\begin{cases}
x^2 + 1 & (x < -5) \\
2x + 3 & (-5 \le x < 0) \\
\sqrt{x+1} & (0 \le x < 10) \\
\log_2(x) & (x \ge 10)
\end{cases}
\]
要求编写程序,输入x,输出f(x)的值。
问题:
1. 使用 `if-elif-else` 结构实现该分段函数,注意处理定义域(x为实数)。(6分)
2. 若输入x = -6, -3, 0, 15,分别输出结果是多少?(需计算,可不写代码)(6分)
3. 讨论:如果分段区间很多(如100个),使用 `if-elif-else` 效率会降低,能否用其他数据结构优化?请简述思路。(4分)
参考答案与解析
一、单选题答案解析
1. B
解析:Python中选择结构使用 `if`、`elif`、`else`,`for` 和 `while` 是循环结构。
2. B
解析:第一个 `if x>3` 成立,输出"A"。第二个 `if x<3` 不成立,执行 `else`,输出"C"。所以输出 A 和 C(各占一行)。注意两个 `if` 是独立的。
3. A
解析:`elif` 可以有任意多个,`else` 最多一个,且不是必须的。故A正确。B错(else可选),C错(elif可以不跟else),D错(可以嵌套)。
4. D
解析:Python中链式比较 `3>2>1` 等价于 `(3>2) and (2>1)`,也等于 `3>2 and 2>1`(and优先级低于比较但这里无歧义)。所以A和C都对。
5. B
解析:a=10,b=20,a>b为False,执行else,输出20。
6. C
解析:A中 `x=y` 是赋值,不是比较;B中 `is` 判断是否为同一对象,对于整数小范围可能巧合但不通用;C中先判断不等,pass不做,else打印相等,功能等价。但效率低,逻辑等价。所以C正确。
7. B
解析:A中多个if会导致大于90的也会满足后面的if,输出多个等级,错误。B使用elif正确。
8. A
解析:15%3==0成立,进入内层if;15%5==0成立,输出"A"。
9. A
解析:A正确。B错(任意类型),C错(可以赋值),D错(可以嵌套)。
10. A
解析:age=18>=18,进入外层if,然后 age<60成立,输出"成年"。
11. A
解析:根据德摩根定律:`not (a>b or ab) and not (a=c)`。
12. A
解析:`x%2` 得1,在条件表达式中非零为True,所以执行 `print("奇")`。
13. A
解析:x=5>0进入外层if;y=10>5成立,z=x+y=15,打印15。
14. D
解析:`else` 子句必须与 `if` 或 `elif` 配对,不能单独使用。D错误。
15. B
解析:满200减30,满100减10,但满200也应享受满100?实际促销中通常只享受最高档,即满200减30后不再减10。A中两个if会先减30,再判断满100(此时可能仍≥100)再减10,导致重复优惠。B中使用 `elif` 只执行一个分支,正确。
二、填空题答案解析
1. 冒号(:);缩进
2. 8(条件为假,选else部分8)
3. 任意;1
4. Min: 12(a>b为假,执行else,输出"Min:"和b的值12)
5. `result = "及格" if score >= 60 else "不及格"`
6. 非零(x=-3非零,条件为True)
7. `max_num = b`;`max_num = c`
8. 闰年
9. odd(15%2=1≠0,输出odd)
10. 布尔;False
三、情景作答题答案解析
情景一:出租车计费系统
1. 函数代码
```python
def taxi_fee(distance, is_night):
if distance <= 3:
fee = 10
elif distance <= 15:
fee = 10 + (distance - 3) * 2.5
else:
fee = 10 + (15 - 3) * 2.5 + (distance - 15) * 3.5
if is_night:
fee = 1.2
return round(fee, 2)
```
2. 非夜间车费
distance=2: ≤3公里,10元
distance=12: 10 + (12-3)*2.5 = 10 + 22.5 = 32.5元
distance=20: 10 + 12*2.5 + (20-15)*3.5 = 10 + 30 + 17.5 = 57.5元
3. 夜间20公里多付
夜间:57.5* 1.2 = 69元,多付 69 - 57.5 = 11.5元
情景二:密码强度检测器
1. 判断表达式
包含数字:`any(c.isdigit() for c in pwd)`
包含大写字母:`any(c.isupper() for c in pwd)`
包含小写字母:`any(c.islower() for c in pwd)`
包含特殊字符:`any(c in "!@$%^&" for c in pwd)`
2. 强度检测函数
```python
def check_strength(pwd):
length = len(pwd)
has_digit = any(c.isdigit() for c in pwd)
has_upper = any(c.isupper() for c in pwd)
has_lower = any(c.islower() for c in pwd)
has_special = any(c in "!@$%^&" for c in pwd)
category_count = has_digit + has_upper + has_lower + has_special
if length < 8:
return "弱"
elif length >= 12 and category_count == 4:
return "超强"
elif category_count >= 3:
return "强"
elif category_count >= 2:
return "中"
else:
return "弱"
```
3. 输入 `"Abc123!@"`
长度=8,包含数字(1,2,3)、大写A、小写b,c、特殊字符!@,共计4类,且长度≥8,category_count=4,但长度不是≥12,所以为“强”?(按规则:长度≥8且包含至少三类为强,四类也是强,除非长度≥12且四类才是超强)。所以输出“强”。
情景三:分段函数的实现与优化
1. 代码实现
```python
import math
def f(x):
if x < -5:
return x2 + 1
elif x < 0:
return 2x + 3
elif x < 10:
return math.sqrt(x + 1)
else:
return math.log2(x)
```
2. 计算结果
x=-6: (-6)**2+1 = 36+1=37
x=-3: 2*(-3)+3 = -6+3=-3
x=0: sqrt(0+1)=1
x=15: log2(15) ≈ 3.9069
3. 优化思路
可用列表存储区间边界和对应函数,例如 `intervals = [(-inf, -5, f1), (-5,0,f2), ...]`,然后二分查找找到所在区间,避免逐条判断。或者使用字典映射。当区间很多时,效率从O(n)提升到O(log n)。

展开更多......

收起↑

资源预览