c语言中,rand函数为什么得依赖sand()函数
发布网友
发布时间:2022-04-20 11:02
我来回答
共1个回答
热心网友
时间:2023-09-28 13:33
标准库<cstdlib>(被包含于<iostream>中)提供两个帮助生成伪随机数的函数: 函数一:int rand(void);
从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。 函数二:void srand(unsigned seed);
参数seed是rand()的种子,用来初始化rand()的起始值。 可以认为rand()在每次被调用的时候,它会查看:
1) 如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用
srand(seed)一次来初始化它的起始值。
2) 如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)一次。 根据上面的第一点我们可以得出:
1) 如果希望rand()在每次程序运行时产生的值都不一样,必须给srand(seed)中的seed一个变值,这个变值必须在每次程序运行时都不一样(比如到目前为止流逝的时间)。
2) 否则,如果给seed指定的是一个定值,那么每次程序运行时rand()产生的值都会一样,虽然这个值会是[seed, RAND_MAX(0x7fff))之间的一个随机取得的值。
3) 如果在调用rand()之前没有调用过srand(seed),效果将和调用了srand(1)再调用rand()一样(1也是一个定值)。 举几个例子,假设我们要取得0~6之间的随机整数(不含6本身): 例一,不指定seed:
for(int i=0;i<10;i++){
ran_num=rand() % 6;
cout<<ran_num<<" ";
}
每次运行都将输出:5 5 4 4 5 4 0 0 4 2 例二,指定seed为定值1:
srand(1);
for(int i=0;i<10;i++){
ran_num=rand() % 6;
cout<<ran_num<<" ";
}
每次运行都将输出:5 5 4 4 5 4 0 0 4 2
跟例子一的结果完全一样。 例三,指定seed为定值6:
rand()随机函数是什么原理
rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种子)为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非...
C语言问题啊啊
rand(产生随机数)表头文件: #include<stdlib.h> 定义函数 :int rand(void)函数说明 :因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先...
iOS 中生成随机数的4种方法
以下为各个函数的返回类型:uint_32_t 的定义: typedef unsigned int uint32_t;产生从X~Y的随机数 X~Y有 Y-X+1个数 K= rand() % (Y-X+1) + X 参考: 1. iOS 中生成随机数的4种方法(rand、random、arc4random、arc4random_uniform) 2. sand _百度百科 ...
将一个随机数赋值给a可以直接用表达式a=rand()吗?
回答:rand和srand的用法 首先我们要对rand和srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明。 rand(产生随机数) 表头文件: #include<stdlib.h> 定义函数 :int rand(void) 函数说明 : 因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以...
单片机如何产生随机数
仅靠算法是无法产生真正的随机数,但可以产生一个伪随机数的序列,要想产生真正的随机数,需要一些硬件辅助。比如一些专用的随机数发生器。当然也可以搭建一个小硬件来产生,利用单片机的内置时钟设为1M,外接一个用温度敏感电阻搭建一个特征频率10M的RC振荡电路,用慢时钟去采集快时钟,然后经过简单处理,...
51单片机如何生成随机数?
用定时器加rand()随机函数来实现。rnda=rand()%2;rndb=rand()%3;单片机上电之后通过按键去启动取随机数,若是单片机上电就立即取随机数的话,那每次上电随机的结果都是一样的。然后是0到9不重复的随机数,程序中用了循环来判断是否和前面取的随机数相同,相同则进入下次取随机数,不同则存入数组...
随机函数的随机字母
随机小写字母:=CHAR(INT(RAND()*26)+97)随机大写字母:=CHAR(INT(RAND()*26)+65)随机大小写混合字母:=CHAR(INT(RAND()*26)+if(INT(RAND()*2)=0,65,97))有些情形下,我们需要生成一个不重复的随机序列。比如:我们要模拟洗牌,将一副扑克牌去掉大小怪后剩下的52张打乱。比较笨的方法...
C语言 指针问题
C语言中头文件stdlib.h是干什么用的,怎么用?
)、atoi()、atol()、rand()、srand()、exit()等等。 具体的内容可以打开编译器的include目录里面的stdlib.h头文件查看。C语言为了方便用户编写程序,为用户开发了大量的库函数,其定义在.h文件中,用户可以调用这些函数实现强大的功能。所以对于用户来说,掌握这些函数的用法是提高编程水平的关键。
c语言rand()函数
rand(产生随机数)表头文件: #include<stdlib.h> 定义函数 :int rand(void)函数说明 :因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先...