编程,编写函数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
展开
 我来答
lygszmjj
2014-11-19 · TA获得超过1814个赞
知道小有建树答主
回答量:1192
采纳率:0%
帮助的人:422万
展开全部

主要问题是原程序的 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
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式