教案:求解一元一次方程

教案基本信息

课程名称:Python编程第六课 求解一元一次方程
授课对象:编程零基础初学者
课时安排:45分钟
教学形式:理论讲解 + 实践操作

一、 教学目标

知识与技能:

  1. 数学知识:深入理解一元一次方程ax + b = 0的解的三种情况(唯一解、无解、无穷多解)与系数a,b的关系。
  2. 编程知识:巩固 if-elif-else 多分支选择结构。学习如何处理浮点数计算中可能存在的精度问题。
  3. 综合运用变量、输入输出和条件判断解决复杂问题。

过程与方法:

  1. 经历从数学定理到程序算法的完整转化过程,培养计算思维和逻辑推理能力。
  2. 通过编程实现数学问题的分类讨论,体验计算机在解决规则明确问题上的高效性。

情感态度与价值观:

  1. 感受用编程解决数学问题的威力,增强学习兴趣和自信心。
  2. 培养严谨、全面的思维习惯,理解考虑问题所有边界情况的重要性。

二、 教学重点与难点

教学重点:分析一元一次方程解的三种情况,并转化为if-elif-else分支结构。

教学难点:理解a == 0时方程的解由b决定;处理浮点数比较时的精度问题。

三、 教学准备

教师:安装Python环境的电脑、投影设备、教学课件。

学生:电脑已安装Python环境,已掌握if-elif-else结构和基本运算符。

四、 教学过程

(一) 问题导入与数学分析(10分钟)

教师活动:

  1. 写出一般形式:ax + b = 0 (a, b 为常数)。
  2. 提问:“这个方程的解是什么?是不是永远都是x = -b/a?” 引导学生思考。
  3. 引导学生进行数学分类讨论(板书关键逻辑):

情况一:当 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(“方程有无穷多解。”)

代码讲解要点:

  1. float(input(…)):确保输入被转换为浮点数。、
  2. epsilon = 1e-9:定义精度阈值。
  3. if abs(a) > epsilon::这是判断 a 是否不为0的安全写法
  4. elif abs(b) > epsilon::当 a 为0时,判断 b 是否不为0。
  5. else::对应 a 和 b 都近似为0的情况。
  6. {x:.2f}:格式化输出,将解 x 保留两位小数,更美观。

(四) 测试与验证(5分钟)

师生共同测试:运行程序,输入以下几组典型的(a, b)值,验证程序的正确性。

  1. (2, 4) -> 唯一解 x = -2 (验证主要功能)
  2. (0, 5) -> 无解 (验证边界情况1)
  3. (0, 0) -> 无穷多解 (验证边界情况2)
  4. (0.0000000001, 1) -> 唯一解 (虽小但不为0)
  5. (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分钟)

小结:

  1. 数学是基础:编程前必须理清问题的所有逻辑可能性(分类讨论)。
  2. 算法是桥梁:将数学逻辑转化为清晰的步骤(流程图)。
  3. 代码是工具:用if-elif-else实现分支,用abs(a) < epsilon安全地比较浮点数。
  4. 测试很重要:必须用多种情况验证程序的正确性。

作业:

  1. 基础题:完善本课的程序,实现课堂练习中的“整数解优化输出”功能。
  2. 挑战题:编写程序求解一元二次方程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

您可能还喜欢...