/***************************************************
* 功能:
* 通过概率法和切割法计算圆周率
* 说明:
* 概率法需要输入圆没的点数
* 切割法需要输入切割的次数
***************************************************/
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
/* 概率法计算圆周率 */
int probability_calculate_pi()
{
int i,n,sum=0;
double x,y;
printf("please input point count\n");//输入点的数量
scanf("%d",&n);
srand(time(NULL));
for(i=0;i<n;i++)
{
x =(double) rand()/RAND_MAX; //产生0~1的一个随机数x
y =(double) rand()/RAND_MAX; //产生0~1的一个随机数y
if( (x*x + y*y)<=1)
{
sum++;
}
}
printf("PI=%f\n",(double)4*sum/n);
return 0;
}
/* 割圆法计算圆周率 */
int cyclotomic_calculate_pi()
{
int i,n,s;
double k,y2;
printf("please input incision count\n");//输入切割次数
scanf("%d",&n);
i = 0;
k = 3.0;
y2 = 1.0;
s = 6;
while(i<n)
{
printf("the %dth incision,is %d, PI=%.24f\n",i,s,k*sqrt(y2));
s*=2;
y2 = 2-sqrt(4-y2);
i++;
k*=2.0;
}
return 0;
}
int main(int argc,char *argv[])
{
probability_calculate_pi();
cyclotomic_calculate_pi();
return 0;
}
运行结果如下图所示:
原文地址:http://blog.csdn.net/qlx846852708/article/details/43085783