#include<stdlib.h>
#include<math.h>
int main()
{
float a,b,c,x,x1,x2,d
scanf("%f %f %f",&a,&b,&c)
d=b*b-4*a*c
if(a==0)
{
if(b==0)
{
if(0==c)
{
printf("等式0!\n")
}
else
{
printf("输入错误!\n")
}
}
else
{
printf("只能构成一元一次方程,x=%.6f\n",0==-(float)c/b ? 0 : -(float)c/b)
}
}
else
{
if(d<0)
{
x1=(-b+sqrt(-d))/(2.0*a)
x2=(-b-sqrt(-d))/(2.0*a)
printf("x1=%.6f+%.6fi\nx2=%.6f-%.6fi\n",(-b)/(2.0*a),sqrt(-d)/(2.0*a),(-b)/(2.0*a),sqrt(-d)/(2.0*a))
}
else if(d==0)
{
printf("x1=x2=%.6f\n",(-b)/(2.0*a))
}
else
{
x1=(-b+sqrt(d))/(2.0*a)
x2=(-b-sqrt(d))/(2.0*a)
printf("x1=%.6f\nx2=%.6f\n",x1,x2)
}
}
system("PAUSE")
return EXIT_SUCCESS
}
你没有考虑a=0的情况,我把我写的给你看看,你看看有什么不同吧:#include<stdio.h>
#include<math.h>
main()
{
int a,b,c
double DT,x,x1,x2
scanf("%d %d %d",&a,&b,&c)
DT=b*b-4*a*c
if((a==0)&&(b==0))
printf("Input error!\n")
else
{
if(a==0)
{ x=-c/(1.*b)
printf("x=%.6f\n",x)
}
else
{
if(DT==0)
{x=-b/(2*a)
printf("x1=x2=%.6f\n",x)
}
if(DT>0)
{ x1=(-b+sqrt(DT))/(2*a)
x2=(-b-sqrt(DT))/(2*a)
printf("x1=%.6f\nx2=%.6f\n",x1,x2)
}
if((DT<0)&&(b==0))
{DT=-DT
x1=(sqrt(DT))/(2*a)
x2=(-sqrt(DT))/(2*a)
printf("x1=%.6fi\nx2=%.6fi\n",x1,x2)
}
if((DT<0)&&(b!=0))
{DT=-DT
x1=-b/(2.*a)
x2=sqrt(1.*DT)/(2*a)
printf("x1=%.6f+%.6fi\nx2=%.6f-%.6fi\n",x1,x2,x1,x2)
}
}
}
return 0
}
具体的输入输出格式可能不一样,因为不清楚你的要求,有疑问可以问我