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="<
#include
using namespace std;
class funtion
{
public:
~funtion(){cout<<"求解完毕"<>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="<
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯