这里新手,求大神帮忙C语言 用二分法求下面方程在(-10,10)之间的根,2x^3-4x^2+3x-6=0

这是我自己写的,不知道哪里错了。运行出来是空白的。#include<stdio.h>#include<math.h>voidmain(){floatx1=10,x2=-1... 这是我自己写的,不知道哪里错了。运行出来是空白的。
#include<stdio.h>
#include<math.h>
void main()
{
float x1=10,x2=-10,x3=(x1+x2)/2,y1,y2,y3;
y1=2*x1*x1*x1-4*x1*x1+3*x1-6;
y2=2*x2*x2*x2-4*x2*x2+3*x2-6;
y3=2*x3*x3*x3-4*x3*x3+3*x3-6;
if(y1*y3<0)
for(x3=0;y3!=0;x3=x3+x1)
{
y3=2*x3*x3*x3-4*x3*x3+3*x3-6;
if(y3==0)
printf("%.2f是该方程的根",x3);
}
if(y2*y3<0)
for(x3=0;y3!=0;x3=x3+x2)
{
y3=2*x3*x3*x3-4*x3*x3+3*x3-6;
if(y3==0)
printf("%.2f是该方程的根",x3);
}
}

大谢~~~~~~~~~~~~~
展开
 我来答
yanglei5658
2015-04-21 · TA获得超过4756个赞
知道大有可为答主
回答量:835
采纳率:100%
帮助的人:523万
展开全部

这段程序有几个问题,

首先,浮点数无法比较是否等于0,因此不能用float,而应该用整型,即int。

其次,个人感觉没有理解二分法的实质是什么,从程序中没有看到二分法的运用。


我觉得,要看二分法能不能用到这道题,首先得看这个函数是不是单调的。

从图中可以看出,函数单调递增,因此可以使用二分法。

其次,二分法的很容易用递归的形式表示出来,这里建议使用递归的方式写二分程序。

代码如下:

int binary_calculate(int low, int high, int target)
{
int mid = low + (low + high) / 2;
if (low > high)
return-11;
else{
int res = static_cast<int> (2 * pow(mid, 3.0) - 4 * pow(mid, 2.0) + 3 * mid - 6);
if (res == target)
return mid;
else if (res > target)
return binary_calculate(low, mid - 1, target);
else
return binary_calculate(mid + 1, high, target);
}
}

调用函数直接这样就行了:

int res = binary_calculate(-10,10,0);

最后的结果如图:

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式