关于C语言随机数

rand()

在编写内存泄露的代码时候,用到了随机数这个概念,秉持着深入浅出的学习风格,我对涉及到的知识进行了总结。
我们洗牌 就是把不同的牌交换不同的位置 牌是54 也就是交换最大跨度就是54
微软提供了获取随机数的函数
rand(speed)
种子值。 如果未指定 seed,则 SQL Server 数据库引擎将随机分配种子值。 对于指定的种子值,返回的结果始终相同。

image.png

image.png

我们多次运行程序发现所给的返回值都一样 这就相当于什么 每次洗牌结果位置都是一样的。就没有意义了。
我们没有给rand填上参数 默认会随机生成一个位于 0 ~ RAND_MAX之间的整数。在实际编程中,我们也不需要知道 RAND_MAX 的具体值,把它当做一个很大的数来对待即可。
示例:

#include<stdio.h>
#pragma	warning (disable:4996)
int main()
{
	int i;
	do
	{
		printf("输入1继续\n");
		scanf("%d", &i);
		int randn = rand(5666);
		printf("随机数%d\n", randn);

	} while (i);
}

要研究这个问题我们就要能起给出什么是随机数
rand()返回的是一个伪随机数,是根据一个数值按照某个公式推出来的,这个数值我们叫种子。种子只有在系统重启之后才会发生变化,所以根据一个固定的种子推算出来的伪随机数,我们在每次运行的时候,都是一样的。

srand

void srand (unsigned int seed);
srand()可以改变这个种子 也就是重新播种种子 根据参数播种种子 只要参数每次运行是不一样的,播种的种子就是随机的,所以可以用time()函数获取系统时间换算的秒数 肯定是任何时候都不一样的。
srand((unsigned)time(NULL));
修改上面的代码:

#include<stdio.h>
#pragma	warning (disable:4996)
int main()
{
	int i;
	srand(time(NULL));
	do
	{
		printf("输入1继续\n");
		scanf("%d", &i);
		int randn = rand(5666);
		printf("随机数%d\n", randn);

	} while (i);
}

image.png

image.png

多次运行可以看到随机数都不一样了

生成一定范围的随机数

在实际开发中,我们往往需要一定范围内的随机数,过大或者过小都不符合要求,那么,如何产生一定范围的随机数呢?我们可以利用取模的方法:
如果我们要生成0~9的随机数
可以rand()%10 //产生0~9的随机数,注意10会被整除
如何自己设置随机数的上限和下限
比如我们生成50~100的随机数如何写
rand()%51+50; //rand()%51生成了0-50的随机数 +50区间两边同增 即50~100
代码示例:

#include<stdio.h>
#pragma	warning (disable:4996)
int main()
{
	int i;
	srand(time(NULL));
	do
	{
		printf("输入1继续\n");
		scanf("%d", &i);
		int randn = rand()%51+50;
		printf("随机数%d\n", randn);

	} while (i);
}

image.png

关于取余和取模不再赘述,感兴趣的可以去百度了解一下,符号不同才会有所区别,符号相同,取余== 取模

网站标题:CV鼻祖洋芋

原创文章,作者:locus,如若转载,请注明出处:https://blog.cvpotato.cn/forward-code/c-2/94/

本博客所发布的内容,部分为原创文章,转载注明来源,网络转载文章如有侵权请联系站长!

(0)
上一篇 2024年11月14日 上午11:38
下一篇 2024年11月14日 上午11:52

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注