您的位置:首页 > 编程语言 > C语言/C++

C语言 求解一元二次方程

2015-03-25 20:47 411 查看
求方程a^2+b*x+c=0的解。

a=0,不是一元二次方程;

b^2-4ac=0,有两相等的实根;x1=x2=-2a/b;

b^2-4ac>0,有两不等的实根;

p=-b/2a,q=sqrt(b^2-4ac)/2a;x1=p+q,x2=p-q;

b^2-4ac<0,有两个共轭复根;

p=-b/2a,q=sqrt(4ac-b^2)/2a;x1=p+qi,x2=p-qi

#include <stdio.h>
#include <math.h>

int main()
{
double a,b,c,disc,x1,x2,p,q;
printf("请输入函数的系数a,b,c:");
scanf("%lf%lf%lf",&a,&b,&c);
if(fabs(a)<=1e-6)           //fabs(a)<=1e-6等价于|a|<1*10^(-6);
printf("不是一元二次方程\n");
else
{
disc=b*b-4*a*c;
if(fabs(disc)<=1e-6)
printf("方程有两个相等的实根:\nx1=x2 = %.4f\n",-b/(2*a));
else if(disc>1e-6)
{
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("方程有两个不等的实根:\nx1 = %.4f\nx2 = %.4f\n",x1,x2);
}
else
{
p=-b/(2*a);               //r为复数的实部;
q=sqrt(-disc)/(2*a);      //i为复数的虚部;
printf("方程有两个共轭复根:\nx1 = %.4f+%.4fi\nx2 = %.4f-%.4fi\n",p,q,p,q);
}
}
return 0;
}


/*这是为了判断浮点数相等,由于计算机保存的浮点数是2进制的,在精度上有一定的偏差。

if (disc == 0.0) 时,disc不一定精确地等于0,也许会等于0.000001。为了避免浮点数比

较上的误差,就要设定一个误差范围,也就是(-1e-6, 1e-6)这个范围内,如果disc落在这

个范围内,就认为其等于0了*/

运行结果截图:







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: