编程,编写函数f(x),用迭代法求x=a的三次方根
#include"stdafx.h"#include<stdio.h>#include<math.h>doublef(inti,doubleb){doublea[1000...
#include "stdafx.h"#include <stdio.h>#include <math.h>
double f(int i ,double b){ double a[1000]; a[0]=1; a[i+1]=2/3*a[i]+b/(3*a[i]*a[i]); return a[i+1];
}
int main(int argc, char* argv[]){ int i; double b; scanf("%lf",&b); for(i=0;i<10000;i++) { if (fabs(f(i+1,b)-f(i,b))<1e-4) break; } printf("%lf\n", pow(b,1.0/3)); printf("%lf",f(i,b));
return 0;}哪里错了呢,结果显示是0 展开
double f(int i ,double b){ double a[1000]; a[0]=1; a[i+1]=2/3*a[i]+b/(3*a[i]*a[i]); return a[i+1];
}
int main(int argc, char* argv[]){ int i; double b; scanf("%lf",&b); for(i=0;i<10000;i++) { if (fabs(f(i+1,b)-f(i,b))<1e-4) break; } printf("%lf\n", pow(b,1.0/3)); printf("%lf",f(i,b));
return 0;}哪里错了呢,结果显示是0 展开
展开全部
主要问题是原程序的 f 函数错了。double a[1000];的作用域是在f函数内,当函数返回时即释放,并不能像你想象的那个在下次调用时依然存在。
再者,
for(i=0;i<10000;i++)
{
if (fabs(f(i+1,b)-f(i,b))<1e-4)
break;
}
怎么能保证这10000次就一定能得到解呢?结束的条件是差<1e-4,直接做循环条件就可以了。
参考程序如下:
#include <stdio.h>
#include <math.h>
double f(double a,double x) //x为上一个近似解
{
x=2.0/3*x+a/(3*x*x); //不能直接写2/3
return x;
}
main()
{
double a,x1,x0;
scanf("%lf",&a);
x1=a/3; //假设初始值
do
{ x0=x1;
x1= f(a,x0);
} while(fabs(x1-x0)>1e-4) ;
printf("%lf\n", pow(a,1.0/3));
printf("%lf",x0);
}
2014-11-16
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询