一元二次方程的解法(c++)
一、直接求解
解一个一元二次方程可能会有以下4种情况:
-
a
=
0
a=0
a=0 退化成一元一次方程
当 b b b也为0时,为一个非法方程,否则根为 − c b \frac{-c}{b} b−c; - b 2 − 4 a c = 0 b^2-4ac=0 b2−4ac=0,有两个相等的实根
- b 2 − 4 a c > 0 b^2-4ac>0 b2−4ac>0,有两个不等实根
- b 2 − 4 a c < 0 b^2-4ac<0 b2−4ac<0,无解
代码如下:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double a, b, c, dlt, x1, x2;
cout << "请输入方程的三个系数:" << endl;
cin >> a >> b >> c;
if (a == 0)
{
if (b = 0) cout << "非法方程";
else cout << "此方程为一元二次方程,x=" << -c / b << endl;
}
else
{
dlt = b * b - 4 * a * c;
if (dlt > 0) //有两个不相等实根
{
x1 = (-b + sqrt(dlt)) / 2 / a;
x2 = (-b - sqrt(dlt)) / 2 / a;
cout << "x1=" << x1 << " " << "x2=" << x2 << endl;
}
else if (dlt == 0) //有两个相等实根
{
cout << "x1=x2=" << -b / a / 2 << endl;
}
else cout << "无解" << endl; //无解
}
return 0;
}
运行结果如下:
二、设计函数
代码如下:
#include <iostream>
#include <cmath>
using namespace std;
int SolveQuadratic(double a, double b, double c, double* px1, double* px2);
int main()
{
double a, b, c, x1, x2;
int result;
cout << "请输入方程的三个系数:" << endl;
cin >> a >> b >> c;
result = SolveQuadratic(a, b, c, &x1, &x2);//引用传递
//用result来指示解的个数
switch (result) {
case 0:cout << "方程有两个不同根:x1=" << x1 << " " << "x2=" << x2; break;
case 1:cout << "方程有两个等根:x1=x2=" << x1; break;
case 2:cout << "方程无根"; break;
case 3:cout << "不是一元二次方程";
}
}
//下面是一个解一元二次方程的函数,a,b,c是方程的系数,px1和px2是存放方程解的地址
//函数的返回值表示根的情况(见main函数的switch语句)
int SolveQuadratic(double a, double b, double c, double* px1, double* px2) {
double disc;
if (a == 0) return 3;//不是一元二次方程
disc = b * b - 4 * a * c;//求判别式的值
if (disc < 0) return 2;//无根
if (disc == 0) {
*px1= (-b + sqrt(disc)) / 2 / a;
return 1;//等根
}
else if (disc > 0) {
*px1 = (-b + sqrt(disc)) / 2 / a;
*px2 = (-b - sqrt(disc)) / 2 / a;
return 0;
}
}
运行结果如下: