当前位置:文档之家› C语言程序设计 伪随机数的产生

C语言程序设计 伪随机数的产生

4.3.1伪随机数的产生
产生伪随机数的函数是rand(),该函数可随机生成0~RAND_MAX之间的一个整数。

RAND_MAX是头文件<stdlib.h>中定义的一个符号常量。

ANSI规定RAND_MAX的值不小于32767。

在编写程序时经常需要各种范围的随机数,如投骰子时需要的随机数是1~6,投一枚硬币会有正反面,需要的随机数是0~1。

根据公式:
n=a+rand()%b
可以得到所需范围内的随机数。

其中,a为位移,是所需连续整数范围的第一个数,b是比例因子,是所需连续整数范围的宽度,则希望产生1~6之间随机数的公式为:face=1+rand()%6
【例4-3】编写一个模拟投掷硬币的程序,模拟20次,统计出正面出现的次数。

问题分析:每调用一次rand()函数会产生一个随机数,循环20次可以产生20个随机数。

硬币有正反两面,用1代表正面,0代表反面,产生伪随机数的公式为rand()%2。

参考程序如下:
/*程序名:4_3.c*/
/*功能:模拟投掷硬币20次,打印投掷结果并统计出正面出现的次数*/
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,face,iCount=0;
for(i=1;i<=20;i++)
{
face=rand()%2;
printf("%5d",face);
if(i%10==0)printf("\n");
if(face)iCount++;
}
printf("正面出现次数:%d次\n",iCount);
return0;
}
运行程序,结果为:
1100100000
1111111010
正面出现次数:11次
如果再次运行该程序,会发现结果与上面的相同。

这怎么称得上是随机数呢?实际上,每次调用rand函数产生的一系列数似乎是随机的,但每次执行程序所产生的序列则是重复的。

程序调试完成后,可以使用函数srand(),通过提供不同的种子产生不同的随机数序列。

相关主题