c语言求一元二次方程

img


#include<stdio.h>
#include<math.h>
int main(void)
{
    double a,b,c,d,x1,x2,x;
    scanf("%lf %lf %lf",&a,&b,&c);
    d=b*b-4*a*c;
    if(a==0&&b==0&&c==0)
    printf("Zero Equation");
    else if(a==0&&b==0&&c!=0)
    printf("Not An Equation");
    else if(d>0)
    {
        x1=(-b+sqrt(d))/(2*a);
        x2=(-b-sqrt(d))/(2*a);
        if(x1>x2)
        printf("%.2lf\n%.2lf",x1,x2);
        else
         printf("%.2lf\n%.2lf",x2,x1);
    }
    else if(d==0)
    {
    x=b/(2*a);
printf("%.2lf",x);
}
else if(d<0)
{
        x1=(-b+sqrt(d))/(2*a);
        x2=(-b-sqrt(d))/(2*a);
        printf("0.0+%.2lfi\n0.0-%.2lfi",x1,x2);
}
return 0;
}

img


剩下的还是不会


 
#include<stdio.h>
#include<math.h>
int main(void)
{
    double a,b,c,d,x1,x2;
    double eps=1.0e-15;
    scanf("%lf %lf %lf",&a,&b,&c);
    d = fmax(fabs(a),fabs(b));
    d = fmax(d,fabs(c));
    if(d<eps) {
      printf("Zero Equation\n");
      return 0;
    }
    a = a / d;
    b = b / d;
    c = c / d; //归一化
    if(fabs(a)<eps&&fabs(b)<eps) {
      printf("Not An Equation\n");
      return 0;
    }
    d = b*b - 4*a*c;
    if(d>eps) {
      x1=(-b+sqrt(d))/(2*a);
      x2=(-b-sqrt(d))/(2*a);
      if(x1>x2)
        printf("%.2lf\n%.2lf",x1,x2);
      else
        printf("%.2lf\n%.2lf",x2,x1); //两个实根
    }
    else if(d>-eps) {
      x1 = -b / (2*a);
      printf("%.2lf",x1); //一个实根
    }
    else {
      d = fabs(sqrt(-d) / (2*a));
      b = -b / (2*a);
      printf("%.2lf+%.2lfi\n",b,d);
      printf("%.2lf-%.2lfi\n",b,d); //共轭复根
    }
    return 0;
}