编写程序,用二分法求方程2x3-4x2+3x-6=0在(-10,10)之间的根。

编写程序,用二分法求方程2x3-4x2+3x-6=0在(-10,10)之间的根。提示:用do-while语句实现。二分法的计算步骤:准备计算f(x)在有根区间[a,b]端... 编写程序,用二分法求方程2x3-4x2+3x-6=0在(-10,10)之间的根。
提示:
用do-while语句实现。
二分法的计算步骤:
准备 计算f(x)在有根区间[a,b]端点处的值f(a),f(b)
二分 计算f(x)在区间中点(a+b)/2处的值f[(a+b)/2]
判断若f[(a+b)/2]=0,则即是根,计算过程结束。
否则,检测:
若f[(a+b)/2]与f(a)异号,则根位于区间[a,(a+b)/2]内,这时以(a+b)/2代替b;
若f[(a+b)/2]与f(a)同号,则根位于区间[(a+b)/2,b]内,这时以(a+b)/2代替a;
反复执行步骤2和3,直到区间[a,b]长度缩小到允许的误差范围之内,此时中点(a+b)/2即为所求的根。
下边是我做的,不知道哪里出错了。请帮忙修改一下。
#include <stdio.h>
#include <math.h>
void main()
{
float a=-10.0;
float b=10.0;
float fc,fa,c;
c=(a+b)/2;
fc=2*pow(c,3)-4*pow(c,2)+3*c-6;
fa=2*pow(a,3)-4*pow(a,2)+3*a-6;
if (fc==0)
printf("the result is %lf.\n",c);
else
{
do
{
c=(a+b)/2;
if (fa*fc<0)
{a=c,c=(a+b)/2,fc=2*pow(c,3)-4*pow(c,2)+3*c-6;fa=2*pow(a,3)-4*pow(a,2)+3*a-6;}
else
{b=c,c=(a+b)/2,fc=2*pow(c,3)-4*pow(c,2)+3*c-6;fa=2*pow(a,3)-4*pow(a,2)+3*a-6;}
}
while (abs(b-a)>0.1e-6);
printf("the result is %lf.\n",c);
}
}
展开
 我来答
porker2008
推荐于2018-03-08 · TA获得超过1.4万个赞
知道大有可为答主
回答量:7066
采纳率:62%
帮助的人:1.1亿
展开全部
#include <iostream>
using namespace std;

double p(double x)
{
return 2*x*x*x-4*x*x+3*x-6;
}

int main()
{
double a,b;
cin >> a >> b;
double fa = p(a),fb = p(b),fm;
do
{
fm = p((a+b)/2);
if(fm==0) break;
if(fm*fa<0) b = (a+b)/2;
else if(fm*fb<0) a = (a+b)/2;
}while(b-a>0.00001);
cout << ((b+a)/2) << endl;
}

------
你的修改过的:
#include <stdio.h>
#include <math.h>
int main()
{
float a=-10.0;
float b=10.0;
float fc,fa,fb,c;
c=(a+b)/2;
fc=2*pow(c,3)-4*pow(c,2)+3*c-6;
fa=2*pow(a,3)-4*pow(a,2)+3*a-6;
fb=2*pow(b,3)-4*pow(b,2)+3*b-6;
if (fc==0)
printf("the result is %lf.\n",c);
else
{
do
{
c=(a+b)/2;
if(fc==0) break;
if (fa*fc<0)
{b=c;c=(a+b)/2;fc=2*pow(c,3)-4*pow(c,2)+3*c-6;fb=2*pow(b,3)-4*pow(b,2)+3*b-6;}
else if(fb*fc<0)
{a=c;c=(a+b)/2;fc=2*pow(c,3)-4*pow(c,2)+3*c-6;fa=2*pow(a,3)-4*pow(a,2)+3*a-6;}
}
while (b-a>0.1e-6);
printf("the result is %lf.\n",c);
}
}
濯名潜阳辉
2019-10-16 · TA获得超过3564个赞
知道大有可为答主
回答量:3024
采纳率:29%
帮助的人:444万
展开全部
#include
<iostream>
using
namespace
std;
double
p(double
x)
{
return
2*x*x*x-4*x*x+3*x-6;
}
int
main()
{
double
a,b;
cin
>>
a
>>
b;
double
fa
=
p(a),fb
=
p(b),fm;
do
{
fm
=
p((a+b)/2);
if(fm==0)
break;
if(fm*fa<0)
b
=
(a+b)/2;
else
if(fm*fb<0)
a
=
(a+b)/2;
}while(b-a>0.00001);
cout
<<
((b+a)/2)
<<
endl;
}
------
你的修改过的:
#include
<stdio.h>
#include
<math.h>
int
main()
{
float
a=-10.0;
float
b=10.0;
float
fc,fa,fb,c;
c=(a+b)/2;
fc=2*pow(c,3)-4*pow(c,2)+3*c-6;
fa=2*pow(a,3)-4*pow(a,2)+3*a-6;
fb=2*pow(b,3)-4*pow(b,2)+3*b-6;
if
(fc==0)
printf("the
result
is
%lf.\n",c);
else
{
do
{
c=(a+b)/2;
if(fc==0)
break;
if
(fa*fc<0)
{b=c;c=(a+b)/2;fc=2*pow(c,3)-4*pow(c,2)+3*c-6;fb=2*pow(b,3)-4*pow(b,2)+3*b-6;}
else
if(fb*fc<0)
{a=c;c=(a+b)/2;fc=2*pow(c,3)-4*pow(c,2)+3*c-6;fa=2*pow(a,3)-4*pow(a,2)+3*a-6;}
}
while
(b-a>0.1e-6);
printf("the
result
is
%lf.\n",c);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
奕采养安彤
2020-01-18 · TA获得超过3829个赞
知道大有可为答主
回答量:3174
采纳率:31%
帮助的人:471万
展开全部
#include<iostream>
usingnamespacestd;
doublep(doublex)
{
return2*x*x*x-4*x*x+3*x-6;
}
intmain()
{
doublea,b;
cin>>a>>b;
doublefa=p(a),fb=p(b),fm;
do
{
fm=p((a+b)/2);
if(fm==0)break;
if(fm*fa<0)b=(a+b)/2;
elseif(fm*fb<0)a=(a+b)/2;
}while(b-a>0.00001);
cout<<((b+a)/2)<<endl;
}
------
你的修改过的:
#include<stdio.h>
#include<math.h>
intmain()
{
floata=-10.0;
floatb=10.0;
floatfc,fa,fb,c;
c=(a+b)/2;
fc=2*pow(c,3)-4*pow(c,2)+3*c-6;
fa=2*pow(a,3)-4*pow(a,2)+3*a-6;
fb=2*pow(b,3)-4*pow(b,2)+3*b-6;
if(fc==0)
printf("theresultis%lf.\n",c);
else
{
do
{
c=(a+b)/2;
if(fc==0)break;
if(fa*fc<0)
{b=c;c=(a+b)/2;fc=2*pow(c,3)-4*pow(c,2)+3*c-6;fb=2*pow(b,3)-4*pow(b,2)+3*b-6;}
elseif(fb*fc<0)
{a=c;c=(a+b)/2;fc=2*pow(c,3)-4*pow(c,2)+3*c-6;fa=2*pow(a,3)-4*pow(a,2)+3*a-6;}
}
while(b-a>0.1e-6);
printf("theresultis%lf.\n",c);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式