解一元二次方程,为什么当K<0时,运算结果里面也出现K=0时的结果呢?错误在哪里??
答案:2 悬赏:40 手机版
解决时间 2021-04-07 14:15
- 提问者网友:寂寞梧桐
- 2021-04-06 13:32
解一元二次方程,为什么当K<0时,运算结果里面也出现K=0时的结果呢?错误在哪里??
最佳答案
- 五星知识达人网友:忘川信使
- 2021-04-06 14:32
把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个实数:
");
scanf("%f%f%f",&a,&b,&c);
k = sqrt(b*b-4*a*c);
if(a==0)
{
x=-b/c;
printf("此方程1的根为:%f
",x);
}
else
{
if(k>0)
{
y=(-b+k)/(2*a);
z=(-b-k)/(2*a);
printf("此方程2的根为:%f,%f
",y,z);
}
if(k==0)
{
x=-b/(2*a);
printf("此方程3的根为:%f
",x);
}
else //此处改成else
printf("此方程4无解
");
}
return 0;
}追问改成else后,我给的a,b,c3个数满足b*b-4*a*c<0,但是运行结果是此方程3的结果,else的结果没有了追答你给个运行截图看看追问
第一张为改成else的结果,第二张是改之前的追答你确定是按我说的修改的吗,请看我的运行截图:
追问这样啊,那我再修改看看,但是能不能解释下为什么会出现最开始的问题?这样以后才能避免,谢谢追答
追问明白了,非常感谢
#include
#include
int main(void)
{
float a,b,c,x,y,z;
double k;
printf("请输入3个实数:
");
scanf("%f%f%f",&a,&b,&c);
k = sqrt(b*b-4*a*c);
if(a==0)
{
x=-b/c;
printf("此方程1的根为:%f
",x);
}
else
{
if(k>0)
{
y=(-b+k)/(2*a);
z=(-b-k)/(2*a);
printf("此方程2的根为:%f,%f
",y,z);
}
if(k==0)
{
x=-b/(2*a);
printf("此方程3的根为:%f
",x);
}
else //此处改成else
printf("此方程4无解
");
}
return 0;
}追问改成else后,我给的a,b,c3个数满足b*b-4*a*c<0,但是运行结果是此方程3的结果,else的结果没有了追答你给个运行截图看看追问
第一张为改成else的结果,第二张是改之前的追答你确定是按我说的修改的吗,请看我的运行截图:
追问这样啊,那我再修改看看,但是能不能解释下为什么会出现最开始的问题?这样以后才能避免,谢谢追答
追问明白了,非常感谢
全部回答
- 1楼网友:青灯有味
- 2021-04-06 15:39
(2x+k)^2=1-k等号左侧为完全平方是非负数故方程的解的个数完全由1-k的正负决定。1-k>0时方程有两个不相等的实数根1-k=0是有两个相等的实数根1-k<0时无实数根也可用判别式确定。追问额,没看懂。原题是求ax^2+bx+c=0 的根,当b^2-4ac>0时有2个解,b^2-4ac=0有1个解,b^2-4ac<0时无解,我把b^2-4ac赋值给K,那么当K<0时应该显示此方程无解,但是我运行程序当K<0时,运行结果同时显示K=0和k<0的结果,我想知道程序哪里错了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯