超越数是不能作为有理系数多项式方程的根的数 ,即不是代数数的数。由欧拉所说的:“它们超越代数方法所及的范围之外。”而得名。
虽然存在大量的超越数,但构造一个超越数或论证某个数是超越数就极为困难,现在只有极少的的数被证明了超越数,其中就有我们今天要计算的自然对数的底数e;
e在自然科学的应用及其广泛,不少都要采用e的更精确值进行计算,这时候我们就可以通过计算机对底数e进行精确值的计算,e的计算公式如下:
e=lim(1+1/n)^n=1/(0!)+1/(1!)+1/(2!)+1/(3!)+1/(4!)+1/(5!)+… =∑1/(n!),n∈N
这里我们借用该题来回顾下循环结构的三种循环语句的复习和应用;代码如下:
#include<stdio.h>
#include<math.h>
int main()
{
double e = 1;
double sum=1;
int i=1;
/*法一while(1/sum >pow(10,-11))
{
sum *= i;
e += 1/sum;
i++;
}
法二 do{
i++;
e += 1/sum;
sum *= i;
}while(1/sum >pow(10,-11)); do while 和while的区别在于while是先判断再做,
而do while 是先做一遍后再判断是否继续.所以如果是无论如何都
要做一遍则应选择do while.
其他情况俩种都没有任何区别*/
//法三:
for (i=1;(1/sum >pow(10,-11));i++) //也可以是for(int i=1;(1/sum >pow(10,-11));i++)
{ //但部分编译器不兼容,运行可能会报错
sum *= i;
e += 1/sum;
}
printf("e = %.10lf\n",e);
return 0;
} /*由上for循环等价于这样 while(1/sum >pow(10,-11)) { sum *= i;
其中i=1是给循环的已知条件.i等于多少它在for循环里起始值就是多少, e += 1/sum;
如果我写了i=3,哪怕你之前int i=1,那i的开始的值也只会是3,当然如果我们 i++;}
不写i=多少,就只有i,那程序会默认之前的int i=1,最后的i++相当于将{}最后要执行的程序
放到了()里,所以哪怕已经得出了所要e的值,i++仍旧会执行一次;这样一来我们不也可以
参照法二的运行顺序来设置for(i=1;(1/sum >pow(10,-11));sum *= i){ i++;
e += 1/sum;} */