用二分法求方程2x3-4x2+3x-6=0在(-10,10)之间的根。自己写的c程序,可是出错了。不知道错在哪里?

#include<stdio.h>#include<math.h>voidmain(){floatx0x1,x2,fx0,fx1,fx2;x1=-10;x2=10;fx1... #include<stdio.h>
#include<math.h>
void main()
{
float x0x1,x2,fx0,fx1,fx2;
x1=-10;
x2=10;
fx1=2*pow(x1,3)+4*pow(x1,2)+3*x1-6;
fx2=2*pow(x2,3)+4*pow(x2,2)+3*x2-6;
do
{
x0=(x1+x2)/2;
fx0=2*pow(x0,3)+4*pow(x0,2)+3*x0-6;
if(fx1*fx0<0)
{x2=x0;fx2=fx0;}
else
{x1=x0;fx1=fx0;}
}while(fabs(fx0)>=1e-5);
printf("x=%6.2f",x0);
}

答案是2,不知道为什么就是不对,改了一下fx0=2*pow(x0,3)+4*pow(x0,2)+3*x0-6;这句就行了,但是就是不知道为什么错,难道是pow用错了?
大侠们,帮帮忙。。。
展开
 我来答
匿名用户
2011-05-05
展开全部
#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)

else if(fb*fc<0)

}
while (b-a>0.1e-6);
printf("the result is %lf.\n",c);
}
}
另外,虚机团上产品团购,超级便宜
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式