c语言求解一元二次方程的两相等实根,C语言 求解一元二次方程

求方程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

#include

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了*/

运行结果截图:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值