永发信息网

c++解一元二次方程

答案:2  悬赏:70  手机版
解决时间 2021-01-30 00:09
  • 提问者网友:鼻尖触碰
  • 2021-01-29 12:15
利用公式x1 = (-b + sqrt(b*b-4*a*c))/(2*a), x2 = (-b - sqrt(b*b-4*a*c))/(2*a)求一元二次方程ax2+ bx + c =0的根,其中a不等于0。

输入
输入一行,包含三个浮点数a, b, c(它们之间以一个空格分开),分别表示方程ax2 + bx + c =0的系数。
输出
输出一行,表示方程的解。
若b2 = 4 * a * c,则两个实根相等,则输出形式为:x1=x2=...。
若b2 > 4 * a * c,则两个实根不等,则输出形式为:x1=...;x2 = ...,其中x1>x2。
若b2 < 4 * a * c,则有两个虚根,则输出:x1=实部+虚部i; x2=实部-虚部i,即x1的虚部系数大于等于x2的虚部系数,实部为0时不可省略。实部 = -b / (2*a), 虚部 = sqrt(4*a*c-b*b) / (2*a)

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

样例输入2
1 0 1
样例输出2
x1=0.00000+1.00000i;x2=0.00000-1.00000i
源代码如下#include
#include
#include
using namespace std;
int main()
{
float a,b,c,x1,x2,r,f;
cin>>a>>b>>c;
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);

if(b*b==4*a*c)
printf("x1=x2=%.5f",x1);

else if(b*b>4*a*c)
printf("x1=%.5f;x2=%.5f",x1,x2);

else
{r=-b/(2*a);
f=sqrt(4*a*c-b*b)/(2*a);
printf("x1=%.5f+%.5fi;x2=%.5f-%.5fi",r,f,r,f);}

return 0;
}

open judge显示wrong answer;我输入样例在实数部分比样例输出多了个负号,求解
最佳答案
  • 五星知识达人网友:春色三分
  • 2021-01-29 12:37
这里你会出错的原因估计是精度问题,考虑一些可能导致精度下降的地方,比如当b和sqrt(b*b-4*a*c)很接近的时候可能导致分子接近于零,
这是数算课的OJ作业吧。。。
全部回答
  • 1楼网友:几近狂妄
  • 2021-01-29 12:47
已调试,无错误。希望对你有所帮助! #include #include void main() { double a,b,c,d,e,x1,x2; cout<<"请输入要求解的一元二次方程:"<>a; cout<<"b: "; cin>>b; cout<<"c: "; cin>>c; cout<0) { e=sqrt(d); x1=(-b+e)/(2*a); x2=(-b-e)/(2*a); cout<<"x1="<>a; cin>>b; cin>>c; } void funtion::display () { pd=b*b-4*a*c; if(pd>0) { x1=-b/(2*a)+sqrt(pd)/(2*a); x2=-b/(2*a)-sqrt(pd)/(2*a); } else if(pd==0) { x1=-b/(2*a); x2=-b/(2*a); } else { r=-b/(2*a); i=sqrt(-pd)/(2*a); } } void funtion::show_value () { if(pd>0) cout<<"x1="< #include #include void main() { float a,b,c; double x1,x2; cout<<"请输入a,b,c:"<>a>>b>>c; if(a!=0) { if((b*b-4*a*c)>=0) { x1=(-b+sqrt(b*b-4*a*c))/(2*a); x2=(-b-sqrt(b*b-4*a*c))/(2*a); cout<<"x1="< -->
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯