把if(k<0)改成else试试,因为前面列举了k>0与k==0的情况,只剩下k<0的情况了,修改后的代码如下:
#include
#include
int main(void)
{
float a,b,c,x,y,z;
double k;
printf("请输入3个实数:\n");
scanf("%f%f%f",&a,&b,&c);
k = sqrt(b*b-4*a*c);
if(a==0)
{
x=-b/c;
printf("此方程1的根为:%f\n",x);
}
else
{
if(k>0)
{
y=(-b+k)/(2*a);
z=(-b-k)/(2*a);
printf("此方程2的根为:%f,%f\n",y,z);
}
if(k==0)
{
x=-b/(2*a);
printf("此方程3的根为:%f\n",x);
}
else //此处改成else
printf("此方程4无解\n");
}
return 0;
}
(2x+k)^2=1-k等号左侧为完全平方是非负数故方程的解的个数完全由1-k的正负决定。1-k>0时方程有两个不相等的实数根1-k=0是有两个相等的实数根1-k<0时无实数根也可用判别式确定。