rand和srand的用法 - 商帝国咨询 - 五略商书

rand和srand的用法

商帝国咨询头像

阅读 12743 | 分类:文章

rand和srand的用法' ^# K" _+ Q  ^
首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明。, J9 x. y, T& i4 y# @
5 i' v  v. I; W, e  N
rand(产生随机数)  ?, w' ^" v: \9 k, \6 t
表头文件: #include<stdlib.h>: G- j5 h; b5 l' V  m0 u) m* h
7 A- `9 q" i: X0 K+ U0 q* n
定义函数 :int rand(void)4 S0 g$ t" ~: p# r; x& D
! Y5 a/ `, q0 S5 s% s  P
函数说明 :
( z- R" q8 @0 J' H' t) }因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。rand ()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它.初始化的函数就是srand()。
6 ]6 M& y% j7 W& i
5 \# q% Q3 z. I2 q7 e' f9 n2 Q返回值:& _& _# Z$ g2 L3 s7 B9 d' E
返回0至RAND_MAX之间的随机整数值,RAND_MAX的范围最少是在32767之间(int),即双字节(16位数)。若用unsigned int 双字节是65535,四字节是4294967295的整数范围。% K% V3 ?$ z: ], C4 S* n9 c6 [! c7 F
0~RAND_MAX每个数字被选中的机率是相同的。
7 y5 F. F# S" J# t2 k9 [& Z. o( o. a3 ~% [$ H3 B) W' h
范例:
9 @, F/ I% ?0 P6 _/* 产生介于1 到10 间的随机数值,此范例未设随机数种子,完整的随机数产生请参考
* X/ ]4 B, y) G: {srand()*/
4 a- @+ j& e# s8 G#include<stdlib.h>
7 Y" i8 |/ L1 p' m8 j1 pmain()
) [- E5 \$ U3 {7 k" n/ x{& f+ _6 }+ j( \3 Z4 r
int i,j;6 d$ n& ^5 `( e# q% v* y  y) V8 `
for(i=0;i<10;i++)2 s" h8 X% ^8 }9 A' J: _
{; F8 o2 m& C: c; C
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
: ~& {* X$ Z& gprintf("%d ",j);& S& y6 W( O+ P" b# a
}7 ~" a7 C- |9 D" m8 r' `
}; e% }5 f4 ~3 u/ o" t
   执行:
' h6 q' K' r" }# J  v8 ~7 n: r/ \' z8 j7 G2 z# E+ }) Z2 l$ `
9 4 8 8 10 2 4 8 3 6
; x. M+ v# [8 R9 4 8 8 10 2 4 8 3 6 //再次执行仍然产生相同的随机数! E# ~9 q3 o  X

4 q9 t+ ^+ b6 Y0 i6 q7 u% o
5 F( S7 S$ A) L* t4 D% {1 Ksrand(设置随机数种子)
/ n5 y& b' @$ W, L8 }: W+ K表头文件:#include<stdlib.h>
8 d) X1 s6 p8 x# Y$ m; X" T3 ]. r, g! Z8 w1 O  o2 x0 V% m: x: a7 S
定义函数:void srand (unsigned int seed);& I6 H+ f# @$ E4 g! ^' N

+ J3 f7 v- C5 z8 z函数说明:1 Y( n$ R3 ~7 O9 Y/ {4 Y( Z3 Z
srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。; |& P4 s2 ^' n7 I4 }, D

* N) c! I* o  \5 ~0 O/ b7 z5 ]范例+ w* p9 ~6 t, @8 j; G0 I
/* 产生介于1 到10 间的随机数值,此范例与执行结果可与rand()参照*/3 P; ]$ s8 W. p; N8 W
#include<time.h>
* v! O  n# {" Q2 W$ |#include<stdlib.h>$ z1 G/ q" i( n& _3 O
main()6 V% V4 s- j& Y* G  w  |$ B
{& K2 v$ x% f" r3 M* J
int i,j;
' y9 e1 H% t8 l' |srand((int)time(0));) k# c, ]& u6 @+ P+ V- H' c
for(i=0;i<10;i++)
, _' k5 i6 k0 v. t{8 l9 G  |2 ?  f: l- u"

留言区(共0条)

暂无留言,快来抢占沙发~
作者声明:非原创
平台声明:文章及评论仅代表作者本人观点,五略商书系信息发布平台,仅提供信息存储空间服务,如有侵权,请联系13521509118。转载请注明作者和出处:转自五略商书m.shangdiguo.com,作者商帝国咨询!