解一元二次方程,为什么当K<0时,运算结果里面也出现K=0时的结果呢?错误在哪里??

2025-04-04 02:57:26
推荐回答(2个)
回答1:

把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;
}

回答2:

(2x+k)^2=1-k等号左侧为完全平方是非负数故方程的解的个数完全由1-k的正负决定。1-k>0时方程有两个不相等的实数根1-k=0是有两个相等的实数根1-k<0时无实数根也可用判别式确定。