数学建模社区-数学中国
标题:
科普之-------随机数rand()的用法
[打印本页]
作者:
wangzheng3056
时间:
2013-7-30 15:28
标题:
科普之-------随机数rand()的用法
本帖最后由 wangzheng3056 于 2013-7-29 14:33 编辑
- P/ P6 f' z; w6 W
* ]* J8 {0 G @
#include<iostream.h>
0 P3 H. E8 c# g8 O4 A' W
#include<stdlib.h>
0 m" B$ Q3 l2 ^
#include<time.h>
7 W' M; C4 c: M6 B4 U
void main() /*主函数中获取一个随机数并且输出*/
1 ~: B+ d4 g2 e% E. a6 C1 g+ ]: q
{
( H1 ?$ h+ [" ^/ w4 r/ }
srand(time(0));//初始化随机数发生器
Q1 a& X! x9 B# O
cout<<rand()<<endl;//输出随机数
3 h6 ]0 E& E& ~! f+ G b7 ^2 X
}
) L$ a6 r. X- k) h4 f3 W
, O* |0 m1 j* u3 ^! |) m
, ?5 ]* r6 o4 |4 x
头文件中的iostream.h就不用多说了 , 我详细说一下stdlib.h库中的srand函数,它是随机数发生器的初始化函数。
! D+ N0 _3 v' x. R4 L
原型:void srand(unsigned seed);
* R, a2 A: H4 P+ I* ^8 @. W' F
用法:它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的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]。
4 \0 n! N8 D6 c' O
6 n$ ^1 X4 T( b6 H9 Z& s. b
stdlib.h中还有一个很重要的函数就是rand()函数,他是生成随机数并且返回结果的函数。rand()产生伪随机数,srand函数提供种子,种子不同产生的随机数序列也不同,所以通常先调用srand函数 time(0)返回的是系统的时间(从1970.1.1午夜算起),单位:秒,种子不同当然产生的随机数相同几率就很小了
! U( ]/ E4 O: L- E) i$ |
7 K" {. S2 I1 j5 E$ g
第三个头文件time.h是C/C++中的日期和时间头文件,内部有很多关于系统时间的属性和操作,具体的大家可以查看MSDN。上边所说的time(0)函数即为这里的成员函数。
, m6 j. Y' y& g& I% `% o+ }
% D4 C& P; J( m% K
8 e0 D/ d% B6 z5 W* W# F
随机数已经产生了,那么接下来我们就可以用随机数去实现我们想做的东西了。
4 b+ O& Z% o d5 a! h: J( a$ L
支持版主的请留言。
' ?# A" C' f% B/ c, x3 t5 C& ^" |
下一贴 --------猜数字游戏之C实现。
: \: \# D* a$ [* Q q* {1 K1 s4 x
, j6 W+ t+ Q! P& ~. \' b( B
. \0 a' W8 a1 U6 Z9 q
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5