c语言 求一元二次方程的根的问题!!为什么输入1 2 1 还是输出不同根,=0的那个没用了?????、求纠错

# include<stdio.h>
# include<math.h>
int main()
{
double a,b,c,p,q,disc,x1,x2;
scanf("%lf%lf%lf",&a,&b,&c);
disc=b*b-4*a*c;
if(disc<0)
printf("This equation hasn't real roots!\n");
else
if(disc=0)
{
p=-b/(2*a);
x1=x2=p;
printf("This equation has two identical roots:\nx1=x2=%5.4f\n",x1);
}
else
{
p=-b/(2*a);
q=sqrt(disc)/(2*a);
x1=p+q;x2=p-q;
printf("This equation has two different roots:\nx1=%5.4f\nx2=%5.4f\n",x1,x2);
}
return 0;
}

第1个回答  2012-03-31
你是学习用的,我没有必要教你怎么省代码或提高效率。和一楼一样我也发现if(disc=0)这个必须改过来,建义你以后写这种表达式把常量写在前面如if(0 == disc)这样如果你少写一个等号是编译不过的。还有你的if 和else应该用括号{}括住不管有多少条语句,要不然以后你会吃大亏的。除非你非常内行。
第2个回答  2012-03-31
scanf("%lf%lf%lf",&a,&b,&c);
改为scanf("%lf,%lf,%lf",&a,&b,&c);
注意逗号!
if(disc=0)
改为if(disc==0)
==表示判断
=是赋值本回答被提问者采纳
第3个回答  2012-03-31
一元二次方程至于这么麻烦吗,
#include <math.h>
void main()
{
float a,b,c,d,x1,x2;
scanf("%f,%f,%f",&a,&b,&c);
d=b*b-4*a*c;
x1=(-b+sqrt (d))/(2*a);
x2=(-b-sqrt (d))/(2*a);
printf("x1=%f,x2=%f\n",x1,x2);
}

看看我写的能用不?能用给个最佳答案吧!
第4个回答  2012-03-31
一楼的回答是对的,二楼的回答很棒,多多学习啊
相似回答