快递客服经理:看一看C++代码吧

来源:百度文库 编辑:中科新闻网 时间:2024/05/07 08:39:19
#include "math.h"
float X1,X2,Disc,P,Q;
greater_than_zero(float a,float b)
{X1=(-b+sqrt(Disc))/(2*a);
X2=(-b-sqrt(Disc))/(2*a);
}
equal_to_zero(float a,float b)
{X1=X2=(-b)/(2*a);}
smaller_than_zero(float a,float b)
{P=-b/(2*a);
Q=sqrt(Disc)/(2*a);
}
main()
{float a,b,c;
printf("\nInput a,b,c:");
scanf("%f %f %f",&a,&b,&c);
Disc=b*b-4*a*c;
printf("Fangcheng de jie is:\n");
if(Disc>0)
{greater_than_zero(a,b);
printf("X1=%5.2f\tX2=%5.2f\n",X1,X2);
}
else if(Disc==0)
{equal_to_zero(a,b);
printf("X1=%5.2f\tX2=%5.2f\n",X1,X2);
}
else
{ smaller_than_zero(a,b);
printf("X1=%5.2f\tX2=%5.2f\n",P,Q);
}
}
程序有问题,当输入a,b,c时若输入的小于零,它出现sqrt: DOMAIN error 的警示语,不明白。还有前面的定义的函数中的形式参数,应该还有简单方法吧,我用的是不是很麻烦。

你的Disc都小于0了,就不要再求sqrt(Disc)了,sqrt是求平方根的,小于0的数自然求不出,出错是当然的,delta小于0的方程是无解的,把
else
{ smaller_than_zero(a,b);
printf("X1=%5.2f\tX2=%5.2f\n",P,Q);
}
改成
else
{
printf("方程无解就行了");
}
还有就是你的a和b也可以设成全局变量,这样一来你自己的三个函数就用不着传递参数了,方便多了吧

问题出在函数smaller_than_zero. 在smaller_than_zero中,Q=sqrt(Disc)/(2*a); 给你sqrt: DOMAIN error 的警示语,因为DISC小于0。