我需要以下C程序的帮助:
对于表示精度(EPS
值)的输入值double
,打印序列的第一个成员以便声明
abs(a(n)-a(n-1))<EPS
是真的。
序列a(n)
由:
a(n)=(1-1/2!)(1+1/3!)...(1+(-1)^n/(n+1)!)
我使用了这个等式:a(n)-a(n-1)=((-1)^n*(n+2))/(n+1)!
我的代码没有给我任何输出:
#include<stdio.h>
#include<math.h>
int fact(int n)//function to find factorial of 'n'
{
int i,f=1;
for(i=1;i<=n;i++)
f=f*i;
return f;
}
int main()
{
double an=0.5,ap=2,EPS;//an is a_new, ap is a_previous
int n=1;
printf("EPS=");
scanf("%lf",&EPS);
do
{
int f=fact(n+1);
n=n+1;
an=ap+((double)(pow(-1.0,n)*(n+2)))/f;
}
while(fabs(an-ap)>EPS);
printf("%lf",an);
return 0;
}
感谢您的回复。
答案 0 :(得分:0)
此代码至少有几个问题,
1. ap
未初始化
您应该使用新的f
更新n
,但现在f = 2
也在while
循环上,an-as
应该是'an-ap'