一元二次方程的解(超详细)
这里我把方程的虚数解也考虑进去了。(Ax²+Bx+C=0)
一元二次方程解就三种情况:
①△>0,方程有两个实数解;
②△=0,方程有一个实数解;
③△<0,方程有两个虚数解。
但为了避免输出的时候虚数解的实部为0,
还要把A,B,C为0的情况进行考虑。
下面是考虑0部分的代码:
int check(double A, double B, double C) //判断A,B,C为0的情况
{
if (A == 0)
{
cout << "该函数不是一元二次函数!";
exit(0);
}
else if (B == 0 && C == 0)
{
cout << "方程有一个实数根,x=0" << endl;
exit(0);
}
else if (B == 0)
{
//两个p其实就是△判别式,±是考虑了根号里面的正负
if (A * C > 0)
{
double p;
p = (-1) * (4 * A * C);
cout << "该方程有两个虚数根,其中";
cout << "x1=" << sqrt(-p) / (2 * A) << "i ";
cout << " x2=" << sqrt(-p) / ((-1) * (2 * A)) << "i" << endl; //确保两个解符号相反
exit(0);
}
else
{
double p;
p = 4 * A * C;
cout << "该方程有两个实数根,其中";
cout << "x1=" << sqrt(-p) / (2 * A);
cout << " x2=" << sqrt(-p) / ((-1) * (2 * A)) << endl;
exit(0);
}
}
else if (C == 0)
{
cout << "函数有两个不同的实数根:";
cout << "x1=0 x2=" << (-B) / A << endl;
exit(0);
}
}
A,B,C都不为0的代码:
int check1(double A, double B, double C) //A,B,C都不为0的情况的解
{
double p;
p = B * B - 4 * A * C; //一元二次方程解的判别式
if (p > 0)
{
double x1, x2;
cout << "方程有两个实数根:" ;
x1 = (-B + sqrt(p)) / (2 * A);
x2 = (-B - sqrt(p)) / (2 * A);
cout << "x1=" << x1 << " x2=" << x2 << endl;
exit(0);
}
else if (p == 0)
{
double x = ((-1) * B) / (A * 2);
cout << "方程有一个实数根:x=" ;
cout << x << endl;
exit(0);
}
else
{
double x1, x2;
//x1 = +sqrt(-p) / (2 * A);
//x2 = (-B - i * sqrt(-p)) / (2 * A);
cout << "方程有一个虚数根:";
cout << "x1=" << ((-1) * B) / (2 * A) << "+" << sqrt(-p) / (2 * A) << "i ";
cout << "x2=" << ((-1) * B) / (2 * A) << (-1) * sqrt(-p) / (2 * A) << "i" << endl;
exit(0);
}
}
主函数:
int main()
{
double A, B, C; //一元二次方程输出可能不是整数,为了避免后面错误,直接定义为double
cout << "请输入A,B,C的值:";
cin >> A >> B >> C;
check(A, B, C);
check1(A, B, C);
return 0;
}
总感觉有点繁琐,还有其他想法的欢迎评论区讨论。