vlambda博客
学习文章列表

C语言 求π的近似值

点击上方“蓝字”关注我们
C语言 求π的近似值




愉快的一天,不得不做的三件事:

        种田,锄地,整代码!!!






【题目】



用循环方法实现。

(1)请利用“正多边形逼近”的方法求出π的近似值。

(2)利用随机数法求π的近似值。






【设计思路】


1)“正多边形逼近”的方法思路:


利用圆内接正六边形边长等于半径的特点将边数翻番,作出正十二边形,求出边长,重复这一过程,就可获得所需精度的π的近似值。

C语言 求π的近似值



2)随机数法求π的近似值的思路:


在一个单位边长的正方形中,以边长为半径,以一个顶点为圆心,在正方形上作四分之一圆。


随机的向正方形内扔点,若落入四分之一圆内则计数。


重复向正方形内扔足够多的点,将落入四分之一圆内的计数除以总的点数,其值就是π值四分之一的近似值。


该方法求出的π值只有统计次数足够多时才可能准确。





【代码分析】


double b,d,b0; 

 /*b为多边形边长,d为圆半径与三角形中线之差*/


long i;   

 /*内接多边形的边数*/


  for(i=6,b=0.5;;i*=2)    

/*首先单位圆内接正六边形,初始b等于半径的一半,即为0.5;每次循环,内接多边形边数翻一倍*/


  {

  b0=b;

/*保存本次正多边形的边长作为精确度控制的依据*/


  d=1-sqrt(1-b*b);

  b=sqrt(b*b+d*d)/2;

  if(2*b*i-b0*i<1e-15)    

  break;

/*精确度达到1e-15时,跳出循环*/


}

printf("方法一得到:π=%.15lf\n",2*i*b);



#define N 1e6    //定义一百万个种子



long i;

double x,y,k,PI;


srand((unsigned)time(NULL)); 

/*srand()函数用来设置算法的种子,time(NULL)返回当前的时间,先调用srand(time(NULL)),把当前的时间作为种子,使程序每次运行产生不同的随机数*/


for(i=0,k=0;i<N;i++)

{

x = rand() / (double)RAND_MAX;

y = rand() / (double)RAND_MAX;

/*RAND_MAX 是 <stdlib.h> 中伪随机数生成函数 rand 所能返回的最大数值,此时得到一个 0~1.0 之间的随机浮点数*/


if (sqrt((x - 0.5)*(x - 0.5) + (y - 0.5)*(y - 0.5)) <= 0.5) 

    k++;    

/*记录落入四分之一圆的点数*/

}


PI=4*k/N;

printf("方法二得到:π=%.15f\n",PI);





【代码展示】


C语言   求 π 的近似值

#include<stdio.h> 

#include<math.h>

#include<stdlib.h>

#include<time.h>

#define N 1e6

 

void main1()

{

  double b,d,b0;

long i;

 

  for(i=6,b=0.5;;i*=2)

  {

  b0=b;

  d=1-sqrt(1-b*b);

  b=sqrt(b*b+d*d)/2;

  if(2*b*i-b0*i<1e-15)

  break;

}

    printf("方法一得到:π=%.15lf\n",2*i*b);

 }

 

void main2()

{

long i;

double x,y,k,PI;

srand((unsigned)time(NULL)); 

for(i=0,k=0;i<N;i++)

{

x = rand() / (double)RAND_MAX;

  y = rand() / (double)RAND_MAX;

  if (sqrt((x - 0.5)*(x - 0.5) + (y - 0.5)*(y - 0.5)) <= 0.5) 

    k++;

}

PI=4*k/N;

printf("方法二得到:π=%.15f\n",PI);

}


void approximation()

{

printf("-------欢迎进入<求π的近似值>操作界面-------\n\n");

main1();

main2();

}


int main()

{

approximation();

return 0;

}



【运行结果展示】


C语言 求π的近似值






IT 农工要回家休息了,我们下期再见吧

记得点击“在看”进行收藏哦




往期精彩