真无奈编出了这个疑难杂症#include <math.h>
float p,q,r,s,h,x1,x2;
main()
{ float a,b,c;
float root1(float,float);
float root2(float,float);
float root3(float,float);
printf(“please input 3 numbers\n”);
scanf(“%f%f%f”,&a,&b,&c);
h=b*b-4*a*c;
if(h>0)
{ root1(a,b);
printf(“%f%f”,r,s);
}
else if(h==0)
{ root2(a,b);
printf(“%5f”,r);
}
else
{ root3(a,b);
printf(“x1=%5.2f+%5.2fi\tx2=%5.2f-%5.2fi\n”,p,q,p,q);
}
}
float root1(float a,float b)
{ r=(-b+sqrt(h))/(2*a);
s=(b+sqrt(h))/(2*a);
}
float root2(float a,float b)
{ r=s=(-b)/(2*a);
}
float root3(float a,float b)
{ p=-b/(2*a);
q=sqrt(h)/(2*a);
}
运行时每一步都对,就是一运行显示domain floaterror,那位高手能帮忙解决一下阿
>> 本文固定链接: http://www.vcgood.com/archives/1707
你看你程序中的这条scanf(“%f%f%f”,&a,&b,&c);
当我把123写入时你说到底是把1给a还是把123给a了?这个你最好加上逗号!其它的我还没有分析呢!scanf(“%f,%f,%f”,&a,&b,&c);这样不过在输入的时候你也得加上逗号!
看了下你的程序在我的电脑上还能用,没有报错!
本来就不报错,是运行时出现问题
是不是这个问题啊:
if(h>0)
if(h==0)….
改成 if (h>1e-6)
if (fabs(h)<1e-6)
float型直接与零做比较是要出错的
h<0后你在root3()中还来了个 sqrt(h)
C语言不能处理复数吧