学校刚刚开了程序设计课,因为我是学软件开发的,当然就对这个东西很感兴趣。由于本人是大一的新生,水平也有限,对C也是不很熟悉,为了达到自己的要求,就在这里对我所遇到的问题和如何解决的和大家一起分享。希望和我同个级别的也能从中学到些东西。
下面是我在实际操作中遇到的问题:
说的是如何利用C求解E的近似值:E=1+1/1!+1/2!+1/3!+……+1/N!这是E的泰勒展开式;
我开始时候的解决方案如下:
#include "stdio.h"
void main()
{
int n,s;
float e=1.0,t,k=0;
printf("show me the n:");
scanf("%d",&n);
for(s=1;s<=n;s++)
{
t=1.0/s;k=t/s;
e+=t;
}
printf("aha anwser is :%f\n",e);
}
结果发生编译错误:0 个error 1 个WARNING
也就是可以通过 但不完整 , 因为这个无关大局,所以我直接运行。
结果是3.928968 和实际结果相差很大
后来我回去检查,发现问题出在for 循环上。
{
t=1.0/s; k=t/s;
e+=t;
}
S=1时可以理解。当S=2时,K=1.0/s*s 显然这不是我们想要的结果。属于逻辑上的不明确。
接下来我就找出来,我对自己的排错还是满满意的
其实很简单 当时没看见,我只要将{
t=t/s; //要么如此 t/=s;结果是一样的.
e+=t;
}
因为我这么做可以使的变量T的值再次被系统利用,上次的T值这次被赋予给新的T从而T=1/1*2*3……*n=1/n!
这个就是我要的算式,K的变量也可以剩去了。
#include "stdio.h"
void main()
{
int n,s;
float e=1.0,t=1.0;
printf("show me the n:");
scanf("%d",&n);
for(s=1;s<=n;s++)
{
t=t/s;
e+=t;
}
printf("aha anwser is :%f\n",e);
}
这样的结果是正确的,E=2.718282。
通过对逻辑的解释可以看出程序的漏洞,这是编译所检查不出的,这需要你长久的经验和逻辑辨别能力。