用c语言编程二分法的题

题目:用二分法求方程x*x*x*x-3*x+1=0在区间【0.3,0.4】中的根,要求误差不超过(1/2)*(1/(10*10))
要求:用c语言编程,急(半小时内要答案)!
11点半前把答案给我就行

第1个回答  推荐于2016-10-27
#include <stdio.h>
float f(float x)
{
return (x * x * x * x - 3 * x + 1);
}

void main()
{
float wucha = ((float)1/(float)2)*((float)1/((float)10*(float)10));
float maxi = 0.4;
float mini = 0.3;
float midi = (maxi + mini) / 2.0;
while ((maxi - midi) > wucha)
{
if (f(maxi) * f(midi) >= 0)
{
maxi = midi;
midi = (maxi + mini) / 2.0;
}
else
{
mini = midi;
midi = (maxi + mini) / 2.0;
}
}
printf("答案是:%f\n", midi);
}
//0.340625本回答被提问者采纳
第2个回答  2011-09-23
float flag=0.3*0.3*0.3*0.3-3*0.3+1>0?1:0;
float fun(float left ,float right){
float mid=(left+right)/2;
float res=mid*mid*mid*mid-3*mid+1;
if(abs(res)<(1/2)*(1/(10*10)))
return mid;
else if((flag==1&&res<0)||(flag==0&&res>0))
return fun(left,mid);
else if((flag==1&&res>0)||(flag==0&&res<0))
return fun(mid,right);
}追问

错误太多,根本就运行不了啊,麻烦你再修改一下吧

追答

呵呵,没调试刚才。
这是调试通过的。
#include
#include
using namespace std;
float flag=0.3*0.3*0.3*0.3-3*0.3+1>0?1:0;
float fun(float left ,float right){
float mid=(left+right)/2;
float res=mid*mid*mid*mid-3*mid+1;
if(abs(res)0))
return fun(left,mid);
else if((flag==1&&res>0)||(flag==0&&res<0))
return fun(mid,right);
}
void main(){
cout<<fun(0.3,0.4);
system("pause");
}

第3个回答  2011-09-23
double cal(double x)
{
return x*x*x*x-3*x+1;
}

int main(int argc, char* argv[])
{
//x*x*x*x-3*x+1
// y=x*x*x*x-3*x+1;
double x1=0.3;
double x2=0.4;
double y1=cal(x1);
double y2=cal(x2);
double x,y;
for(;;)
{
x=(x1+x2)/2.0;
y=cal(x);
if(y>0)
{

if(y>=0.01)
{
x1=x;
y1=y;
}
else
{
break;
}
}
else
{
if(y<=-0.01)
{
x2=x;
y2=y;
}
else
{
break;
}
}
}

return 0;
}追问

小黑屏上需要填什么才能继续?

追答

#include
system("pause");
你想数出结果?

用二分法求方程的根(C语言编写程序)
include <stdio.h> include <math.h> int main() { double x0, x1, x2, f0, f1, f2;do { printf("请输入两个点:");scanf("%lf,%lf", &x1, &x2);f1 = ((2 * x1 - 4) * x1 + 3) * x1 - 6; \/\/换成你自己的 方程 f2 = ((2 * x2 - 4) * x2 + 3) ...

用c语言编制程序,利用二分法,求方程cosx-3x+1=0在[0,1]的根.精度为0.0...
include <iostream> include <string> include "math.h"using namespace std;double FunExpression(double x)\/\/函数表达式 { return cos(x) - 3*x + 1;} double Function(double low, double high, double e){ double mid = (low + high) \/ 2;if (FunExpression(mid) == 0)return mid;...

编个C语言程序,用二分法求方程sinx- x^2\/2=0在x=1附近的根(精确到0....
sinx=x^2\/2有且仅有一解,即x=0。“输出每次迭代的结果以及所用”这是什么意思?代码写了,具体输入什么东西,你自己添加语句。注意:所输入的区间[x1,x2]要保证f(x1)*f(x2)<0,这样才能用二分法计算。代码如下:include "stdio.h"include "math.h"main(){ float x,x1,x2;float F(float...

C语言编程例题:用二分法求方程的解
a=c;说明f(a)和f(c)同号,那么使用a(a+b)\/2缩小迭代区间,继续迭代!

C语言二分法编程问题
void binSort(SortObject * pvector) { \/* 按递增序进行二分法插入排序 *\/ int i, j, left, mid, right;RecordNode temp;RecordNode *data = pvector->record;for( i = 1; i < pvector->n; i++ ) { temp = data[i];left = 0; right = i-1; \/* 置已排序区间的下、...

编个C语言程序,用二分法求方程x^3+4x-10=0 在区间[1,2]内的根(精确到...
return pow(d,3)+4*d-10;} void main(){ int k=0;double a,b,limit;printf("\\nplease input the 区间:");scanf(""%lf %lf",&a,&b);printf("\\nplease input the 解的精确程度:");scanf("%lf",&limit);if(f(a)*f(b)>0)printf("\\n 无法用二分法求解");else { while(...

用c语言程序设计用二分法求方程 f(x)=x^3-x^2-2x+1=0在区间【0,1】内...
include <stdio.h>double f(double x){return x*x*x-x*x-2*x+1;}int main(void) {double low=0,up=1;for(;up-low>=1e-3;){if(f((up+low)\/2)<0)up=(up+low)\/2;elselow=(up+low)\/2;}printf("%.3lf\\n",(up+low)\/2);return 0;} ...

...求2*x*x*x-4*x*x+3*x-6=0在(-10,10)之间的根。(用c语言编写)
楼上的类型不太好,改用实型的,不然会出错(实数根无法输出)。还有cout是C++的吧,楼主要的是C 附上我的:include<stdio.h> include<math.h> double calc(double x){ return ((2*x-4)*x+3)*x-6;} double root(double f,double t){ double mid=(f+t)\/2.0,s=calc(mid);while ...

c语言编写程序,键盘输入任意x,y用二分法求开y次根号x的近似值,要求精确...
include<stdio.h> include<math.h> void main(){ double x,y,x3,x1,x2;x1=x;x2=-x;for(;fabs(pow(x,-y))<1e-10;){ x3=(x1-x2)\/2.0;if((pow(x,-y))>1e-6)x2=x3;else x1=x3;} printf("方程的根为%8.6f\\n",x3);} ...

C语言编写二分法计算X-cosX
void main(){ float x1,x2,x,y=1;\/\/初始化 x1=-100;\/\/假设的x根所在的区间,我设了一个比较大的数[-100,100]x2=100;for(;fabs(y)>0.000001;)\/\/如果x-cos(x)>0.000001 继续查找,我设了精确度为1e-6 { x=(x1+x2)\/2;\/\/算出区间中点值 y=x-cos(x);\/\/计算该点值 if...

相似回答