C++程序:求解一元二次方程的所有根
一元二次方程的形式为 ax2 + bx + c。一元二次方程的根由以下公式给出:
共有三种情况:
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; }
广告