这里新手,求大神帮忙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);
}
}
大谢~~~~~~~~~~~~~ 展开
#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);
}
}
大谢~~~~~~~~~~~~~ 展开
1个回答
展开全部
这段程序有几个问题,
首先,浮点数无法比较是否等于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);
最后的结果如图:
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询