中M2018春C入门和进阶练习集-编程题50 7-50 近似求PI(15 分)

7-50 近似求PI(15 分)

本题要求编写程序,根据下式求π的近似值,直到最后一项小于给定精度eps。

​2​​π​​=1+​3​​1!​​+​3×5​​2!​​+​3×5×7​​3!​​+⋯+​3×5×⋯×(2×i+1)​​i!​​+⋯

输入格式:

输入在一行中给出精度eps,可以使用以下语句来读输入:

scanf("%le", &eps);

输出格式:

在一行内,按照以下格式输出π的近似值(保留小数点后5位):

PI = 近似值

输入样例:

1E-5

输出样例:

PI = 3.14158
#include<stdio.h>

double fact1(int n)
{
  int i;
  double plus=1.0;
  for(i=1;i<=n;i++)
  {
    plus*=i;
  }
  return plus;
}

double fact2(int n)
{
  int i;
  double plus=1.0;
  for(i=3;i<=2*n+1;i+=2)
  {
    plus*=i;
  }
  return plus;
}

int main(void)
{
   double eps,sum=1.0,k;
   int i=1;
   scanf("%le", &eps);
   if (eps<=1) 
   {do
   { sum+=fact1(i)/fact2(i);
     k=fact1(i)/fact2(i);
     i++;
     //printf("%d %lf %lf %lf %lf\n",i,fact1(i),fact2(i),k,sum);
   }while(k>=eps);}
   
   printf("PI = %.5lf",sum*2);
   return 0;
}

猜你喜欢

转载自blog.csdn.net/sinoshen/article/details/81607939
今日推荐