C语言求解一元二次方程的根
以下是一个用C语言编写的一元二次方程求根程序,可以处理实数和复数根的情况:

(图片来源网络,侵删)
#include <stdio.h>
#include <math.h>
int main() {
double a, b, c;
double discriminant, realPart, imagPart;
// 输入方程系数
printf("请输入一元二次方程的系数 a, b, c: ");
scanf("%lf %lf %lf", &a, &b, &c);
// 计算判别式
discriminant = b * b - 4 * a * c;
// 处理a=0的情况(退化为一次方程)
if (a == 0) {
if (b == 0) {
if (c == 0) {
printf("方程有无穷多解,\n");
} else {
printf("方程无解,\n");
}
} else {
printf("方程的解为: x = %.2lf\n", -c / b);
}
return 0;
}
// 处理判别式大于0的情况(两个不同的实数根)
if (discriminant > 0) {
double root1 = (-b + sqrt(discriminant)) / (2 * a);
double root2 = (-b - sqrt(discriminant)) / (2 * a);
printf("方程有两个不同的实数根:\n");
printf("x1 = %.2lf\n", root1);
printf("x2 = %.2lf\n", root2);
}
// 处理判别式等于0的情况(两个相同的实数根)
else if (discriminant == 0) {
double root = -b / (2 * a);
printf("方程有两个相同的实数根:\n");
printf("x1 = x2 = %.2lf\n", root);
}
// 处理判别式小于0的情况(两个共轭复数根)
else {
realPart = -b / (2 * a);
imagPart = sqrt(-discriminant) / (2 * a);
printf("方程有两个共轭复数根:\n");
printf("x1 = %.2lf + %.2lfi\n", realPart, imagPart);
printf("x2 = %.2lf - %.2lfi\n", realPart, imagPart);
}
return 0;
}
程序说明
-
输入处理:程序首先要求用户输入一元二次方程的系数a、b、c。
-
特殊情况处理:
- 当a=0时,方程退化为一次方程或常数方程
- 当b=0且c=0时,方程有无穷多解
- 当b=0且c≠0时,方程无解
- 当a≠0且b≠0时,方程为一次方程,解为x=-c/b
-
判别式计算:计算判别式Δ = b² - 4ac
-
根的情况处理:
(图片来源网络,侵删)- Δ > 0:两个不同的实数根
- Δ = 0:两个相同的实数根
- Δ < 0:两个共轭复数根
-
输出结果:根据不同情况输出相应的根
示例运行
示例1(两个实数根):
请输入一元二次方程的系数 a, b, c: 1 -3 2
方程有两个不同的实数根:
x1 = 2.00
x2 = 1.00
示例2(复数根):
请输入一元二次方程的系数 a, b, c: 1 2 5
方程有两个共轭复数根:
x1 = -1.00 + 2.00i
x2 = -1.00 - 2.00i
示例3(一次方程):

(图片来源网络,侵删)
请输入一元二次方程的系数 a, b, c: 0 2 4
方程的解为: x = -2.00
注意:此程序需要链接数学库(在编译时可能需要添加-lm选项)。
