头歌python 练习十一 一元二次方程的根
时间: 2024-10-27 11:11:36 浏览: 37
Python中可以使用数学库`math`或者更方便的`sympy`库来处理一元二次方程的求解。一元二次方程通常表示为`ax^2 + bx + c = 0`的形式,其中a、b和c是常数,x是未知数。
以下是使用`math`库的基本步骤:
```python
import math
# 定义系数a、b和c
a = float(input("请输入二次项系数(a): "))
b = float(input("请输入一次项系数(b): "))
c = float(input("请输入常数项(c): "))
# 计算判别式
delta = b**2 - 4*a*c
if a == 0:
print("这不是一个二次方程,请输入非零的a值")
else:
# 求解
x1 = (-b - math.sqrt(delta)) / (2 * a)
x2 = (-b + math.sqrt(delta)) / (2 * a)
print(f"方程的两个实根分别为: {x1:.2f} 和 {x2:.2f}")
```
如果需要精确计算和符号运算,可以使用`sympy`库:
```python
from sympy import symbols, Eq, solve
# 定义变量
x = symbols('x')
# 创建等式
equation = Eq(a*x**2 + b*x + c, 0)
# 解方程
solutions = solve(equation, x)
print(f"方程的解为: {solutions}")
```
相关问题
练习-输入一元二次方程的三个系数求方程的根(选择结构)
在编程中,特别是使用选择结构(如if-else、switch等),你可以设计一个程序来计算一元二次方程的解,给定它的三个系数a、b和c。以下是使用Python编写的一个简单示例:
```python
def quadratic_solver(a, b, c):
# 计算判别式
discriminant = b**2 - 4*a*c
if a == 0: # 如果a为零,我们有线性方程,不是二次方程
if b == 0: # 如果a和b都为零,那么只有一个解 x=0
root = 0
else: # a和b不同时为零,无解
print("这不是一个二次方程")
else:
if discriminant > 0: # 有两个实数根
root_1 = (-b + discriminant**0.5) / (2*a)
root_2 = (-b - discriminant**0.5) / (2*a)
print(f"两个根是 {root_1} 和 {root_2}")
elif discriminant == 0: # 只有一个实数根
root = -b / (2*a)
print(f"唯一的根是 {root}")
else: # 两个复数根
real_part = -b / (2*a)
imaginary_part = discriminant**0.5 / (2*a)
print(f"两个复数根是 ({real_part}, {imaginary_part})i")
# 调用函数并传入你的系数
quadratic_solver(1, -3, 2)
```
在这个例子中,首先判断是否是一般的一元二次方程(`a != 0`),然后根据判别式的值(大于0、等于0或小于0)选择不同的路径计算根。如果需要,可以添加异常处理以提高程序的健壮性。
练习-输入一元二次方程的三个系数求方程的实根(顺序结构)
在使用顺序结构解决这个问题时,首先需要获取用户输入的一元二次方程的三个系数(即a、b和c)。然后,通过标准公式计算判别式(Δ = b^2 - 4ac),根据判别式的正负来确定根的性质。以下是步骤概述:
1. **获取输入**:
- 提示用户输入系数a、b和c,通常使用`input()`函数接收,然后转换成浮点数。
2. **计算判别式**:
- 根据给定的公式 `discriminant = b * b - 4 * a * c` 计算判别式的值。
3. **判断根的性质**:
- 如果判别式大于0,方程有两个不同的实根,进行计算。
- 判别式等于0,则方程有唯一一个实根(重根)。
- 判别式小于0,方程无实根,可能是复数根(这里可以简单提示,不需要详细处理)。
4. **计算并输出根**:
- 当判别式非负时,计算两个根 `x1 = (-b + sqrt(discriminant)) / (2 * a)` 和 `x2 = (-b - sqrt(discriminant)) / (2 * a)` 并输出,格式化为指定宽度和精度。
5. **结束程序**:
- 结束输入和输出流程,程序完成。
下面是对应的伪代码或基本框架:
```python
# 顺序结构
a = float(input("请输入系数a: "))
b = float(input("请输入系数b: "))
c = float(input("请输入系数c: "))
discriminant = b**2 - 4*a*c
if discriminant > 0:
x1 = (-b + math.sqrt(discriminant)) / (2 * a)
x2 = (-b - math.sqrt(discriminant)) / (2 * a)
print(f"x1={format(x1, '.2f')}")
print(f"x2={format(x2, '.2f')}")
elif discriminant == 0:
x = -b / (2 * a)
print(f"x={format(x, '.2f')}")
else:
print("方程无实根")
```
阅读全文