伪随机数rand()与srand()学习心得

来源:互联网 发布:淘宝创业故事 编辑:程序博客网 时间:2024/06/05 01:54

(只是自己的粗略见解)

简单的说,rand()每次运行得到的随机数序列是一样的,

                而srand()每次运行达到的序列不同,是真正的随机序列。

至于那些高深的理论,我并没有去深入研究,比如到底rand怎么实现的,以及一些机器时间等。。。。。。。。


直接看下面吧

1、rand()用法

//采用rand()每次生成的随机数序列是一样的void randTest(){for (int i = 1; i < 10; i++) {int k;k=rand()%100+1;//rand()%100表示产生0到100之间的随机数,即取了随机数后再对100取余 int j;// j=(int)(n*rand()/(RAND_MAX+1.0))   产生一个0到n之间的随机j = (int)(10 * rand() / (RAND_MAX + 1.0));//产生0到10之间的伪随机数printf("k=%d\n",j);}}

2、srand()用法

#include<stdio.h>#include<stdlib.h>#include<time.h>void srandTest(){int i, j;//srand(5);//默认情况下种子为1srand((int)time(0));//每次输出的序列都不一样//srand((unsigned)time(NULL));//与srand((int)time(0));效果一样for (i = 0; i<10; i++){j = rand() % 100 + 1;//产生0~100之间的随机数//j = 1 + int(rand()*100.0 / (RAND_MAX + 1.0));printf("%d  ", j);}}//情况一:默认种子//int i, j;//for (i = 0; i<10; i++)//{//j = rand() % 100 + 1;//printf("%d  ", j);//}//由于种子默认都是1,每次都输出:42  68  35  1  70  25  79  59  63  65//情况二:指定种子为1//int i, j;//srand(1);//for (i = 0; i<10; i++)//{//j = rand() % 100 + 1;//printf("%d  ", j);//}//由于种子没有改变还是1,所以每次都输出:42  68  35  1  70  25  79  59  63  65//情况三:例如指定种子为5//int i, j;//srand(5);//for (i = 0; i<10; i++)//{//j = rand() % 100 + 1;//printf("%d  ", j);//}//由于种子没有改变,每次都输出:55  94  56  50  61  31  28  50  73  41//情况四:产生伪随机种子,每次结果不同//int i, j;//srand(5);//默认情况下种子为1//srand((int)time(0));//每次输出的序列都不一样,或者使用//srand((unsigned)time(NULL));效果一样//for (i = 0; i<10; i++)//{//j = rand() % 100 + 1;//产生0~100之间的随机数//printf("%d  ", j);//}//每次运行结果不一样//第一次运行结果:25  88  36  42  70  5  25  86  93  19//第二次运行结果:95  49  1  51  71  19  32  8  28  32

仔细去看很有趣的,特别是time.h文件中的一些函数,多去尝试一下。

我写博客就是为了记住自己学的一些东西的,是让自己看的,不喜勿喷啊吐舌头

阅读全文
0 0