曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 6441|回复: 0
打印 上一主题 下一主题

[常规] rand() 函数 -- 随机数的生成

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2009-6-9 12:04:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
函数原型
#include <stdlib.h>
int rand(void);

rand() 函数能够生成在 0 和 RAND_MAX (在 <tdlib.h> 头文件中定义的符号常量)之间的整数。ANSI 标准指出,RAND_MAX 值的范围至少必须是 32767,在本机系统的定义是 #define RAND_MAX        2147483647 。 如果 rand() 确实能够随机产生一个整数,那么每次调用 rand() 函数时,在 0 和 RAND_MAX 之间的每个数字被选中的几率是相同的。下面的程序模拟色子投掷的情况:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
   
    for(i = 1; i <= 20; i++) {
        printf("%10d", 1 + (rand() % 6 ) );

    if( i % 5 == 0 )
        printf("\n");
    }

    return 0;
}
运行及输出结果
beyes@linux-beyes:~/C/base> ./rand.exe
         2         5         4         2         6
         2         5         1         4         2
         3         2         3         2         6
         5         1         1         5         5
由上可见,每个数字出现的几率大致相同。下面用一个程序模拟 6000 次掷色子的过程并统计出各个面出现的次数:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int face, roll, frequency1 = 0, frequency2 = 0, frequency3 = 0,
        frequency4 = 0,frequency5 = 0, frequency6 = 0;

    for ( roll = 1; roll <= 60000; roll++ ) {
        face = 1 + rand() % 6;

    switch( face ) {
        case 1:
            ++frequency1;
            break;
        case 2:
            ++frequency2;
            break;
        case 3:
            ++frequency3;
            break;
        case 4:
            ++frequency4;
            break;
        case 5:
            ++frequency5;
            break;
        case 6:
            ++frequency6;
            break;
    }

   
    }

    printf("%s%13s\n", "Face", "Frequency");
    printf("  1%13d\n", frequency1);
    printf("  1%13d\n", frequency2);
    printf("  1%13d\n", frequency3);
    printf("  1%13d\n", frequency4);
    printf("  1%13d\n", frequency5);
    printf("  1%13d\n", frequency6);
       
    return 0;
}
运行及输出
beyes@linux-beyes:~/C/base> ./rand-1.exe
Face    Frequency
  1        10014
  1         9912
  1        10289
  1        10041
  1         9875
  1         9869
实际上,rand() 函数产生的是伪随机数。重复使用 rand() 函数能够产生一系列数字,这些数字看起来是随机的。但每次执行这个程序时,这些数的顺序都会重复。程序被彻底调式后,每次执行时,这个程序会产生一组不同顺序的随机数。这叫随机化,它是使用标准库函数 srand() 来实现的。函数 srand() 需要一个 unsigned 整型参数,在每次程序执行时使用函数 rand() 去生成一组不同顺序的随机数。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-6 07:51 , Processed in 0.080541 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表