【题目描述】

利用公式 求一元二次方程 的根,其中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;
 }

发表评论