C语言用蒙特卡罗法求解PI的近似值,保留三位小数为PI=3.141

计算pai 的近似值,保留三位小数输出,输出结果为PI=3.141

通过参考下面的链接,做了一个实现:

代码如下:

参考链接:


RAND_MAX的使用及rand()函数使用_Gov_Demon的博客-CSDN博客 rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数,一般为0x7fff;rand()范围是[0,RAND_MAX]如果说是 10rand(),则对应的范围应该为[0.0,10RAND_MAX]rand()/RAND_MAX 对应的范围是 [0.0 , 1.0)rand()/(RAND_MAX + 1.0)对应范围是 [0.... https://blog.csdn.net/qq_42681507/article/details/104606408

点、直线与圆的位置关系 - 知乎 数学课堂【点、直线与圆的位置关系】 在解析几何里面有一个这样的知识点,就是让我们来讨论点与圆的位置关系,直线与圆的位置关系,以及圆与圆的位置关系;在解决这类题的时候总是需要知道圆的半径。 点与圆的位置… https://zhuanlan.zhihu.com/p/77516800


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

// https://blog.csdn.net/weixin_57709996/article/details/123440399
int main(void){
    
    double PI;
    int num,times=0,i=0;
    srand(time(NULL));
    
    printf("请输入要模拟的次数:");
    scanf("%d",&num);  // 从输入获取模拟的次数 
    
    while(i<num){
        
        // https://blog.csdn.net/qq_42681507/article/details/104606408
        // 产生一个在[0,1]之间的点 
        double x = rand()*1.0/RAND_MAX;  
        double y = rand()*1.0/RAND_MAX;
        
        // 如果这个点距离原点的距离小于等于1.0,则说明在圆内或圆上 
        // https://zhuanlan.zhihu.com/p/77516800 
        double distance = sqrt((x-0)*(x-0)+(y-0)*(y-0));
        // 此时将在圆上和圆内的次数+1 
        if(distance <=1.0){
            times++;
        }
        i++;  // 实际模拟次数+1 
    }
    
    // 用在圆上和圆内的次数除以总模拟次数,再乘以4,则计算出PI的近似值 
    PI = times*1.0/num*4; 
    printf("PI的近似值为:%.3f\n",PI);
    
    return 0;
    
} 

img