C语言程序设计 伪随机数的产生
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.3.1伪随机数的产生
产生伪随机数的函数是rand(),该函数可随机生成0~RAND_MAX之间的一个整数。RAND_MAX是头文件
在编写程序时经常需要各种范围的随机数,如投骰子时需要的随机数是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(),通过提供不同的种子产生不同的随机数序列。