1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > C语言生成随机数(rand() srand() time())

C语言生成随机数(rand() srand() time())

时间:2023-08-05 13:59:33

相关推荐

C语言生成随机数(rand() srand() time())

rand函数:

1.rand()函数:语句为rand(void); 生成伪随机数,但是在使用之前要先用srand为伪随机数生成种子,可以先理解为,如果要使用rand函数,就要先用srand函数。头文件:#include<stdlib.h>

srand(unsigned);int ret = rand();//表示用ret 存rand生成的随机数

2.RAND_MAX的值:0X开头为十六进制,即rand函数返回的随机数范围为0-32767

3.srand函数:srand(值)

注意:①:srand函数根据你传入的种子(即传入的值),生成随机数,只有每次传入的值不同,才能在每次执行程序时生成不同的随机数头文件:#include<stdlib.h>

②:任何其他值都会将随机数生成器置为随机起点。

③:srand函数要求传入的值时无符号的整型。

srand(1);//会生成随机数,但是每次执行程序生成的随机数相同srand(变化的数);//才能使每次执行程序生成的随机数不同

可以理解为:每次生成随机数时,只需要调用一次srand函数,传入一次值,否则生成的随机数将有一定的规律性。(如下图代码)。

4.time函数:想要为srand传入实时变化的数,现实中时间时一秒一秒的变化的,每次调用函数系统的的时间都是不同的,这里我们引入一个概念:时间戳

①:时间戳:可以理解为从计算机出现的某个时间开始,到现在经过了多少秒(更官方的定义可以去问问度娘)。

所以时间戳就是一个一直改变的量,可以在执行程序时每次生成的随机数都不同!

②:time函数获取时间戳:time(NULL); 即可获取当前的时间戳。由于srand函数要求传入无符号的整型,所以可以用unsinged int time (NULL);定义时间戳传入srand函数。且要调用#inlcude<time.h>的头文件。

int t = time(NULL);//获取时间戳srand((unsigned int)time(NULL));//将无符号的时间戳传入srand中

5.随机数的范围:rand()函数生成伪随机的范围是0-32767。

理解:一个数 % n = x 这里x的范围是[0,n-1]。

eg:x % 100 -> [0-99] x % 30 -> [0,29]

所以如果我们要生成1-100的随机数,可以写成

srand((unsigned int)time(NULL));//为rand函数生成伪随机数生成种子int ret = rand() % 100 + 1;//通过rand() % 100生成0-99的随机数进而+1得到1-100的随机数

总结

我们了解到,C语言中可以用rand();生成随机数,但是使用rand();要先调用srand();函数,且srand中传入的是无符号整型,随着传入的值生成随机数,通过unsinged int time (NULL)获取时间戳,每次传入每次执行程序时传入srand中不同的值以生成不同的随机数。

完整的程序:

#include<stdio.h>#include<strlib.h>#include<math.h>int main(){srand((unsigned int)time(NULL));//srand生成种子,并且传入时间戳int i = 0;int arr[10] = { 0 };//定义数组存生成的随机数while (i < 10){arr[i] = rand() % 10 + 1;//生成[1,10]的随机数printf("%d ", arr[i]);i++;}return 0;}

附加执行三次的结果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。