当前位置:首页 » 编程语言 » c语言随机数种子用来干嘛
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言随机数种子用来干嘛

发布时间: 2023-02-18 16:44:29

A. c语言中的srand的用法,什么是种子

高级语言中带的随机数产生函数是伪随机数,伪随机数的意思是并不是真正意义上的随机数,而是通过某种运算或者在某种程度上产生随机的效果。 由于计算机是一种图灵机,相同的输入必定产生相同的输出。所以,我们必须在C语言随机数的基础上加上某种比较随机的条件,简称种子。这样产生的随机数才会看起来比较随机,而不会每次运行程序的时候是一样的了。 比如光用rand,产生5个随机数,每次运行程序可能结果都是一样的 可能都是4 9 3 8 7 但是使用了当前系统时间为种子的话,每次运行结果就可能不一样了 假设第一次运行是5 1 0 3 9 第二次运行可能就是8 7 1 3 4

B. C中,rand()是什么意思,有什么作用

rand()是表示产生随机数的一种函数,多应用于循环语句当中进行判断。

比如说n=rand();

switch(n)

{case1.......

case2......}

这些都是都可能被执行的,因为数字是随机的。

(2)c语言随机数种子用来干嘛扩展阅读:

注意

rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种了,为基准以某个递推公式推算出来的一系数,

当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了 srand()函数,它的原形是void srand( int a) ,

功能是初始化随机产生器既rand()函数的初始值,即使把种子的值改成a; 从这你可以看到通过sand()函数,可以产生可以预见的随机序列。

参考资料来源:rand函数-网络

C. C语言中产生随机数利用到时间种子,什么原理谢谢啦。

在C语言中取随机数所需要的函数是:

int rand(void);
void srand (unsigned int n);
rand()函数和srand()函数被声明在头文件stdlib.h中,所以要使用这两个函数必须包含该头文件:

#include <stdlib.h>

rand()函数返回0到RAND_MAX之间的伪随机数(pseudorandom)。RAND_MAX常量被定义在stdlib.h头文件中。其值等于32767,或者更大。

srand()函数使用自变量n作为种子,用来初始化随机数产生器。只要把相同的种子传入srand(),然后调用rand()时,就会产生相同的随机数序列。因此,我们可以把时间作为srand()函数的种子,就可以避免重复的发生。如果,调用rand()之前没有先调用srand(),就和事先调用srand(1)所产生的结果一样。

D. C语言里的“种子植”是啥意思呀。

是【种子值】吧?

这个一般是针对函数来说的,假设你写了一个函数,会根据某个值(可以假设为变量a)的不同而返回不同的结果或执行不同的动作,那么该值就是这个函数的种子值。

举个例子吧,srand函数和rand函数。

rand函数返回一个在零到RAND_MAX之间的伪随机整数,假设我们不给这个函数的种子值,那你会发现每次执行这个函数的返回结果都是一样的。但是如果我们给种子值,srand( time(NULL) );你会发现每次执行这个函数的结果都不同了,因为每次都给了不同的种子值。

下面的代码你可以试着多运行几次,你会发现每次的结果都不同,然后把srand( time(NULL) );这行去掉,你会发现每次结果都相同,因为没有给rand函数设种子值

srand(time(NULL));
for(i=0;i<10;i++)
printf("Randomnumber#%d:%d ",i,rand());

E. C语言编程中生成随机数的初级教程

几个概念

随机数:数学上产生的都是伪随机数,真正的随机数使用物理方法产生的。

随机数种子:随机数的产生是由算术规则产生的,srand(seed)的随机数种子不同,rand()的随机数值就不同,倘若每次的随机数种子一样,则rand()的值就一样。所以要产生随机数,则srand(seed)的随机数种子必须也要随机的。

用srand()产生随机数种子

原型:void srand ( unsigned int seed );

作用是设置好随机数种子,为了让随机数种子是随机的,通常用time(NULL)的值来当seed。

time()用于随机数种子

函数原型:time_t time ( time_t * timer );

time()函数表示返回1970-1-1 00:00:00 到当前时间的秒数。

用的时候这样:srand(unsigned(time(NULL)));例如产生1~10之间的随机整数

#include#includeint main(){ srand(time(NULL)); for(int i=0;i < 10;i++) { int randValue=rand()%10; }}

上面的程序中要注意srand是在for循环外面的,如果把srand放到for循环里面,则每次产生的随机数都相同。

用rand()产生随机数

原型:int rand ( void );

作用是产生一个随机数,当然随机数是有范围的,为0~RAND_MAX之间,随机数与随机数种子有关。具体来说是,在产生随机数 rand()被调用的时候,它会这样执行:

如果用户之前调用过 srand(seed)的话,他会重新调用一遍 srand(seed)以产生随机数种子;

如果发现没有调用过 srand(seed)的话,会自动调用 srand(1)一次。

如果调用srand(seed)产生的随机数种子是一样的.话(即seed的值相同),rand()产生的随机数也相同。

所以,如果希望rand()每次调用产生的值都不一样,就需要每次调用srand(seed)一次,而且seed不能相同。这里就是经常采用time(NULL)产生随机数种子的原因。

C语言中可以使用rand()函数来生成一个从0到RAND_MAX的uniform分布。基于这个函数,我们可以构造出一些特定的随机数生成器来满足我们的需求。

(一)0到1的uniform分布:

//generate a random number in the range of [0,1]double uniform_zero_to_one(){ return (double)rand()/RAND_MAX;}

(二)任意实数区间的uniform分布:

//generate a random real number in [start,end]double uniform_real(double start,double end){ double rate=(double)rand()/RAND_MAX; return start+(end-start)*rate;}

(三)任意整数区间的uniform分布:

//generate a random integer number in [start,end)int uniform_integer(int start,int end){ int base=rand(); if(base==RAND_MAX) return uniform_integer(start,end); int range=end-start; int remainder=RAND_MAX%range; int bucket=RAND_MAX/range; if(base<RAND_MAX-remainder) return start+base/bucket; else return uniform_integer(start,end);}

这个函数要特别说明一下,平常时候我们都是用rand()%n来生成0到n-1的随机数,但是按这种方法生成的分布并不是uniform的,另外由于RAND_MAX只有32767,因此要生成比这个数更大的随机数需要另外想办法,理论上可以直接用0到1的uniform分布直接放缩,但实际效果不好。这里给出一种移位方式的实现。

(四)32bits的随机数

//generate a random 32 bits integer number int rand32(){ return ((rand()<<16)+(rand()<<1)+rand()%2);}

有了32bits的随机数生成方法,就可以构造32bits范围内的随机整数区间了,方法和之前16bits的情况一样。

(五)32bits范围内的随机整数区间

//generate a random 32bits integer number in [start,end) int uniform_integer_32(int start,int end){ int base=rand32(); if(base==RAND32_MAX) return uniform_integer_32(start,end); int range=end-start; int remainder=RAND32_MAX%range; int bucket=RAND32_MAX/range; if(base<RAND32_MAX-remainder) return start+base/bucket; else return uniform_integer_32(start,end);}

这里RAND32_MAX定义为0x7fffffff。

除此之外,利用rand()函数构造任意分布的随机数也是个值得探讨的问题。

理论上可以通过(0,1)的uniform分布,加上标准采样方法(sampling)获得。

F. c语言随机数代码中srand是干什么用的

srand要获取一个随机种子,最好是用一个时刻在变的量当他的种子,一句话,获取随机数要用rand()这个函数,而光用rand()所获取的随机数事实上并不随机,因为随机种子默认不变的,srand这个函数就是能提供这个随机种子的初始化函数,记住用法就行:srand(seek);rand();这两个一直伴着走就行,别分开,

G. c语言中的随机数种子

首先告诉你随机数种子是什么东东.
电脑不是人,不能随便就凭空想象一个数字出来。所谓的随机数,不过是通过一个函数经过计算出来的数字而已。 因此,随机数不过是函数计算出来的值,而一个函数要得到这个值Y,肯定需要一个输入X,所以X就是那个种子。
简单点说 Y = function(x);
随机数=Y,随机数种子=X。
第二,rand()%Y+1是什么意思。 首先你要弄懂%是什么意思,是取余运算。
举个例子 10 % 3 = 1 10 % 5 = 0;就是得到余数。
余数的范围永远是从 0到被除数-1 不可能等于被除数。
所以rand()%Y的意思就是 得到一个随机数,这个随机数的范围是从0到Y-1
再加1当然就是把这个随机数的范围确定在0到Y之间了
一般rand()%某数 都是用来指定取某个范围内的随机数的

这个for循环不过就是取打印10个0-99之间的随机数而已..

如果还不明白hi我

H. c语言!!!随机数种子

原型:void srand(unsigned int seed)。种子是无符号整型。
使用(unsigned)time(NULL)作为种子可以使每次运行的种子都不同,产生的随机序列也不同。自己指定一个数作为种子,除非通过某种方法使每次程序运行时该数的值都不同,否则将始终产生相同的随机序列。

I. 谁能帮我解释一下Random(long seed)里面的seed是干什么用的, 怎么用

seed 是随机的种子

如果不用的话,直接用Random()这样的话,每次生成的随机数就会

在一个范围内近似相等,所以随机效果不好

如果用个种子的话,每次随机的数据就会大不相同

打个比方说吧

在生物学中

一个纯合子,就是一个纯种子,如果它老是和自己产的种子授粉

这样它N代都是纯合子

现在如果我给它一个其它的种子的粉呢?

它们N代后是不是纯的呢?

呵呵,现在应该明白了吧

当然用法嘛

就和Random()用法一样,只不过是两种不同的构造函数

J. C语言中的随机数种子干嘛用的

防止每次随机的数与之前的相同。