C语言如何设置随机数

在这里插入图片描述

步骤

  1. 设置一个随机的起点
    那如何设置呢?编写代码srand((unsigned int)time(NULL))。而该代码用到了两个库函数void srand(unsigned int seed)longlong time(NULL),对应的头文件是<stdlib.h>和<time.h>。
  2. 生成随机数
    生成随机数直接编写代码int ret = rand();就行。而int rand(void);为生成随机数的函数,该函数将会生成一个0~32767之间的一个随机数,该函数对应的头文件是<stdlib.h>。
  3. 设置随机数的范围
    如若我想生成一个1~100之间的随机数,我该如何做?其实也不难int ret = rand()%100+1;这样就成了。

讲解

1.在刚开始学习C语言的时候,必然会遇到一类问题“随机值问题”。当然也必然会有一些自认为学的不错的人告诉你:只要引用函数rand()就可以得到随机值。但这种直接引用rand()函数得到的随机值其实它并不随机!!!举个例子:

#include<stdio.h>
#include<stdlib.h>

int main()
{
	int i = 0;
	do
	{
		printf("输入1则继续下去:");
		scanf("%d", &i);
		printf("%dn", rand());
	} while (i);
}

在这里插入图片描述
重复执行上面这个代码,你将会发现你每一次执行所得的随机值都是一摸一样的,如上图所示。

2.如此看来直接调用rand()函数得到的可不是绝对的随机值呀!!!所以你就必须得好好研究研究rand()这个库函数了(推荐你一个官方的库函数查看软件MSDN,该软件会详细的解释每一个库函数)。
在这里插入图片描述
这就是官方的说明,意思是:rand()函数会返回一个0~RAND_MAX范围内的一个随机数(如果你把RAND_MAX转到定义,你会他就是我们之前所说的数值32767),在调用rand()函数前先得使用srand()函数设置一个随机的起点。所以我们按次改进一下程序:

#include<stdio.h>
#include<stdlib.h>

int main()
{
	int i = 0;
	do
	{
		srand(xxx);
		printf("输入1则继续下去:");
		scanf("%d", &i);
		printf("%dn", rand());
	} while (i);
}

在这里插入图片描述
但还是出了问题,并没有达到我们预期产生随机数,如上图所示。

3.我们发现只有当srand(xxx)中的xxx不一样的时候rand()输出的值才也才会不同,也就是说只有当xxx为随机值的时候,rand()才会输出随机值。可这不就又绕回“ 该怎么产生随机值的问题了呀,难道我们无中生有吗?”。
有时候我认为换一种思路或许会有意想不到的收获。就譬如:"时间"是不是永远处于变化的状态,从某种意义上来说相当于就是一个随机值了呀!!!那把时间带入srand()中不就可以让rand()产生随机值了嘛。
那该怎么获取这流动的时间值呢? 下面就要介绍一个库函数了:longlong time(NULL),该函数返回的是一个时间戳即:当前计算机时间减去计算机起始时间 (1970.1.1.0:0:0) 所得的时间换算成秒后,得到的那个值就是时间戳了)。接下来就是把时间戳放入srand()中了,但还要提一嘴,为了使类型可以匹配还是需要把time函数的返回值强制类型转换成(unsigned int),srand((unsigned int)time(NULL))。程序如下:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
	int i = 0;
	do
	{
		srand((unsigned int)time(NULL));
		printf("输入1则继续下去:");
		scanf("%d", &i);
		printf("%dn", rand());
	} while (i);
}

在这里插入图片描述
看着上图这调试结果,达是达到随机值的目的了,可好像随机浮动的范围有些令人咋舌啊。

4.所以代码肯定还是存在问题的,经过无数次的尝试你终会发现,程序每次调用rand()生成随机数前都会先调用srand()来设置随机起点。可其实并不需要设置这么多次随机起点,整个工程也只需设置一次即可,所以我们应该把代码srand((unsigned int)time(NULL))放到循环外。代码如下

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
	int i = 0;
	srand((unsigned int)time(NULL));
	do
	{
		printf("输入1则继续下去:");
		scanf("%d", &i);
		printf("%dn", rand());
	} while (i);
}

在这里插入图片描述

5.上面成功生成随机数了,可若还想进一步使得随机数的范围控制在1~100之间,其实也不难rand()%100+1;这样就成了。代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
	int i = 0;
	srand((unsigned int)time(NULL));
	do
	{
		printf("输入1则继续下去:");
		scanf("%d", &i);
		printf("%dn", rand() % 100 + 1);
	} while (i);
}

在这里插入图片描述
讲到这该如何创建随机数,我想你应该已经有很深的见解了吧!!!

在这里插入图片描述

这份博客👍如果对你有帮助,给博主一个免费的点赞以示鼓励欢迎各位🔎点赞👍评论收藏⭐️,谢谢!!!
如果有什么疑问或不同的见解,欢迎评论区留言欧👀。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>