数学建模社区-数学中国

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

作者: wangzheng3056    时间: 2013-7-30 15:28
标题: 科普之-------随机数rand()的用法
本帖最后由 wangzheng3056 于 2013-7-29 14:33 编辑
# ~; t$ P1 K! U: A' H* G
+ y4 d- a1 q, V- i, Y#include<iostream.h>
4 l  k: b( P& ?#include<stdlib.h>
, y; Y. E+ O$ |#include<time.h>5 t0 ]' h" d) p9 K
void main()   /*主函数中获取一个随机数并且输出*/
, {8 H% w) v0 {' A! z8 \& e) G{' T2 p* q! J1 o9 x. G4 L. F' c4 {* ~
      srand(time(0));//初始化随机数发生器9 B0 r7 ?; r$ G5 a) k. s+ v
      cout<<rand()<<endl;//输出随机数 3 ]( ]- ?3 B& c9 W7 }5 M& P
}
# ]6 y" K9 N, Y' }/ X9 O7 O! a- n5 p8 S. |1 B( H% G6 K' X

. t- g" V* j0 S, s- t6 H/ P头文件中的iostream.h就不用多说了 , 我详细说一下stdlib.h库中的srand函数,它是随机数发生器的初始化函数。
' |$ t3 x# a. q3 o) Y, @原型:void srand(unsigned seed);
- O! U5 x+ H& Z+ H5 A3 f5 d+ D用法:它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的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]。
" b4 t2 u/ j; ]; V* B) c8 }% H4 |/ s, N; H7 b7 K+ S
stdlib.h中还有一个很重要的函数就是rand()函数,他是生成随机数并且返回结果的函数。rand()产生伪随机数,srand函数提供种子,种子不同产生的随机数序列也不同,所以通常先调用srand函数 time(0)返回的是系统的时间(从1970.1.1午夜算起),单位:秒,种子不同当然产生的随机数相同几率就很小了
7 ^( T' k. q0 F" Y1 W
, V, |/ g6 o/ |: O第三个头文件time.h是C/C++中的日期和时间头文件,内部有很多关于系统时间的属性和操作,具体的大家可以查看MSDN。上边所说的time(0)函数即为这里的成员函数。* B6 u3 Q# z2 C3 L# C) s+ ]

5 J, q+ y* ~  F3 d0 E' s
' Y( B2 p: ^7 M/ H4 W8 y8 K" o/ Q随机数已经产生了,那么接下来我们就可以用随机数去实现我们想做的东西了。" \' m/ r5 s: z7 U0 F
支持版主的请留言。
; |% b5 S" I7 j% Z9 j下一贴 --------猜数字游戏之C实现。
$ {7 H! V& a& @6 j
  S& ~, Y$ c( F- D9 x$ x; f! G* p# O6 n' j





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