目描述
一元二次方程式是数学中很重要的知识点,利用公式x1 = (-b + sqrt(b*b-4*a*c))/(2*a), x2 = (-b - sqrt(b*b-4*a*c))/(2*a)求一元二次方程ax^2+ bx + c =0的根,a!=0。
现在需要你编写一个程序用来求一元二次方程的根。
输入格式
输入一行,包括三个浮点数a, b, c(它们之间以一个空格分开),分别表示方程ax^2 + bx + c =0的系数。
输出格式
输出仅一行,表示方程的解。
若b^2 = 4 * a * c,表示有两个相等的实数根,则输出形式为:x1=x2=...。
若b^2 > 4 * a * c,表示有两个不相等的实数根,则输出形式为:x1=...;x2 = ...,其中x1>x2。
若b^2 < 4 * a * c,表示有两个虚根,则输出:x1=实部+虚部i; x2=实部-虚部i,即x1的虚部系数大于等于x2的虚部系数,实部为0时不可省略。实部 = -b / (2*a), 虚部 = sqrt(4*a*c-b*b) / (2*a)
所有实数部分要求保留到小数点后5位,数字、符号之间没有空格。
输入样例#1
样例输入1
16.0 16.0 4.0
样例输入2
10.0 43.0 296.2
16.0 16.0 4.0
样例输入2
10.0 43.0 296.2
输出样例#1
样例输出1
x1=x2=-0.50000
样例输出2
x1=-2.15000+4.99975i;x2=-2.15000-4.99975i
x1=x2=-0.50000
样例输出2
x1=-2.15000+4.99975i;x2=-2.15000-4.99975i
#include<bits/stdc++.h>
using namespace std;
int main()
{
double a , b , c ;
double x1 , x2 ;
cin >> a >> b >> c;
if(b * b == 4 * a * c)
{
x1=-b/(2*a);
cout<<fixed<<setprecision(5)<<"x1=x2="<<x1;
}
else if(b*b>4*a*c)
{
x1 = ( -b + sqrt ( b * b - 4 * a * c ) ) / ( 2 * a );
x2 = (-b - sqrt (b * b - 4 * a * c) ) / (2 * a );
if(x2>x1)
{
swap(x1,x2);
}
cout<<fixed<<setprecision(5)<<"x1="<<x1<<";"<<"x2="<<x2;
}
else
{
double x,y;
x=-b/(2*a);
y=sqrt(4*a*c-b*b)/(2*a);
cout<<fixed<<setprecision(5)<<"x1="<<x<<"+"<<y<<"i;"<<"x2="<<x<<"-"<<y<<"i";
}
}