#include
#include
#include
/*计算圆的面积*/
//函数功能:产生[0,1]里的随机小数
double randomnumber()
{
double d=((double)rand())/RAND_MAX;
return d;
}
//函数功能:给定一个圆半径,计算圆的面积
double circleArea(double r) //圆的半径为r,圆的外接正方形的边长为2r,圆的面积仅由半径r决定
{
double x,y; //随机产生的点的横坐标与纵坐标
int times=0; //计算点落在圆里的次数
int i = 0; //for循环的计数器
int cycle = 10000000; //for循环的执行次数,该次数越大,计算结果越接近真实值。
double area = 0;//圆的面积
for(i=0;i<=cycle;i++) //循环执行10000000次,通过使用大量的循环次数来提高精度。
{
x=randomnumber()*r;//点的横坐标=[0,1]里的一个随机小数×半径
y=randomnumber()*r;//点的纵坐标=[0,1]里的一个随机小数×半径
if(x*x+y*y<=r*r) //如果点落在圆的内部,即x^2+y^2<=r^2,times自加
times++;
}
area=(float)times*(4*r*r)/cycle;//面积=((点落在圆里的次数)/循环次数)×圆的外接正方形的面积
return area; //返回圆的面积
}
int main()
{
/*
初始化随机函数种子,srand((unsigned)time(NULL));
是拿系统时间作为种子,由于时间是变化的,种子变化,可以产生不相同的随机数。
使用时,参数可以是unsigned型的任意数据,比如srand(10);如果不使用srand,
而用rand()产生的随机数,在多次运行,结果是一样的。
*/
srand((unsigned)time(NULL));
printf("圆的面积=%.1f\n",circleArea(10000));
int i =0;
}