记得中学的时候,那个时候学Qbasic,老师讲了一种方法计算圆周率。简单的想法(姑且也能叫算法吧)就是通过“撒子儿”。
在一块100*100的范围内,随机撒子儿,落到1/4圆饼范围的子儿的概率(范围内次数/总次数),即是1/4圆饼与整个方块的面积比值。
撒子数量越多,推算出来的π值就约准确。
有一张简图示意:(原谅圆弧线画得不好)
初步写的代码如下,但是在Xcode(苹果系统的编译器)里面运行结果总是不对(每次π都是4.000000),望指点!
#include <stdio.h> #include <time.h> #include <stdlib.h> int main(int argc, const char * argv[]) { float pi;//定义圆周率要用浮动变量 int i=1,n,sum=0,x,y; puts("请输入需要测算的精度n");//n表示撒子儿次数 scanf("%d",&n); while(i<=n) { i++; srand((unsigned)time(NULL));//前面对应头文件<stdlib.h>和<time.h> x=rand()%100+1;//撒子儿的横坐标值 y=rand()%100+1;//撒子儿的纵坐标值 if ((x*x)+(y*y)<=10000) sum++;//如果撒子位置落入1/4圆范围内,sum计数一次 } pi=4*sum/n;//根据撒子位置的概率,结合面积关系,计算出圆周率 printf("%f %d\n",pi,sum); return 0; }
|