热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

bailian.openjudge2707:求一元二次方程的根

http:bailian.openjudge.cnpractice2707描述利用公式x1(-b+sqrt(b*b-4*a*c))(2*a),x2(-b-sqrt(b*b-4*a*



http://bailian.openjudge.cn/practice/2707


描述

利用公式x1 = (-b + sqrt(b*b-4*a*c))/(2*a), x2 = (-b - sqrt(b*b-4*a*c))/(2*a)求一元二次方程ax^2 + bx + c =0的根,其中a不等于0。


输入

第一行是待解方程的数目n。

其余n行每行含三个浮点数a, b, c(它们之间用空格隔开),分别表示方程ax2 + bx + c =0的系数。


输出

输出共有n行,每行是一个方程的根:

若是两个实根,则输出:x1=…;x2 = …

若两个实根相等,则输出:x1=x2=…

若是两个虚根,则输出:x1=实部+虚部i; x2=实部-虚部i

所有实数部分要求精确到小数点后5位,数字、符号之间没有空格。

x1和x2的顺序:x1的实部>Re的实部||(x1的实部==x2的实部&&x1的虚部>=x2的虚部)


样例输入


3

1.0 3.0 1.0

2.0 -4.0 2.0

1.0 2.0 8.0



样例输出


x1=-0.38197;x2=-2.61803

x1=x2=1.00000

x1=-1.00000+2.64575i;x2=-1.00000-2.64575i



提示



  1. 需要严格按照题目描述的顺序求解x1、x2。

  2. 方程的根以及其它中间变量用double类型变量表示。

  3. 函数sqrt()在头文件math.h中。

  4. 要输出浮点数、双精度数小数点后5位数字,可以用下面这种形式: printf("%.5f", num);


代码

#include
#include
#include
using namespace std;
int main()
{
double a,b,c,x1,x2,bb,fourac,twoa,tmp,tmp1;
int n;
cin>>n;

for(int i=0; i {
cin>>a>>b>>c;
bb=b*b;
fourac=4*a*c;
twoa=-b/(a*2);
if(b==0)
twoa=0;
if(bb==fourac)
printf("x1=x2=%.5lf\n" , twoa);
else if(bb>fourac)
{
tmp=sqrt(b*b-4*a*c);
tmp1=2*a;
x1=(-b+tmp)/tmp1;
x2=(-b-tmp)/tmp1;
printf("x1=%.5lf;x2=%.5lf\n" , x1 , x2);
}
else
printf("x1=%.5lf+%.5lfi;x2=%.5lf-%.5lfi\n" ,twoa,(sqrt(fourac-bb)/(a*2)),twoa,(sqrt(fourac-bb)/(a*2)));
}
return 0;
}


推荐阅读
author-avatar
家具销售_903
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有