#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
主要问题是原程序的 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>