教案:求解一元一次方程
教案基本信息
课程名称:Python编程第六课 求解一元一次方程
授课对象:编程零基础初学者
课时安排:45分钟
教学形式:理论讲解 + 实践操作
一、 教学目标
知识与技能:
- 数学知识:深入理解一元一次方程ax + b = 0的解的三种情况(唯一解、无解、无穷多解)与系数a,b的关系。
- 编程知识:巩固 if-elif-else 多分支选择结构。学习如何处理浮点数计算中可能存在的精度问题。
- 综合运用变量、输入输出和条件判断解决复杂问题。
过程与方法:
- 经历从数学定理到程序算法的完整转化过程,培养计算思维和逻辑推理能力。
- 通过编程实现数学问题的分类讨论,体验计算机在解决规则明确问题上的高效性。
情感态度与价值观:
- 感受用编程解决数学问题的威力,增强学习兴趣和自信心。
- 培养严谨、全面的思维习惯,理解考虑问题所有边界情况的重要性。
二、 教学重点与难点
教学重点:分析一元一次方程解的三种情况,并转化为if-elif-else分支结构。
教学难点:理解a == 0时方程的解由b决定;处理浮点数比较时的精度问题。
三、 教学准备
教师:安装Python环境的电脑、投影设备、教学课件。
学生:电脑已安装Python环境,已掌握if-elif-else结构和基本运算符。
四、 教学过程
(一) 问题导入与数学分析(10分钟)
教师活动:
- 写出一般形式:ax + b = 0 (a, b 为常数)。
- 提问:“这个方程的解是什么?是不是永远都是x = -b/a?” 引导学生思考。
- 引导学生进行数学分类讨论(板书关键逻辑):
情况一:当 a ≠ 0 时
方程有唯一解,解为 x = -b / a。
情况二:当 a = 0 时,需要进一步判断:
子情况一:b ≠ 0
方程变为 0*x + b = 0 => b = 0。这是一个矛盾的等式,所以方程无解。
子情况二:b = 0
方程变为 0*x + 0 = 0 => 0 = 0。这是一个永恒成立的等式,所以方程有无穷多解(任何实数都是解)。
学生活动:跟随老师回顾数学知识,理解分类讨论的完整逻辑链条。
设计意图:将明确的数学逻辑作为编程的基础,这是解决问题的关键第一步。
(二) 算法设计与难点突破(10分钟)
1. 将数学逻辑转化为程序算法
教师引导:上面的分析就像一个决策树,非常适合用 if-elif-else 结构来实现。
绘制程序流程图(板书或投影):

2. 难点突破:浮点数精度问题
教师讲解:在计算机中,浮点数(小数)的存储和计算可能存在微小的误差。直接判断a == 0可能不可靠。
举例:0.1 + 0.2的结果在Python中不是精确的0.3,而是一个非常接近的数。
解决方案:判断一个浮点数是否”等于”0,我们通常判断它的绝对值是否小于一个非常小的数(例如1e-9),如果是,我们就认为它等于0。
引入绝对值函数 abs():abs(a) < 1e-9 表示a的绝对值小于0.000000001,可以认为a是0。
(三) 代码实现与范例讲解(15分钟)
教师带领学生编写代码:
python
# 求解一元一次方程 ax + b = 0
# 1. 获取用户输入的系数a和b
print(“请输入一元一次方程 ax + b = 0 的系数:”)
a = float(input(“a = “))
b = float(input(“b = “))
# 2. 设置一个非常小的阈值,用于判断浮点数是否为0
epsilon = 1e-9
# 3. 根据分类讨论的逻辑进行判断
if abs(a) > epsilon: # 情况1: a ≠ 0 (考虑精度后)
# 方程有唯一解
x = -b / a
# 格式化输出,保留两位小数
print(f”方程有唯一解:x = {x:.2f}”)
elif abs(b) > epsilon: # 情况2: a ≈ 0 但 b ≠ 0
# 方程无解
print(“方程无解。”)
else: # 情况3: a ≈ 0 且 b ≈ 0
# 方程有无穷多解
print(“方程有无穷多解。”)
代码讲解要点:
- float(input(…)):确保输入被转换为浮点数。、
- epsilon = 1e-9:定义精度阈值。
- if abs(a) > epsilon::这是判断 a 是否不为0的安全写法。
- elif abs(b) > epsilon::当 a 为0时,判断 b 是否不为0。
- else::对应 a 和 b 都近似为0的情况。
- {x:.2f}:格式化输出,将解 x 保留两位小数,更美观。
(四) 测试与验证(5分钟)
师生共同测试:运行程序,输入以下几组典型的(a, b)值,验证程序的正确性。
- (2, 4) -> 唯一解 x = -2 (验证主要功能)
- (0, 5) -> 无解 (验证边界情况1)
- (0, 0) -> 无穷多解 (验证边界情况2)
- (0.0000000001, 1) -> 唯一解 (虽小但不为0)
- (0.00000000001, 0.00000000001) -> 无穷多解 (极小值判断)
(五) 课堂练习与拓展(5分钟)
练习:改进输出
任务:修改程序,当方程有唯一解时,如果解是整数(如 x=2.00),则输出整数形式(x=2);如果是小数,则保留两位小数。
提示:使用int()转换和条件判断。例如:if x == int(x):
python
# 在输出唯一解的部分进行修改
if abs(a) > epsilon:
x = -b / a
if abs(x – int(x)) < epsilon: # 判断x是否为整数
print(f”方程有唯一解:x = {int(x)}”)
else:
print(f”方程有唯一解:x = {x:.2f}”)
(六) 课堂小结与作业(5分钟)
小结:
- 数学是基础:编程前必须理清问题的所有逻辑可能性(分类讨论)。
- 算法是桥梁:将数学逻辑转化为清晰的步骤(流程图)。
- 代码是工具:用if-elif-else实现分支,用abs(a) < epsilon安全地比较浮点数。
- 测试很重要:必须用多种情况验证程序的正确性。
作业:
- 基础题:完善本课的程序,实现课堂练习中的“整数解优化输出”功能。
- 挑战题:编写程序求解一元二次方程ax² + bx + c = 0的根,并考虑实数根的情况(判别式大于0、等于0、小于0)。
五、 板书设计
主标题:编程求解一元一次方程
数学逻辑:
a ≠ 0 -> 唯一解 x = -b/a
a = 0 且 b ≠ 0 -> 无解
a = 0 且 b = 0 -> 无穷多解
编程核心:
python
if abs(a) > 1e-9:
# 唯一解
elif abs(b) > 1e-9:
# 无解
else:
# 无穷多解
关键技巧:浮点数精度 epsilon,格式化输出 :.2f