首页 > 编程知识 正文

c语言产生随机数代码,C语言产生随机数

时间:2023-05-06 03:32:26 阅读:119838 作者:3235

我一直想系统地学习c语言的伪随机数,今天终于抓住了机会

伪随机数

c语言具有可以生成随机数据的函数,需要添加stdlib.h和time.h头文件。 首先在主函数的开头加上srand(unsigned ) time (null ) )。

让我先介绍一下srand

头文件:

定义函数: void srand (未定义;

函数说明:用于设置srand (为rand )生成随机数时的随机数种子。 参数seed必须是整数,通常可以将getpid (或time(0) )返回值用作seed。 如果为每个seed设置相同的值,则rand ()生成的随机值每次都相同。

让我来介绍一下time,

函数名: time

函数原型:time_ttime(time_t*timer ) )。

函数功能:获取设备的日历时间或设置日历时间

函数返回:机器日历时间

参数说明:如果timer=null,则获得机器日历时间;如果timer=时间数值,则用于设置日历时间,time_t为长时间类型

所属文件:

因此,上述的srand (单一)时间(空) ) )利用系统时间初始化随机种子。

最后介绍一个重要的函数rand

随机函数

头文件:

定义函数:内部(void ) )

函数:生成随机数

函数说明:由于rand的内部实现是用线性同构方法制作的,它不是真的随机数,因为其周期特别长,可以看作在一定范围内的随机。 rand ) )返回从0到RAND_MAX范围内的随机值。 在调用此函数生成随机数之前,必须使用srand (设置随机数种子。 如果未设置随机数种子(rand ) )在调用时自动将随机数种子设置为1。

返回值:返回从0到RAND_MAX的随机整数值。 RAND_MAX的范围为32767(int ),为2个字节(16位)。 在unsigned int中,2字节为65535,4字节为4294967295的整数范围。 选择0-RAND_MAX中的每个数字的概率相同。

rand ) )生成假随机数字,每次运行时都相同。 如果不同,用不同的值初始化。 初始化的函数是srand (。

举一个例子

#包含

#包含

#包含

int main () )。

srand () unsigned (time ) ) null );

for(intI=0; i10; I ) {

printf('%d ',rand ) );

}

返回0;

}

说白了,上述随机数范围在0 ̄0~32767之间,如果没有设置系统时间种子,rand的默认随机种子为1,多次运行结果一致。

当然,如果想要给定范围的随机数,则必须使用rand (() ) ) ) b-a ) a。 很明显,rand () % ) b-a] )的范围为[0,b-a],再加上a就是[a,b]。

举个例子,[ 0,1 ]和[ 3,6 ]之间的随机数)

#包含

#包含

#包含

int main () )。

srand () unsigned (time ) ) null );

for(intI=0; i10; I ) {

printf('%d”,rand ) %2;

}

putchar((n ) );

for(intI=0; i10; I ) {

printf('%d”,rand ) %4);

}

返回0;

}

通常,该范围最大为0到32767,如果希望生成大于32767的随机数,可以通过移位、拼凑或用随机数除以RAND_MAX来获得[ 0,1 ]范围内的浮点数。 这个浮点数乘以范围的长度(b-a 1)再加上a就可以了。 即((int ) ) (double ) rand )/32767 * (B- a1 ) a ) )相当于该浮点数在[a,b]范围内的比例位置

举一个例子

#包含

#包含

#包含

int main () )。

srand () unsigned (time ) ) null );

for(intI=0; i10; I ) {

printf('%d ),) int ) ) 1.0*rand )/RAND_MAX*50000 10000 ) )//10000至60000

}

返回0;

}

PS:介绍了一种简单的交流技巧,一次计算出程序中所有需要的结果,并通过查询直接得到这些结果。 典型的交流技巧是木有(() )。

总结

c语言的伪随机数的适用范围还很广,下次需要使用的时候,就不用再找任何资料了。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。