c语言里 random函数怎么实现的

c语言里 random函数怎么实现的,第1张

1

rand函数是根据一个数(我们可以称它为种子)为基准,以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数

2

但这产生的并不是真意正义上的随机数,是一个伪随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值。

3

种子相同,产生的随机序列相同。这样做的好处是,方便我们产生一组固定的随机序列,用来调试程序。

4

C提供了srand()函数,用来设置种子,它的原形是void

srand(

int

a)。

5

在调用rand函数产生随机数前,应该先利用srand()设好随机数种子,如果未设随机数种子,默认种子为1。

srand(time(NULL)):这是两个函数,一个是srand函数,这是在调用rand()这个函数之前使用的,rand()是一个产生随机数的函数,而srand是一个设置随机数种子的函数,通常这两个函数是一起使用的,来完成产生随机数的功能。

而time(NULL)这个函数的返回值是作为srand函数的参数的,意思是以现在的系统时间作为随机数的种子来产生随机数,至于NULL这个参数,因为这个话就返回到现在时间时候的long秒,只有设置成NULL才能获得系统的时间。

扩展资料:

计算机并不能产生真正的随机数,而是已经编写好的一些无规则排列的数字存储在电脑里,把这些数字划分为若干相等的N份,并为每份加上一个编号用srand()函数获取这个编号,然后rand()就按顺序获取这些数字,当srand()的参数值固定的时候,rand()获得的数也是固定的,所以一般srand的参数用time(NULL),因为系统的时间一直在变,所以rand()获得的数,也就一直在变,相当于是随机数了。只要用户或第三方不设置随机种子,那么在默认情况下随机种子来自系统时钟。

如果想在一个程序中生成随机数序列,需要至多在生成随机数之前设置一次随机种子。 即:只需在主程序开始处调用srand((unsigned)time(NULL));后面直接用rand就可以了。不要在for等循环放置srand((unsigned)time(NULL))。

s_addr是一个long型的变量,当然可以用random的返回值进行赋值。结构体如下:

typedef struct in_addr {

union {

struct {

u_char s_b1,s_b2,s_b3,s_b4;

} S_un_b;

struct {

u_short s_w1,s_w2;

} S_un_w;

u_long S_addr;////////////////////////////////////////这里

} S_un;

} in_addr;

IP地址本来就是一个32位整数,只不过为了方便记忆和查看,将8位作为一组,每组用10进制数字表示,并且用''隔开。比如:0003,对应的32位二进制数为:0000000000111(前面有29个0),s_addr就是记录这个二进制数的。

struct {u_char s_b1,s_b2,s_b3,s_b4;} S_un_b;

这个是用4个10进制数表示的IP地址,

s_un_bs_b1=0

s_un_bs_b2=0

s_un_bs_b3=0

s_un_bs_b4=3

就是IP地址"0003"了,系统负责将它转换为32位二进制数。

struct {u_short s_w1,s_w2;} S_un_w;

这个是指前16位作为一部分,后面16位作为一个部分。"0003"前面16位作为一个部分值为0,后面的部分值为3,所以:

s_un_ws_w1=0;

s_un_ws_w2=3;

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/11669518.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存