【题目描述】
利用公式 求一元二次方程 的根,其中a不等于0。结果要求精确到小数点后5位
【输入】
输入一行,包含三个浮点数a,b,c(它们之间以一个空格分开),分别表示方程 的系数。
【输出】
输出一行,表示方程的解。
若两个实根相等,则输出形式为:“*x1=x2=...
”;
若两个实根不等,在满足根小者在前的原则,则输出形式为:x1=...;x2=...
;
若无实根输出“No answer!”。
所有输出部分要求精确到小数点后5位,数字、符号之间没有空格。
【输入样例】
-15.97 19.69 12.02
【输出样例】
x1=-0.44781;x2=1.68075
注:这题我不会,摘抄的答案呃呃。
原位置点此进入
解:
#include <cstdio>
#include <cmath>
#define eps1 1e-10
#define eps2 1e-6
using namespace std;
int main(){
double a,b,c,x1,x2,g;
scanf("%lf%lf%lf",&a,&b,&c);
g=b*b-4*a*c;
if(g<0&&fabs(g)>eps1)printf("No answer!");
else if(fabs(g)<eps1){
x1=-b/(2*a);
if(fabs(x1)<eps2)
printf("x1=x2=%.5lf",0);
else
printf("x1=x2=%.5lf",x1);
}
else{
x1=(-b+sqrt(g))/(2*a);
x2=(-b-sqrt(g))/(2*a);
if(fabs(x1)<eps2)x1=fabs(x1);
if(fabs(x2)<eps2)x2=fabs(x2);
if(x1<x2)printf("x1=%.5lf;x2=%.5lf",x1,x2);
else printf("x1=%.5lf;x2=%.5lf",x2,x1);
}
return 0;
}
最新回复