把求阶乘分出来做一个函数,这样关系才能看明白,调试无误如下:
#include "stdioh"
int fact(int n)//求阶乘
{
int sum=1;
int i;
if(n==0)
return 1;
else
{
for(i=1;i<=n;i++)
sum=i;
return sum;
}
}
int main()
{
int i=1,j=1,n;
double e,t=0;
scanf("%d",&n);
e=10;
for(i=1;i<=n;i++)
{
t+=10/fact(i);
}
e=e+t;
printf("e=%1610f\n",e);
return 0;
}
结果:
main(){
double e=1,n=1;
int i;
for(i=1;n<1e6;i++)
{n=ni;e+=10/n;
printf("%d\t%7f\n",i,e);/观察每次循环时e的输出值,可删/
}
printf("e=%6f\n",e); /%7f %6f 控制输出精度/
scanf("%d");/输出暂停 可删或换getchar()等/
}
输出:
1 20000000
2 25000000
3 26666667
4 27083333
5 27166667
6 27180556
7 27182540
8 27182788
9 27182815
10 27182818
e=2718282
自然对数
当x趋近于正无穷或负无穷时,[1+(1/x)]^x的极限就等于e,实际上e的值就是通过这个极限而发现的。它是个无限不循环小数。其值约等于2718281828
#include <iostream>
using namespace std;
int main()
{
double e=1, f=1, n=1;
int t=1;
while(n>=1e-5)
{
e+=n;
t++;
f=t;
n=1/f;
}
cout<< e<<endl;
return 0;
}
分析:有两种情况
(1)计算前n项
源程序如下:
#include<stdioh>
int
main()
{
double
item=1,sum=1;
int
n,i;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
item=10/i;
sum+=item;
}
printf("The
sum
is
%lf\n",sum);
return
0;
}
(2)计算各项直到最后一项小于10^(-4)
源程序如下:
#include<stdioh>
#include<mathh>
int
main()
{
double
item=1,sum=1,n=1;
do
{
item=10/n;
sum+=item;
n++;
}while(fabs(item)>=1e-4);
printf("The
sum
is
%lf\n",sum);
return
0;
}
最简单但计算量最大的是泰勒公式:e=1+1/1!+1/2!+1/3!+1/4!+
下面是求e的R语言函数:
e_fun <- function(n) {etemp <- 1
ni <- 1L
for (i in 1:n) {
etemp <- etemp + 1 / ni
ni <- ni (i + 1)
}
return(etemp)
}
不过你题目中要求的是求到精度为000001就停止,所以可以采用repeat循环:
i <- 1Lni <- 1L
etemp <- 1
repeat {
etemp1 <- etemp
etemp <- etemp + 1 / ni
ni <- ni (i + 1)
i <- i + 1
if (etemp - etemp1 < 000001) break
}
i
etemp
在最后可以看到,求到i=10时,精度就已经达到要求了。
代码如下:
form上面有一个名称为command1的按钮
Private Sub Command1_Click()
Dim i As Integer
Dim e As Double
Dim current As Double, last As Double
i = 1
e = 2
current = 1
Do
i = i + 1
last = current
current = 1 / factorial(i)
e = e + current
Loop While last - current > 10 ^ -4
MsgBox e
End Sub
Function factorial(ByVal n As Integer) As Long
If n = 0 Then
factorial = 1
Else
factorial = n factorial(n - 1)
End If
End Function
要求:误差小于000001
Private Sub Command1_Click()
Dim i%, n&, t!, e!
e = 2
i = 1
t = 1
Do While t > 000001
i = i + 1
t = t / i
e = e + t
Loop
Print "计算了"; i; "项目和是:"; e
Print Exp(1) ‘与上句输出值进行对比以证明算法的正确性
End Sub
这种算法是有问题的,不能达到指定的精度的!t <= 000001 时结束了循环,这个只是到这一项为止,该项的值比精度小,但是不能保证被舍掉的后面部分(无穷项之和)阶乘的倒数之和比指定的精度小!
以上就是关于编写程序,从键盘输入整数 n , 求 e 的值.e=1+1/1!+1/2!+1/3!+..+1/n! 看看我错哪里了!谢谢全部的内容,包括:编写程序,从键盘输入整数 n , 求 e 的值.e=1+1/1!+1/2!+1/3!+..+1/n! 看看我错哪里了!谢谢、C语言编程计算e、用c++编写程序:利用下列近似公式计算e值,误差应小于10的-5次幂。 简单一点,初学者,多谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)