数学建模社区-数学中国

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

作者: wangzheng3056    时间: 2013-7-29 10:32
标题: 科普之-------随机数rand()的用法
本帖最后由 wangzheng3056 于 2013-7-30 17:41 编辑
" @: f% N8 e( |3 I% f. c0 p! a$ `0 g( O4 }. i( p3 ^( g$ M
#include<iostream.h>
# m( B& X) M* Q* K8 q* D- P3 S#include<stdlib.h>
0 L# Z% y+ J& o7 S. a#include<time.h># ^9 G% p- I3 y
void main()   /*主函数中获取一个随机数并且输出*/% g/ h8 z( y( e
{  K/ l+ G( _) `) p) v2 _
      srand(time(0));//初始化随机数发生器; s: C' E2 I* e8 y
      cout<<rand()<<endl;//输出随机数 - R9 Y3 q" W7 P: R: K1 v( d2 b# n
}) m8 o0 I/ h1 ]- |" ?$ |7 m

5 W2 |$ t6 @5 [/ i0 e. B) m
) n% t. @- h6 [3 n- Y* v头文件中的iostream.h就不用多说了 , 我详细说一下stdlib.h库中的srand函数,它是随机数发生器的初始化函数。, S, @/ f! M8 e+ V7 G4 D& l" h) ^
原型:void srand(unsigned seed);. O3 A$ g4 K5 z1 M* V& {
用法:它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的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]。
! |/ k! R% [$ N2 L3 {% R4 G+ r, x  R& e" b
stdlib.h中还有一个很重要的函数就是rand()函数,他是生成随机数并且返回结果的函数。rand()产生伪随机数,srand函数提供种子,种子不同产生的随机数序列也不同,所以通常先调用srand函数 time(0)返回的是系统的时间(从1970.1.1午夜算起),单位:秒,种子不同当然产生的随机数相同几率就很小了
6 ]- Z) m4 @' i" u; F( q
" M1 O4 Y3 j) Y/ h% I第三个头文件time.h是C/C++中的日期和时间头文件,内部有很多关于系统时间的属性和操作,具体的大家可以查看MSDN。上边所说的time(0)函数即为这里的成员函数。6 J- |5 d. T8 i+ M2 S
1 G! k7 L/ b- K6 }
" e8 j# {: S9 M( @5 Q0 t% Y
随机数已经产生了,那么接下来我们就可以用随机数去实现我们想做的东西了。
3 Q% x+ P. G7 i$ F  C支持版主的请留言。
" \( J# [8 P$ e* d: a1 {下一贴 --------猜数字游戏的实现
& L' d' r6 t0 `8 ?( _3 _9 h, E  d5 ]+ h! M; |

, w1 l6 M- d! c
作者: 百年孤独    时间: 2013-7-29 15:06
等待中!最近恶补 C语言!
$ F; f# ?3 [0 P; n- F: E+ _4 i4 s& g
作者: 平凡之不凡    时间: 2013-7-30 17:40
多发些帖子,超有用




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