今天 被再次被超哥刷新三观,超哥表示这道题目在他小学6年级的时候就已经做出来了(其实俺很好奇您那时有六年级么……)  好吧  这对我们来这些孩子来说已经不是什么新奇的事情了,开始我我们的正文吧   (~~)!


一、编程原理:

利用随机数函数rand()求π的近似值_随机数函数

在上图中阴影部分面积是π/4;利用1/4圆的面积÷正方形的面积=随机数[0,100]落在阴影部分的概率。


二、 函数介绍 :

先在网上查了下《C语言参考手册》,关于rand()函数的描述如下:

(1)rand() 函數的原型

               int rand(void);

(2)连续调用 rand 将返回 0 到 int 類型的最大可表示的正值(含该值)之间的整数值,它们是一个伪随机数生成器所产生的连续結果。在标准 C 中,rand 的上界是上 RAND_MAX 所指定的,这个值至少是 ×××数据的最大值。


从上面 我们可以看到rand函数是没有参数的,那随机数是怎样产生的呢,这就用到了srand()函数,也就是种子,通常把系统时钟作为参数传给srand函数,语法是这样的  srand(time(NULL)); 我们现在就开始编写这个小程序吧!


三、 演示代码:


#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
    int num,x,y;
    double pi;
    srand(time(NULL));          /* 删除这句会导致每次运行结果一样 */
    for(int i=1;i<1000000;i++)
    {
        x=rand()%101;
        y=rand()%101;
        if(x*x+y*y<=10000)
        {
            num++;
        }
    }
    pi=4*double(num)/1000000;
    printf("π=%f",pi);
    return 0;
}

输出结果:

利用随机数函数rand()求π的近似值_π的近似值_02

结果出来了,发现了个小问题,结果并不明显接近3.14159 是不是测试的次数少?  还是别的原因呢???