如何生成随机值?

想要生成随机值,总共需要三大步骤。


首先,想要生产随机数,需要调用<stdlib.h>头文件中的rand函数。

1.rand函数

1.1 原型:int rand(void);---返回类型为整型且不需要代入任何值。头文件需要包含<stdlib.h>

1.2 作用:生成随机数。

1.3 rand函数的使用(使用时记得包含头文件stdlib.h):

#include<stdio.h>
#include<stdlib.h>
int main()
{
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	return 0;
}

 

 

这里可以发现,我的第一次打印和第二次打印是同一个值。这说明rand函数虽然会返回随机数,但是返回的却是一个随机数

为什么rand函数返回的是伪随机数呢?那是因为rand函数是对种子(默认为1)的基准值运算生成的随机数,当种子不变时,生成的数自然也不会改变。所以要想让rand函数返回的随机数发生改变就需要使种子发生改变

要想使种子发生改变,就需要调用头文件stdlib.h中的srand函数。

2.srand函数

2.1 原型:void srand(unsigned int seed);---不返回任何值,代入的参数需要为无符号整型。头文件需要包含<stdlib.h>。

2.2 作用:初始化随机数的生产器(相当于初始化种子)。

2.3 加入srand函数后:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	srand(1);//此时的种子为1
	printf("第一次打印:\n");
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	return 0;
}

 

可以发现,输出的值发生改变。但是为了让值发生改变,我需要不断地初始化种子,这样显得非常麻烦,为了不用这么麻烦,我们需要一个不断改变的数值来初始化我们的种子,为了实现这一目的,我们可以调用头文件<time.h>中的time函数。

3.time函数 

3.1 原型:time_t time(time_t* timer);---其中time_t为整型(long或者int 64),timer为指针。头文件需要包含<time.h>。

3.2 作用:可以返回时间戳。返回时间戳需要使用NULL(NULL为空指针)。时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数,它是随着时间变化的,是不断变化的。

3.3 使用:注意!代入srand函数的数据类型需要为无符号整型,而time函数的返回值为整型,所以需要强制转换类型。

在原有的基础上加入time函数:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
	srand((unsigned int)time(NULL));//一定要记住转化类型
	printf("第一次打印:\n");
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	return 0;
}

 

可以发现,我们没有对该代码进行任何改变,它就能生成完全随机的数值。

但是有个问题,从图可以看出,生成的随机数十分分散,且有些数值非常大,所以我们需要给随机值规定一个范围。

4. 随机数的范围

规定随机数的范围,使用一下公式即可:

a~b : a+rand()%(b-a+1);

解释:rand()%(b-a+1)的数值范围为0~b-a  ;  当加上 a 后范围变为a~b。

使用:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
	//假设范围为100~200
	srand((unsigned int)time(NULL));//一定要记住转化类型
	printf("第一次打印:\n");
	printf("%d\n", 100 + rand() % (200 - 100 + 1)); //a+rand()%(b-a+a)
	printf("%d\n", 100 + rand() % (200 - 100 + 1));
	printf("%d\n", 100 + rand() % (200 - 100 + 1));
	printf("%d\n", 100 + rand() % (200 - 100 + 1));
	return 0;
}

 

关于随机数生成的内容就结束了。如果有什么不足的地方,可以在评论区或者私信中告诉我,感谢你们的阅读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值