C++程序:求解一元二次方程的所有根


一元二次方程的形式为 ax2 + bx + c。一元二次方程的根由以下公式给出:

Quadratic Equation

共有三种情况:

b2 < 4*a*c - 根是非实数,即复数。

b2 = 4*a*c - 根是实数,且两个根相同。

b2 > 4*a*c - 根是实数,且两个根不同。

求解一元二次方程根的程序如下所示。

示例

#include<iostream>
#include<cmath>
using namespace std;
int main() {
   int a = 1, b = 2, c = 1;
   float discriminant, realPart, imaginaryPart, x1, x2;
   if (a == 0) {
      cout << "This is not a quadratic equation";
   }else {
      discriminant = b*b - 4*a*c;
      if (discriminant > 0) {
         x1 = (-b + sqrt(discriminant)) / (2*a);
         x2 = (-b - sqrt(discriminant)) / (2*a);
         cout << "Roots are real and different." << endl;
         cout << "Root 1 = " << x1 << endl;
         cout << "Root 2 = " << x2 << endl;
      } else if (discriminant == 0) {
         cout << "Roots are real and same." << endl;
         x1 = (-b + sqrt(discriminant)) / (2*a);
         cout << "Root 1 = Root 2 =" << x1 << endl;
      }else {
         realPart = (float) -b/(2*a);
         imaginaryPart =sqrt(-discriminant)/(2*a);
         cout << "Roots are complex and different." << endl;
         cout << "Root 1 = " << realPart << " + " << imaginaryPart << "i" <<end;
         cout << "Root 2 = " << realPart << " - " << imaginaryPart << "i" <<end;
      }
   }
   return 0;
}

输出

Roots are real and same.
Root 1 = Root 2 =-1

在上述程序中,首先计算判别式。如果判别式大于0,则两个根都是实数且不同。

以下代码片段演示了这一点。

if (discriminant > 0) {
   x1 = (-b + sqrt(discriminant)) / (2*a);
   x2 = (-b - sqrt(discriminant)) / (2*a);
   cout << "Roots are real and different." << endl;
   cout << "Root 1 = " << x1 << endl;
   cout << "Root 2 = " << x2 << endl;
}

如果判别式等于0,则两个根都是实数且相同。以下代码片段演示了这一点。

else if (discriminant == 0) {
   cout << "Roots are real and same." << endl;
   x1 = (-b + sqrt(discriminant)) / (2*a);
   cout << "Root 1 = Root 2 =" << x1 << endl;
}

如果判别式小于0,则两个根都是复数且不同。以下代码片段演示了这一点。

else {
   realPart = (float) -b/(2*a);
   imaginaryPart =sqrt(-discriminant)/(2*a);
   cout << "Roots are complex and different." << endl;
   cout << "Root 1 = " << realPart << " + " << imaginaryPart << "i" << endl;
   cout << "Root 2 = " << realPart << " - " << imaginaryPart << "i" << endl;
}

更新于:2020年6月24日

8K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告