随机数产生函数
示例:
#include <stdio.h> #include <stdlib.h> int main() { int a,i; for (i=0 ; i<=10 ; i++) { a = rand(); printf("%d \n", a); } getchar(); return 0; }
运行结果:
1804289383
846930886
1681692777
1714636915
1957747793
424238335
719885386
1649760492
596516649
1189641421
1025202362
再次运行
1804289383
846930886
1681692777
1714636915
1957747793
424238335
719885386
1649760492
596516649
1189641421
1025202362
和上面一模一样!得出结论:rand()是伪随机,每次运行的结果一样。那么怎么避免这种“伪随机”呢?那就要另外一个函数srand()配合,srand()它的意思是:置随机数种子。只要种子不同,rand()产生的随机数就不同。
#include <stdio.h> #include <stdlib.h> int main() { int a,i; srand(100); for (i=0 ; i<=10 ; i++) { a = rand(); printf("%d \n", a); } getchar(); return 0; }
运行结果:
677741240
611911301
516687479
1039653884
807009856
115325623
1224653905
2083069270
1106860981
922406371
876420180
#include <stdio.h> #include <stdlib.h> int main() { int a,i; srand(10); for (i=0 ; i<=10 ; i++) { a = rand(); printf("%d \n", a); } getchar(); return 0; }
结果:
1215069295
1311962008
1086128678
385788725
1753820418
394002377
1255532675
906573271
54404747
679162307
131589623
随机数种子不同,产生的结果再不相同。
怎么让它每次生成的都不一样呢,系统的时间是不停变化的,我们是不是可以利用呢?
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int a,i; unsigned int tm = time(NULL); srand(tm); for (i=0 ; i<=10 ; i++) { a = rand(); printf("%d \n", a); } getchar(); return 0; }
运行第一次:
1943618223
1373471778
1476666181
2054163504
937505999
1233927247
1056853368
1812086252
862771187
530774611
1117905961
运行第二次:
969995764
349618453
203599721
151758322
444368239
1714632333
2034185210
145622174
1608107639
1863907432
2110476585
运行第三次:
1637559588
1103816085
742512873
331771740
981048319
2136780304
662571564
380818899
1190877608
2101919912
359796216
上面的结果再不相同了,但生成的随机数都比较大,能不能自定义生成在一个范围内的数呢?
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int a,i; unsigned int tm = time(NULL); srand(tm); for (i=0 ; i<=10 ; i++) { a = rand()%101; //只生成从0到100之间的随机数 printf("%d \n", a); } getchar(); return 0; }
运行:
73
26
73
16
3
70
10
37
83
50
40
用取余的方法控制随机数的范围。