比特阿尔法 发表于 2017-10-9 16:45:50

C语言中的一题

题目是这样的:




小甲鱼老师提供的答案如下:
#include <stdio.h>
#include <math.h>

int main()
{
      int sign = 1; // 表示符号
      double pi = 0.0, n = 1, term = 1.0; // n表示分母,term表示当前项的值

      while (fabs(term) >= 1e-8) // 1e-8表示10^(-8)
      {
                pi = pi + term;
                n = n + 2;
                sign = -sign;
                term = sign / n;
      }

      pi = pi * 4;
      printf("pi = %10.7f\n", pi);

      return 0;
}

一开始的答案如下:
#include <stdio.h>
#include <math.h>

int main()
{
        double a=1;//储存每次分数的值
        int zi=1;    //分子
        double mu=1; //分母
        double cnt=0;// 计数器
        int b;
        for(b=1;fabs(a)>=pow(10,-8);b++)
        {
                cnt=cnt+a;   
                a=(pow(-1,b))*(zi/(mu+2)); /*这里把 zi=-zi用pow(-1,b)来代替,
                                           一开始是这么想的。 */
                mu=mu+2;
      
        }
               
               
               
        printf("%10.7f\n",4*cnt);       
               
               
               
               
                return 0;
      
      
}

可能想复杂了吧,但是思路是对的,就是搞不明白为什么算不出 3.1415926 ,直接卡住了。

然后看了答案,修改了一下

#include <stdio.h>
#include <math.h>

int main()
{
        double a=1;//储存每次分数的值
        int zi=1;    //分子
        double mu=1; //分母
        double cnt=0;// 计数器
        int b;
        for(b=1;fabs(a)>=pow(10,-8);b++)
        {
                cnt=cnt+a;
                zi=-zi;                                                   //修改的地方
                a=(zi/(mu+2));
      mu=mu+2;
      
        }
               
               
               
        printf("%10.7f\n",4*cnt);       
               
               
               
               
                return 0;
      
      
}


然后成功算出了3.1415926


我第一次写的代码,为什么算不出来呢?求大神解答。{:5_100:}

ba21 发表于 2017-10-9 20:34:06

只是运行久了点。
3.1415926
Press any key to continue

比特阿尔法 发表于 2017-10-9 23:21:30

ba21 发表于 2017-10-9 20:34
只是运行久了点。
3.1415926
Press any key to continue

确实是这样的,谢谢版主。{:5_92:}
页: [1]
查看完整版本: C语言中的一题