编写程序,从键盘输入整数 n , 求 e 的值.e=1+11!+12!+13!+..+1n! 看看我错哪里了!谢谢

编写程序,从键盘输入整数 n , 求 e 的值.e=1+11!+12!+13!+..+1n! 看看我错哪里了!谢谢,第1张

把求阶乘分出来做一个函数,这样关系才能看明白,调试无误如下:

#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 <- 1L

ni <- 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次幂。 简单一点,初学者,多谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9493036.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存