c语言产生随机数_C语言 求的近似值

f562aa84ca406988b53a94b7daa00796.png点击上方“蓝字”关注我们 704a54eb8d4cd235ad1f98398ce5b19b.png

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

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

【题目】

用循环方法实现。

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

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

【设计思路】

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

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

36ff59b334c677a85a4475f1896b002b.png

(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

{

x = rand() / (double)RAND_MAX;

y = rand() / (double)RAND_MAX;

/*RAND_MAX 是 中伪随机数生成函数 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 

#include

#include

#include

#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

{

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;

}

【运行结果展示】

96618d8fa163eaef5ea2a5384bef4927.png

4e24ef4bb3c2b2ac8ec81bb0881563ce.gif

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

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

8accba9ff9778a9561336209932d360b.png

往期精彩

C语言 用牛顿迭代法解方程

C语言 埃及分数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值