学校刚刚开了程序设计课,因为我是学软件开发的,当然就对这个东西很感兴趣。由于本人是大一的新生,水平也有限,对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。 通过对逻辑的解释可以看出程序的漏洞,这是编译所检查不出的,这需要你长久的经验和逻辑辨别能力。 
|