SilverAz 发表于 2022-9-7 19:32:03

新手求助

为什么输出为7.1415926
#include<stdio.h>

int main()
{
       
        double sum=0,pi,exp1=1,term=1;
        double i=1,sign=1;
       
       
        while(exp1>=1e-8)
        {
                sum=sum+term;
                exp1=1/i;       
                term=sign*exp1;
                i=i+2;
                sign=-sign;       
        }
        pi=4*sum;
        printf("%.7f\n",pi);
       
       
        return 0;
}

答案
#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;
}

两手空空儿 发表于 2022-9-7 20:22:49

while(exp1>=1e-8)
      {
                //sum=sum+term;这里多加了一个1
                exp1=1/i;      
                term=sign*exp1;
                i=i+2;
                sign=-sign;
                                sum=sum+term;   
      }
      pi=4*sum;//多加的那个1被乘4,结果多了4
第一轮被计算了两次

SilverAz 发表于 2022-9-7 20:27:25

两手空空儿 发表于 2022-9-7 20:22
第一轮被计算了两次

参考答案里不也在term==1的时候加到sum里了吗

两手空空儿 发表于 2022-9-7 20:31:59

你的循环第一次term=1,第二次 term 还是 = 1
答案里,第一次 term = 1,第二次 term = 1/3 了
你看我给你修改的代码,把累加放到后面就行了

SilverAz 发表于 2022-9-7 20:38:56

两手空空儿 发表于 2022-9-7 20:31
你的循环第一次term=1,第二次 term 还是 = 1
答案里,第一次 term = 1,第二次 term = 1/3 了
你看我给你 ...

感谢
页: [1]
查看完整版本: 新手求助