其他语言

本类阅读TOP10

·基于Solaris 开发环境的整体构思
·使用AutoMake轻松生成Makefile
·BCB数据库图像保存技术
·GNU中的Makefile
·射频芯片nRF401天线设计的分析
·iframe 的自适应高度
·BCB之Socket通信
·软件企业如何实施CMM
·入门系列--OpenGL最简单的入门
·WIN95中日志钩子(JournalRecord Hook)的使用

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
关于一些C++编程的领悟

作者:未知 来源:月光软件站 加入时间:2005-5-13 月光软件站

        学校刚刚开了程序设计课,因为我是学软件开发的,当然就对这个东西很感兴趣。由于本人是大一的新生,水平也有限,对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。

通过对逻辑的解释可以看出程序的漏洞,这是编译所检查不出的,这需要你长久的经验和逻辑辨别能力。




相关文章

相关软件