【题目描述】
利用公式x1=−b+√b*b−4ac/2a,x2=−b−√b*b−4ac/2a,求一元二次方程a*x*x+b*x+c=0的根,其中a不等于0。结果要求精确到小数点后5位。
【输入】
输入一行,包含三个浮点数a,b,c(它们之间以一个空格分开),分别表示方程a*x*x+b*x+c=0的系数。
【输出】
输出一行,表示方程的解。
若两个实根相等,则输出形式为:“x1=x2=...”;
若两个实根不等,在满足根小者在前的原则,则输出形式为:“x1=...;x2=....“;
若无实根输出“No answer!”。
所有输出部分要求精确到小数点后5位,数字、符号之间没有空格。
【输入样例】
-15.97 19.69 12.02
【输出样例】
x1=-0.44781;x2=1.68075
就是三种情况,失败了10多次呢
#include<iostream> #include<cmath> using namespace std; int main() { double a,b,c,x,y,k; scanf("%lf%lf%lf",&a,&b,&c); y=b*b-4*a*c; if(y==0) printf("x1=x2=%.5f",(-b)/(2*a)); else if(y>0) { x=(-b+sqrt(y))/(2*a); k=(-b-sqrt(y))/(2*a); double tmp; if(x>k) { tmp=x; x=k; k=tmp; } printf("x1=%.5f;x2=%.5f",x,k); } else printf("No answer!"); return 0; }