注册 登录
编程论坛 C++教室

一元二次方程,为什么错了?

Jason_ 发布于 2021-01-31 15:15, 1285 次点击
程序代码:
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main(){
    double a,b,c,d,x1,x2;
    cin>>a>>b>>c;
    x1=(-b+sqrt(b*b-4*a*c))/(2*a);
    x2=(-b-sqrt(b*b-4*a*c))/(2*a);
    d=b*b-4*a*c;
    if(d<0){
        cout<<"No answer!";
    }
    else{
        if(x1==x2){
        printf("x1=x2=%.5f",x1);
    }
        else{
            if(x1>x2){
                printf("x2=%.5f;x1=%.5f",x2,x1);
            }
            if(x1<x2){
                printf("x1=%.5f;x2=%.5f",x1,x2);
            }
        }
    }
    return 0;
}

题目链接:http://ybt.

[此贴子已经被作者于2021-1-31 15:21编辑过]

1 回复
#2
rjsp2021-02-01 08:43
double sqrt( double arg );
若 arg 小于零则,则返回实现定义值(支持的平台上为 NaN )。


    x1=(-b+sqrt(b*b-4*a*c))/(2*a);
    x2=(-b-sqrt(b*b-4*a*c))/(2*a);
    d=b*b-4*a*c;
    if(d<0){
        cout<<"No answer!";
    }

很明显,先判断 b*b-4*a*c 大于等于0,才可以使用 sqrt(b*b-4*a*c)
1