欢迎来到天天文库
浏览记录
ID:10674565
大小:32.00 KB
页数:7页
时间:2018-07-07
《c语言随机函数的使用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、在C语言函数库中包含了一个产生随机数的函数:intrand(void);在函数库中对这个函数的说明是:Therandfunctionreturnsapseudorandomintegerintherange0toRAND_MAX.Usethesrandfunctiontoseedthepseudorandom-numbergeneratorbeforecallingrand.而在C语言函数库中是这样定义RAND_MAX的:/*Maximumvaluereturnedby"rand"function*/#defineRAND_MAX0x7FFF所以,函数intrand(void);返回的
2、是一个界于0~32767(0x7FFF)之间的伪随机数,包括0和32767。注意,这里产生的是伪随机数,不是真正意义上的随机数,看下面的程序:#include"stdlib.h"#include"stdio.h"voidmain(void){/*Displayanumber.*/printf("%6d",rand());getchar();}程序运行的结果是:346多次运行这个程序,发现每次产生的结果都是346(不同的机器可能产生的结果不一样),这就是所谓的伪随机数。伪随机数是通过一个公式来运算出来的,所以,每次产生的伪随机数都一样。那么,如何才能产生真正意义上的随机数呢?这就有一
3、个随机种子的问题。在C语言标准函数库中,有这么一个函数:voidsrand(unsignedintseed);在《Thecprogramminglanguage》中对这个函数是这样描述的:srandusesseed(函数变量声明中的seed)astheseed(随机函数中种子的意思)foranewsequenceofpseudo-randomnumbers.Theinitialseedis1.所以,要产生真正意义上的随机数,那么就要求每次提供的种子不一样,一般情况下,都设置时间为随机函数的种子。看下面的一段程序:/*RAND.C:Thisprogramseedstherandom-nu
4、mbergenerator*withthetime,thendisplays10randomintegers.*/#include"stdlib.h"#include"stdio.h"#include"time.h"voidmain(void){inti;/*Seedtherandom-numbergeneratorwithcurrenttimesothatthenumberswillbedifferenteverytimewerun.将当前时间设置成随机函数的种子,所以每次产生的数都不一样*/srand((unsigned)time(NULL));/*Display10numbers
5、.*/for(i=0;i<10;i++)printf(“%6d”,rand());}Output6929802621987307342058766992203425051798810104每次运行这个程序,产生的随机数都不一样,这样就达到了随机数的要求了。注意,rand这个函数产生的随机数的范围是0~32767,如果要产生100以内的随机数怎么办呢?在标准C语言库中并没有定义产生给定范围的随机数的函数。其实,要产生给定范围的随机数,只要做一个取余(%)运算就可以了。下面是一个产生10以内随机数的函数:#include"stdlib.h"#include"stdio.h"#inclu
6、de"time.h"intrand2(void);voidmain(void){inti;/*Seedtherandom-numbergeneratorwithcurrenttimesothat·thenumberswillbedifferenteverytimewerun.*/srand((unsigned)time(NULL));/*Display10numbers:0~9*/for(i=0;i<10;i++)printf("%6d",rand2());getchar();}intrand2(void){returnrand()%10;}运行结果:2579013583在这个程序
7、中,我自己写了一个函数rand2(),来产生10以内的随机数,其实,打开标准库中的头文件Stdlib.h就会发现有这样的一条语句:#definerandom(num)(rand()%(num))上面的这行代码是为了方便产生给定范围的随机数的,思路也是采用取余的方法,所以上面的程序也可以改成:#include"stdlib.h"#include"stdio.h"#include"time.h"voidmain(void){inti;/*Seedt
此文档下载收益归作者所有