用C语言求e的近似值,用1/1!+1/2!+1/3!+.......1/n!,请问我的哪里错了?
#include<stdio.h>main(){inta=1,b,n=1,nAn;doublee=1;while(nAn<=1e6){b=1;nAn=1;while(b<...
#include <stdio.h>
main()
{ int a=1,b,n=1,nAn;
double e=1;
while(nAn<=1e6)
{ b=1;
nAn=1;
while(b<=n)
{ nAn=nAn*b;
b++;
}
e=e+1/nAn;
n++;
}
printf("e=%lf\n",e);
return 0;
} 展开
main()
{ int a=1,b,n=1,nAn;
double e=1;
while(nAn<=1e6)
{ b=1;
nAn=1;
while(b<=n)
{ nAn=nAn*b;
b++;
}
e=e+1/nAn;
n++;
}
printf("e=%lf\n",e);
return 0;
} 展开
3个回答
展开全部
还有 e = 1.0/nAn。这个老师不会没教把,整数除以整数还是整数
nAn要大于1e6,因为nAn一开始就小于1e6的
#include <stdio.h>
long long fact(int n) //求阶乘
{
int i;
long long s = 1;
for(i=1;i<=n;i++)
s = s*i;
return s;
}
int main(void)
{
int n=1;
double s=1, s1=0;
while(fabs(s-s1)>=0.00001) //迭代
{
s1 = s;
s = s + 1.0/fact(n);
n++;
}
printf("%lf\n", s);
return 0;
}
不懂就问
nAn要大于1e6,因为nAn一开始就小于1e6的
#include <stdio.h>
long long fact(int n) //求阶乘
{
int i;
long long s = 1;
for(i=1;i<=n;i++)
s = s*i;
return s;
}
int main(void)
{
int n=1;
double s=1, s1=0;
while(fabs(s-s1)>=0.00001) //迭代
{
s1 = s;
s = s + 1.0/fact(n);
n++;
}
printf("%lf\n", s);
return 0;
}
不懂就问
追问
请问,nAn要大于1e6,有什么用啊?
追答
我开始没有看你的题目意思。。那个nAn一开始大于1e6或者小于都没有用。再说是1e-6,,10的-6次方。。。。1e6是10的6次方。精确算法要用迭代法像我那样
展开全部
int a=1,b,n=1,nAn;
double e=1;
while(nAn<=1e6) //这里nAn的值是多少,没有赋值就使用的变量
double e=1;
while(nAn<=1e6) //这里nAn的值是多少,没有赋值就使用的变量
追问
你好,这里我确实错了,但是VC6.0执行时并没有出错啊,求解释一下
追答
依赖编译器和编译环境,有的编译器将未赋值的变量整型初始为0,字符串为空,
有的编译器将它弄成个不确定的值,整型表现为数值不确定,每次都不一样结果,字符串访问时表现为该内存不能为read
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询