问题描述
- C语言代码,新手,帮忙看看哪里有错误
-
#include
#include
int main()
{
double a,b,c,disc,x1,x2,realpart,imagpart;
scanf("%lf,%lf,%lf",&a,&b,&c);
printf("The equation");
if(fabs(a)<=1e-6)
printf("is not a quadratic.
");
else
{
disc=b*b-4*a*c;
if(fabs(disc)<=1e-6)
printf(" has two equal roots:%8.4f
",-b/(2*a));
else if(fabs(disc)>1e-6)
{
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf(" has two toots:%8.4fand%8.4f
",x1,x2);
}
else
{
realpart=-b/(2*a);
imagpart=(b*b-4*a*c)/(2*a);
printf(" has complex roots:
");
printf("%8.4f+%8.4fi",realpart,imagpart);
printf("%8.4f-%8.4fi",realpart,imagpart);
}
}
return 0;
}
解决方案
你的代码的错误点在于这两句:
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
根据你提供的数据,b^2 - 4ac = 3*3-4*1*6 = -15;
而sqrt()函数的定义是:
double sqrt( double num );
功能: 函数返回参数num的平方根。如果num为负,产生域错误。
有num为负数了,所以sqrt()函数计算出错。
解决方案二:
大家帮忙看看下面的代码
解决方案三:
谢谢各位的耐心解答,问题终结了,修改几处就好了
else if(fabs(disc)>1e-6) 改为 else if(disc>1e-6) 绝对值去掉,防止disc<0还会进入sqrt函数
解决方案四:
楼主,你输入的三个值,只有a有给值,b跟c都是0
scanf("%lf,%lf,%lf",&a,&b,&c);中的两个逗号去掉。改成scanf("%lf%lf%lf",&a,&b,&c);
时间: 2024-09-28 17:51:39