#include
#include
float x1,x2,disc,realpart,imagpart;//全局变量
float great_than_zero(float a,float b)//disc>0时的函数
{
x1=(float)(-b+sqrt(disc))/(2*a);//(v6默认是double型),强制类型转换使数类型据统一
x2=(float)(-b-sqrt(disc))/(2*a);
return(0);
}
float equal_to_zero(float a,float b)//disc=0时的函数
{
x1=x2=-b/(2*a);
return(0);
}
float smaller_than_zero(float a,float b)//disc<0时的函数
{
realpart=-b/(2*a);//复根的实部
imagpart=(float)sqrt(-disc)/(2*a);//复根的虚部
return(0);
}
int main()
{
float a,b,c;
int flag=1;
while(flag)
{
printf("input a,b,c:");
scanf("%f%f%f",&a,&b,&c);
printf("the equation:");
if(fabs(a)<=1e-6)
printf("is not a quadratic.input date again!\n");
else
{
printf("%5.2f*x*x+%5.2f*x+%5.2f=0\n",a,b,c);
printf("root:");
disc=b*b-4*a*c;
if(disc>0)
{
great_than_zero(a,b);
printf("has distinct real roots:x1=%5.2f\tx2=%5.2f\n",x1,x2);
}
else if(fabs(disc)<=1e-6)
{
equal_to_zero(a,b);
printf("has two equal roots:x1=x2=%5.2f\n",x1,x2);
}
else
{
smaller_than_zero(a,b);
printf("hascomplex roots:x1=%5.2f+%5.2fi\tx2=%5.2f-%5.2fi\n",realpart,imagpart,realpart,imagpart);
}
flag=0;
}
}
}
运行如下: