利用公式 :
x 1 = ? b + b 2 ? 4 a c 2 a , x 2 = ? b ? b 2 ? 4 a c 2 a x_1=\frac{-b+\sqrt{b^2-4ac}}{2a} , x_2=\frac{-b-\sqrt{b^2-4ac}}{2a} x1?=2a?b+b2?4ac??,x2?=2a?b?b2?4ac??
求一元二次方程 a x 2 + b x + c = 0 ax^2+bx+c=0 ax2+bx+c=0 的根,其中 a a a 不等于 0 0 0。结果要求精确到小数点后 5 5 5 位。
输入一行,包含三个浮点数 a , b , c a,b,c a,b,c(它们之间以一个空格分开),分别表示方程 a x 2 + b x + c = 0 ax^2+bx+c=0 ax2+bx+c=0 的系数。
输出一行,表示方程的解。
若两个实根相等,则输出形式为:x1=x2=aaaa
;
若两个实根不等,在满足根小者在前的原则,则输出形式为:x1=aaaa;x2=bbbb
;
若无实根输出 No answer!
。
所有输出部分要求精确到小数点后 5 5 5 位,数字、符号之间没有空格。
-15.97 19.69 12.02
x1=-0.44781;x2=1.68075
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
double a,b,c;
int main() {
cin>>a>>b>>c;
double delta=b*b-4*a*c;
if (delta>0) {
double x1=(-b+sqrt(delta))/(2*a);
double x2=(-b-sqrt(delta))/(2*a);
if (x1>x2) {
swap(x1,x2);
}
printf("x1=%.5lf;x2=%.5lf",x1,x2);
} else if (delta==0) {//delta为零其根也为零,所以x1=x2
double x1=(-b+sqrt(delta))/(2*a);
double x2=(-b-sqrt(delta))/(2*a);
printf("x1=x2=%.5lf",x1);
} else {
cout<<"No answer!";//delta小于零
}
return 0;
}