数学建模社区-数学中国

标题: 科普之-------随机数rand()的用法 [打印本页]

作者: wangzheng3056    时间: 2013-7-30 15:28
标题: 科普之-------随机数rand()的用法
本帖最后由 wangzheng3056 于 2013-7-29 14:33 编辑 8 f" Q: H2 _% Q
& |! F4 ], \4 n5 t& ]
#include<iostream.h>
7 a# k" T4 ]. M* c) I#include<stdlib.h>
3 V5 Q3 g& ?1 }0 `- f#include<time.h>. i/ u. G( ?; {8 _$ J
void main()   /*主函数中获取一个随机数并且输出*/
, z2 I2 O& f2 m! C- ~7 Y  r* j{9 a7 y8 m$ [' j& [
      srand(time(0));//初始化随机数发生器
6 E. Z0 r6 c+ x/ p1 o      cout<<rand()<<endl;//输出随机数 & n4 d+ s0 o: \- x
}& I/ U( M, L# E* j/ u7 {# Z" t

7 d, g9 p% e6 z  m" ~7 C6 \0 H. x0 k; H  V8 W' J/ D
头文件中的iostream.h就不用多说了 , 我详细说一下stdlib.h库中的srand函数,它是随机数发生器的初始化函数。
0 S# ~  F& f2 H: x. z/ ?0 A原型:void srand(unsigned seed);0 E3 p4 y: Y7 M1 K8 [0 g/ ~+ }3 b, E
用法:它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的rand()函数会出现一样的随机数。如: srand(1); 直接使用1来初始化种子。不过为了防止随机数每次重复常常使用系统时间来初始化,即使用 time函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970 到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型再传给srand函数,即: srand((unsigned) time(&t)); 还有一个经常用法,不需要定义time_t型t变量,即: srand((unsigned) time(NULL)); 直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的t数据。srand((int)getpid()); 使用程序的ID(getpid())来作为初始化种子,在同一个程序中这个种子是固定的[1]。2 C' f0 k8 y: n6 h0 g
! x" I3 t( X3 [+ T4 z/ o# w; X
stdlib.h中还有一个很重要的函数就是rand()函数,他是生成随机数并且返回结果的函数。rand()产生伪随机数,srand函数提供种子,种子不同产生的随机数序列也不同,所以通常先调用srand函数 time(0)返回的是系统的时间(从1970.1.1午夜算起),单位:秒,种子不同当然产生的随机数相同几率就很小了
2 _) w  I% X5 H/ Y
' I( S+ c. r  R) y6 a4 f: }/ S第三个头文件time.h是C/C++中的日期和时间头文件,内部有很多关于系统时间的属性和操作,具体的大家可以查看MSDN。上边所说的time(0)函数即为这里的成员函数。+ V! P' p, e& N8 u/ @

3 a- ^( V* \4 f) ?6 M/ x
* x4 l5 e: X2 Q! r. f( X随机数已经产生了,那么接下来我们就可以用随机数去实现我们想做的东西了。& s! H! ~  M1 T; [! L: M
支持版主的请留言。
' Z0 Y* |2 Q) H% w下一贴 --------猜数字游戏之C实现。
' D( j! l" v0 @7 M0 @/ h4 U0 S2 E4 X, Z! L

& D6 a0 q' b3 }$ |1 j4 t4 o




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5