抛硬币的模拟实验


// 模拟抛硬币的实验

#include<stdio.h>
#include<stdlib.h>
int heads()    // 返回0或非0值
{
     return rand() <RAND_MAX/2;
}

int main()
{
     int i,j,cnt;
     int N,M;
    scanf("%d%d",&N,&M);  // 抛一枚硬币N=32次,如此做M=1000次这样的实验
     int *f=( int *)malloc((N+1)* sizeof( int));
     for(j=1;j<=N;j++)  // 初始化数组全部为0值
        f[j]=0;
     for(i=1;i<M;i++,f[cnt]++)   // 开始抛硬币,f[cnt]记录第cnt次抛硬币出现正面的次数
         for(cnt=1,j=1;j<=N;j++)  // 开始第一轮共32次的抛硬币实验
             if(heads())    cnt++;  // 如果出现正面,即heads()返回值为1,则对应着f[cnt]++,同时cnt++,此处利用数组索引统计正面出现次数,负面数组值始终为0
            
     for(j=1;j<=N;j++)
    {
        printf("%2d ",j);
         for(i=0;i<f[j];i+=10) printf("*");  // 正面每出现十次打印一个星号
        printf("\n");
    }
     return 0;
}

你可能感兴趣的:(抛硬币的模拟实验)