主要问题是原程序的 f 函数错了。double a[1000]的作用域是在f函数内,当函数返回时即释放,并不能像你想象的那个在下次调用时依然存在。
再者,
for(i=0i<10000i++)
{
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)
}
#include <stdio.h>#include<math.h>//pow()所需的头文件凳扮
int main(int argc, char *argv[])
{
int a,b
scanf("%d%d",&a,&b)
double sum=pow(a,b)//调用计算平方的库函数
printf("%.2f",sum)//.2f保留乱卜小数点枣陪灶后两位
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)