数学建模社区-数学中国
标题:
科普之-------随机数rand()的用法
[打印本页]
作者:
wangzheng3056
时间:
2013-7-30 15:28
标题:
科普之-------随机数rand()的用法
本帖最后由 wangzheng3056 于 2013-7-29 14:33 编辑
% S! k4 h$ l) n; [, [6 c$ z, K
& m; C1 [; B4 Q7 U2 U- A
#include<iostream.h>
" E( M8 k2 p& W2 o
#include<stdlib.h>
$ c( P- Q' v( w! A( d
#include<time.h>
8 M8 S+ Z( g' N
void main() /*主函数中获取一个随机数并且输出*/
* C# W9 [' _8 T: s/ {
{
2 y8 X6 T4 l: i8 |
srand(time(0));//初始化随机数发生器
. K4 t0 U& z# u6 h$ f
cout<<rand()<<endl;//输出随机数
|8 V% s1 c) J3 ^: g7 q) |6 y! g: ^
}
5 c9 Q* b# E9 ], |& i7 k# z
8 A! {( P# z. M& U. z A- M; P
+ b7 r. h- G6 H, \: H
头文件中的iostream.h就不用多说了 , 我详细说一下stdlib.h库中的srand函数,它是随机数发生器的初始化函数。
# j J( W5 O2 S1 w9 I- N
原型:void srand(unsigned seed);
" z& h5 L, v2 f' L' g7 M6 g
用法:它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的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]。
0 Y4 g5 ~: p- E' O8 {
8 r/ ^ ~3 D- S2 m
stdlib.h中还有一个很重要的函数就是rand()函数,他是生成随机数并且返回结果的函数。rand()产生伪随机数,srand函数提供种子,种子不同产生的随机数序列也不同,所以通常先调用srand函数 time(0)返回的是系统的时间(从1970.1.1午夜算起),单位:秒,种子不同当然产生的随机数相同几率就很小了
! D- G8 j' |8 A" I1 r: O
. Z2 I+ a& @8 m* v' R. ^
第三个头文件time.h是C/C++中的日期和时间头文件,内部有很多关于系统时间的属性和操作,具体的大家可以查看MSDN。上边所说的time(0)函数即为这里的成员函数。
$ G( n+ V9 B. T. e1 u$ w1 D1 r
' ?8 h; g: u! ?$ i+ X+ ~
8 X* c5 r( y* O7 f
随机数已经产生了,那么接下来我们就可以用随机数去实现我们想做的东西了。
; U( L& }0 O/ u4 \* E4 ~1 k/ Y
支持版主的请留言。
+ T6 Z: V$ {4 K+ s, a! o0 O
下一贴 --------猜数字游戏之C实现。
" H$ }: c! d4 }4 k- l) r
6 ~6 W: t6 M4 _) P
6 N$ r' ^/ l3 ?# V, i1 p
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5