今天 被再次被超哥刷新三观,超哥表示这道题目在他小学6年级的时候就已经做出来了(其实俺很好奇您那时有六年级么……) 好吧 这对我们来这些孩子来说已经不是什么新奇的事情了,开始我我们的正文吧 (~~)!
一、编程原理:
在上图中阴影部分面积是π/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; }
输出结果:
结果出来了,发现了个小问题,结果并不明显接近3.14159 是不是测试的次数少? 还是别的原因呢???