1. 程式人生 > >中M2018春C入門和進階練習集-程式設計題50 7-50 近似求PI(15 分)

中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;
}