写一个一元二次求根公式程序
时间: 2024-10-18 16:12:22 浏览: 32
要编写一个一元二次方程求根的程序,你需要使用著名的卡丹公式(也称作二次公式),它用于计算给定一元二次方程 \( ax^2 + bx + c = 0 \) 的解。其中 \( a \), \( b \), 和 \( c \) 是已知常数,\( x \) 是未知数。
以下是一个简单的 C 语言程序示例,它接受用户输入的系数并计算解:
```c
#include <stdio.h>
#include <math.h>
// 函数声明,定义求解二次方程的函数
double quadraticRoot(double a, double b, double c);
int main() {
double a, b, c;
printf("请输入一元二次方程的系数 (a, b, c): ");
scanf("%lf %lf %lf", &a, &b, &c); // 输入三个系数
if (a == 0) { // 检查是否为一次方程或常数项
printf("这不是一个二次方程.\n");
} else {
double root1 = quadraticRoot(a, b, c);
double root2 = quadraticRoot(-a, b, -c); // 对于实数解,两个根互为相反数
printf("方程的两个根是:\n%.2lf 和 %.2lf\n", root1, root2);
}
return 0;
}
// 定义求解二次方程的函数
double quadraticRoot(double a, double b, double c) {
double discriminant = b * b - 4 * a * c; // 计算判别式
if (discriminant > 0) {
// 有两个不相等的实数根
double sqrtDiscriminant = sqrt(discriminant);
return (-b + sqrtDiscriminant) / (2 * a), (-b - sqrtDiscriminant) / (2 * a);
} else if (discriminant == 0) {
// 有一个重根(重复)
return -b / (2 * a);
} else {
// 无实数根(复数根)
double realPart = -b / (2 * a);
double imaginaryPart = sqrt(-discriminant) / (2 * a);
return realPart, imaginaryPart;
}
}
```
这个程序首先要求用户输入方程的系数,然后调用 `quadraticRoot` 函数计算根。如果判别式大于零,有两组不同的实数解;等于零时,有一个重根;小于零时,则表示没有实数根,返回一对复数解。
阅读全文