这题让我见识了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); } }
