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;
}

附加执行三次的结果:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值