一个关于C语言的问题

用户输入一元二次方程ax^2+bx+c=0的系数a b c. 编写程序判断该方程在实数范围内是否有根并输出其实数根.


#include <stdio.h>
#include <math.h>
int main()
{
    double disc, a, b, c, p, q, x1, x2;
    printf("请输入a和b和c的值:\n");
    scanf("%lf %lf %lf", &a, &b, &c);
    disc = b * b - 4 * a * c;
    if (disc < 0)
        printf("改方程无实数根\n");
    else
    {
        p = (-b) / (2 * a);
        q = sqrt(disc) / (2 * a);
        x1 = p + q;
        x2 = p - q;
        printf("x1=%7.2f\nx2=%7.2f\n", x1, x2);
    }
    return 0;
}

#include<stdio.h>
#include<math.h>
int main() {
    double a, b, c, d, x1, x2;
    scanf("%lf %lf %lf", &a, &b, &c);
    d = b * b - 4 * a * c;
    if(d < 0) {
        printf("无实数根");
    } else {
        d = sqrt(d);
        x1 = (-b + d) / (2 * a);
        x2 = (-b - d) / (2 * a);
        printf("%.2lf %.2lf", x1, x2);
    }
    return 0;
}

一元二次方程公式解
x=(-b±√(b^2-4ac))/2a,
其中Δ=b^2-4ac,
输入abc后带入delta判别式并判正负,负数直接无根,
正数带入算一下

...
#include <stdio.h>

int main()
{
    double a,b,c;
    scanf("%lf%lf%lf",&a,&b,&c);
    double delta=b*b-4*a*c;//delta判别式
    if(delta<0) printf("No answer in R!");
    else {
        delta=sqrt(delta);//开方
        double     x1=(-b+delta)/(a*2);
        double  x2=(-b-delta)/(a*2);
        printf("x1=%.2lf\n",x1);
        if(x1!=x2) printf("x2=%.2lf\n",x2);
    }
    return 0;
}

根据公式 $x_{1,2}=\tfrac{-b\pm\sqrt{b^2-4ac}}{2a}$ 可编写程序求解。
当 $\sqrt{b^2-4ac} <0$ 时,无实数解。