zoukankan      html  css  js  c++  java
  • 模拟抛硬币(C语言实现)

    实现代码:

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 int heads()
     5 {
     6     return rand() < RAND_MAX/2;
     7 }
     8 
     9 int main(int argc, char *argv[])
    10 {
    11     int i,j,cnt;
    12     int N = atoi(argv[1]), M = atoi(argv[2]);
    13     int *f = malloc((N+1)*sizeof(int));
    14     
    15     for(j=0; j<=N; j++) f[j] = 0;
    16     for(i=0; i<M; i++, f[cnt]++)
    17       for(cnt=0, j=0; j<N; j++)//j<=N on book.
    18         if(heads())cnt++;
    19         
    20     for(j=0; j<=N; j++)
    21     {
    22        printf("%2d ", j);
    23        for(i=0; i<f[j]; i+=10) printf("*");
    24        printf("
    ");
    25     }
    26               
    27     system("pause");
    28     return 0;
    29 }

    该程序引自《算法:C语言实现(第1~4部分)》,主要学习基于计算出的值作为数组索引的操作。

    第17行代码中注释处为做的修改,原书中为j<=N,我认为应该为j<N,否则假如heads()的返回值一直为真即抛硬币结果永远为正面,则参数cnt的值最后结果为N+1, 超出最大可能出现的次数。

    将代码保存为coin.c,编译生成coin.exe. 假设模拟1000次的“抛硬币32次”,即N=32,M=1000,通过命令行向main()函数传递这两个参数并执行,结果如下:

    D:>coin.exe 32 1000
    0
    1
    2
    3
    4
    5
    6 *
    7 *
    8 *
    9 *
    10 **
    11 ****
    12 ******
    13 ********
    14 ************
    15 *************
    16 **************
    17 *************
    18 *************
    19 ********
    20 ******
    21 ***
    22 *
    23 *
    24 *
    25 *
    26
    27
    28
    29
    30
    31
    32
    请按任意键继续. . .

    图中每个星号代表10次出现正面。

    假设模拟10000次的“抛硬币32次”,即N=32,M=10000,并将代码中第23行i+=10改为i+=20后重新编译生成coin.exe,通过命令行向main()函数传递N、M两个参数并执行,其结果如下:

    D:>coin.exe 32 10000
    0
    1
    2
    3
    4
    5
    6 *
    7 *
    8 **
    9 ****
    10 *********
    11 ***************
    12 ****************************
    13 ****************************************
    14 *****************************************************
    15 ********************************************************************
    16 ***************************************************************************
    17 ******************************************************************
    18 *********************************************************
    19 ****************************************
    20 **************************
    21 *************
    22 ********
    23 ***
    24 *
    25 *
    26 *
    27
    28 *
    29
    30
    31
    32
    请按任意键继续. . .

    参考文献:《算法:C语言实现(第1~4部分)》,机械工业出版社,2011.8

  • 相关阅读:
    初识Python(3)__Python 数字
    初识Python(2)__Python 对象
    正式开始学习python
    现代浏览器的工作原理
    data URI scheme
    连接池
    介绍缓存的基本概念和常用的缓存技术(转)
    前后端及常用语言介绍
    非关系型数据库和关系型数据库区别
    VC编译连接选项详解(转)
  • 原文地址:https://www.cnblogs.com/geekham/p/4097472.html
Copyright © 2011-2022 走看看