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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4.3.1伪随机数的产生

产生伪随机数的函数是rand(),该函数可随机生成0~RAND_MAX之间的一个整数。RAND_MAX是头文件中定义的一个符号常量。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

#include

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(),通过提供不同的种子产生不同的随机数序列。

相关文档
最新文档