实验3-1 求一元二次方程的根 (20分)

    技术2025-11-08  22

     这题让我见识了C语言令我头疼的一个小点

    #include <stdio.h> #include <math.h> int main() { double a,b,c; scanf("%lf %lf %lf",&a,&b,&c); if (a==0) { if(b==0){ if(c==0){ printf("Zero Equation"); } else { printf("Not An Equation"); } } else { printf("%.2f",(-c)/b); } } else { double data; data = pow(b,2) - (4*a*c); if (data==0) { printf("%.2f",(-b)/(2*a)); } else if (data>0) { double x1,x2; x1 = ((-b)+sqrt(data))/(2*a); x2 = ((-b)-sqrt(data))/(2*a); if (x1<x2) { int t=x1; x1 = x2; x2 = t; } printf("%.2f\n",x1); printf("%.2f",x2); } else { double m=(-b)/(2*a); double n=sqrt(-data)/(2*a); printf("%.2f+%.2fi\n",m,n); printf("%.2f-%.2fi",m,n); } } }

     这时候所验证的结果如下图

     

    纯虚根时有错,然后我就以为纯虚根时,实部不需要输出,所以我就改了一下部分代码

    else { double m=(-b)/(2*a); double n=sqrt(-data)/(2*a; if (m==0) { printf("%.2fi\n",n); printf("-%.2fi",n); } else { printf("%.2f+%.2fi\n",m,n); printf("%.2f-%.2fi",m,n); } }

    但还是没有解决问题,耽误了很多时间后,才知道C语言的“-0”

    是真的输出成“-0”的,他不会帮你转换成“0”

    也就是说

    float a = 0.00; printf("%.2f",-a); //输出结果为# -0.00 #

    所以这才是一直导致我纯虚根验证错误的愿意,再改进一下代码,就可以了。

    else { double m=(-b)/(2*a); double n=sqrt(-data)/(2*a; if (m==0) { printf("0.00+%.2fi\n",n); printf("0.00-%.2fi",n); } else { printf("%.2f+%.2fi\n",m,n); printf("%.2f-%.2fi",m,n); } }

     

    Processed: 0.017, SQL: 9