你知道如何生成随机数吗?(超详细附图)

这篇具有很好参考价值的文章主要介绍了你知道如何生成随机数吗?(超详细附图)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

😉前言

🍸如何用C语言实现随机数

🍹随机数原理

🍹rand函数(生成随机数)

🍹srand(避免每次运行程序产生的随机数都相同)

🍹时间戳

🥤time函数

🍸来个小小项目

🍸代码实现

🍹1.漂亮的主页

🍹2.游戏开关

🍹3.game()函数的代码实现。

🍹4.完整代码


手把手教你得到计算机的随机数,并附上一个小栗子。


😉前言

这两天时间允许还是日更叭,落下了不少博客没写呢,元气满满的一天,加油!多谢大家的支持,我已经500粉啦!

你知道如何生成随机数吗?(超详细附图)

🍸如何用C语言实现随机数

🍹随机数原理

 计算机所产生的随机数是通过一串很长的序列数模拟随机数,故称为伪随机数,在实际应用这些随机数时,这些随机数一般都能具有真实随机数的所有概率性质和统计性质,因此可以产生许许多多的序列伪随机数,一个序列的第一个随机数对应一个数,这个数称为种子数(seed)。

 简单的说,计算机随机数是通过一个算法(我也不知道)在一串已经定下来的数据中生成,每次生成随机数的起点叫做“种子数”。这个了解一下就行。

🍹rand函数(生成随机数)

在获取随机数的时候我们需要用到rand函数,拿出我们祖传的网站:http://cplusplus.com/ 来了解这rand函数。

这是一个针对函数资料查找的一个网站,在搜索栏写入你想查看的函数就可以的出结果。界面是全英文,在刚开始我们可以用百度翻译来帮助我们,看多了你就会发现,凭自己的能力也能看的懂了。不推荐使用整页翻译,这样会把int,rand,void等等关键词翻译掉,反而不利于我们理解。

你知道如何生成随机数吗?(超详细附图)

我们来一点一点理解(其实我也是用了百度翻译)。 

你知道如何生成随机数吗?(超详细附图)

可以得出,我们无需传数据进去,且它会返回一个整数。

 你知道如何生成随机数吗?(超详细附图)

 并且它返回的是一个0到RAND_MAX间的数字。而RAND_MAX的值具体是多大,我们可以医用编译器来看看。和RAND_MAX一样,调用rand也需要声明stdlib头文件。

你知道如何生成随机数吗?(超详细附图)

 十六进制0x7fff换算成十进制就是32767。函数给我们的返回值就是0~32767这范围的一个随机数。

通过代码简单试一试,rand函数的效果。

第一次:

你知道如何生成随机数吗?(超详细附图)

 但当我们运行第二次的时候,我们会发现,他返回的数字一模一样。

你知道如何生成随机数吗?(超详细附图)

如果要求不是很高的话,这样子使用rand函数已经够了。但有一说一,这其实并不是真正的随机数。包括你重启电脑再去运行的话它还是会返回一模一样的结果,因为我们的种子数没有改变。

🍹srand(避免每次运行程序产生的随机数都相同)

   srand()用于初始化rand()使用的随机数种子

你知道如何生成随机数吗?(超详细附图)

 我们在代码中加上srand试一试

你知道如何生成随机数吗?(超详细附图)

 换一个种子数试试:

你知道如何生成随机数吗?(超详细附图)

 我们可以看出,随着种子数的不同系统产生的随机数也是不同的。如果我的种子数是时刻改变的,那我这个程序不是就可以每时每刻都生成不同的数字了。这取决于种子数在每时每刻都不一样,什么样的东西满足我们这个要求呢——时间

🍹时间戳

简单的说,时间戳就是随时间改变而改变的一个整数。比如下面两个例子:

 你知道如何生成随机数吗?(超详细附图)

你知道如何生成随机数吗?(超详细附图)

 每时每刻都生成不同的数字。要想实现这个目的,只需要将时间戳放入rand函数里去。这里可以用time函数来实现

🥤time函数

 你知道如何生成随机数吗?(超详细附图)

 从这个图可得,使用这个函数需要传入一个指针变量,它会返回一个time_t类型的元素,这个元素也是随时间戳改变而改变的。

 PS:time函数需要调用time.h头文件。

 你知道如何生成随机数吗?(超详细附图)

 你知道如何生成随机数吗?(超详细附图)

 我们可以看到,两次使用这个程序,它给我们带来的数字是完全不一样的。这样就实现了随机数的取值。

你知道如何生成随机数吗?(超详细附图)

🍸来个小小项目

这次我们来学习一个小项目的制作,猜数字,规则如下:

在1~100的范围内猜数字n(假如是80),我第一次猜50,被提示小了;第二次猜75,提示小了;第三次猜87,提示大了;第四次猜80,猜对了。

项目思路:

  1. 需要猜测的数字范围是1~100.
  2. 可以重复游玩。
  3. 每次玩的时候数字都要不同。

这个游戏思路不难,而且我们刚好可以联系一下随机数这个概念。一起来吧。

🍸代码实现

🍹1.漂亮的主页

在制作一个游戏时,我们需要一个漂亮的主页,我们把它集成到一个函数中实现。

void menu()
{
	printf("*********************\n");
	printf("***** 1.开始游戏 ****\n");
	printf("***** 0.退出游戏 ****\n");
	printf("*********************\n");
}

实现效果:

你知道如何生成随机数吗?(超详细附图)

🍹2.游戏开关

接下来我们需要一个实现一个控制游戏开关的代码段。为了我建议用到do while循环,因为它的特点就是:不管三七二十一,先循环一遍。这里我们的程序至少要循环一遍,看看玩家是否继续游戏。

int main()
{
	int op=0;
	do
	{
		menu();
		printf("请输入你的选项:");
		scanf("%d",&op);
		switch (op)
		{
		case 1:printf("开始游戏\n");
			break;
		case 0:printf("退出游戏");
			break;
		default:printf("输入错误,请再次输入\n");
			break;
		}
	} while (op);
	
	return 0;
}

这就是运行效果,嗯嗯🧐达到我们的预期了。 

你知道如何生成随机数吗?(超详细附图)

 这里有一个小细节,有些小伙伴可能已经注意到了。每写一部分,我就会测试一部分,这是一个编程的小技巧,这样可以有效避免bug的累加,因为bug累计多了,到最后测试的时候你会发现无从下手。

不过这样子也能让博客讲的更清楚,真好🐱‍💻。

接下来进行主要部分的书写。

🍹3.game()函数的代码实现。

void game()
{
	int ret=rand()%100+1;//实现程序取得的随机数值为1~100
	int guess=0;
	do 
	{
		scanf("%d", &guess);
		if (guess < ret)
			printf("猜小了\n");
		else if (guess > ret)
			printf("猜大了\n");
		else
		{
			printf("猜对了\n");
			break;
		}
	} while (1);//猜对了才能退出
	return;
}

第三行这里给程序产生的随机数取mod了,目的在于实现取得的随机数在1~100的范围之内。

同理,如果你想取50~100,可以这样写:

ret = rand () % 50 + 51;

🍹4.完整代码

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
	printf("**********************\n");
	printf("***** 1.开始游戏  ****\n");
	printf("***** 0.退出游戏  ****\n");
	printf("**********************\n");
}
void game()
{
	int ret=rand()%100+1;
	int guess=0;
	do 
	{
		scanf("%d", &guess);
		if (guess < ret)
			printf("猜小了\n");
		else if (guess > ret)
			printf("猜大了\n");
		else
		{
			printf("猜对了\n");
			break;
		}
	} while (1);//猜对了才能退出
	return;
}
int main()
{
	srand((unsigned int)time(NULL));
	int op=0;
	do
	{
		menu();
		printf("请输入你的选项:");
		scanf("%d",&op);
		switch (op)
		{
		case 1:printf("开始游戏\n");
			game();
			break;
		case 0:printf("退出游戏");
			break;
		default:printf("输入错误,请再次输入\n");
			break;
		}
	} while (op);
	
	return 0;
}

一个小细节,因为srand函数实质上是对种子数的初始化,我们习惯性将它放在主函数来初始化,而且一个工程只需要定义一次就行了。

到这里这篇文章就算结束了

你知道如何生成随机数吗?(超详细附图)

 尼尔叔叔:你自己去试试看吧。

有个思路很类似的文章二分查找法

也可以学习一下。文章来源地址https://www.toymoban.com/news/detail-479877.html

到了这里,关于你知道如何生成随机数吗?(超详细附图)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 伪随机生成器(rand函数),随机数种子(srand函数)详细解读与分析:

    伪随机生成器(rand函数),随机数种子(srand函数)详细解读与分析:

    a.生成随机数; b.生成0~100以内的随机数 c.随机数的连续输出及其连续输出情况讲解与分析 首先我们来看一下rand函数(伪随机数生成器):   rand函数,即伪随机数生成器,该函数返回类型为整型,没有参数,即产生一个在(0-rand_max(十六进制的ox7ffff转化为整数即32767)的一个

    2024年02月11日
    浏览(11)
  • C语言随机数生成和范围设置详解【超详细教程】

    C语言随机数生成和范围设置详解【超详细教程】

    本文详细介绍了C语言中如何使用rand函数生成随机数以及利用srand函数设置随机数的种子,同时解释了如何控制随机数的范围。适合初学者学习和实践。

    2024年02月05日
    浏览(10)
  • Java如何生成随机数?要不要了解一下!

    Java如何生成随机数?要不要了解一下!

    我们在学习 Java 基础时就知道可以生成随机数,可以为我们枯燥的学习增加那么一丢丢的乐趣。本文就来介绍 Java 随机数。 在 Java 中使用 Random 工具类来生成随机数,该类在 java.util 包下,在 JDK1.0 版本就存在了。 Random 单词本身就是随机、随意、任意的意思。 Random 是一个普

    2024年02月06日
    浏览(10)
  • Unity 中的随机数的基础常用的随机数生成方法

    在 Unity 中,可以使用 Random 类来生成随机数。以下是一些常用的随机数生成方法: Random.Range(min, max):生成一个在[min, max)范围内的随机整数。 Random.value:生成一个在[0, 1)范围内的随机浮点数。 Random.insideUnitCircle:生成一个在单位圆内的随机二维向量。 Random.insideUnitSphere:生成

    2024年02月20日
    浏览(18)
  • JS - 生成随机数的方法汇总(不同范围、类型的随机数)

    (1)使用 random() 方法可以返回一个介于 0 ~ 1 之间的伪随机数(包括 0,不包括 1)。 (2)下面是一个测试样例 (1)这种最简单,因为和 random 的特点保持一致。只需使用如下公式即可: (2)比如下面生成 [10,15) 范围内的随机浮点数。 因为 random 的特点,要取得这几个区间

    2023年04月08日
    浏览(18)
  • 生成随机数

    用于产生随机数 boolean nextBoolean() : 返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 boolean 值。 void nextBytes(byte[] bytes) : 生成随机字节并将其置于用户提供的 byte 数组中。 double nextDouble() : 返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之

    2024年02月03日
    浏览(15)
  • haiku生成随机数

    Haiku 遵循 JAX 的设计,生成的随机数是两个元素组成的列表。其中第一个元素是用于生成伪随机数的状态,第二个元素是用于分发密钥的子键。两个元素分别用于状态和子键,确保在分布式计算或并行计算中,多个随机数生成器的状态可以在一定程度上相互影响,从而提高随

    2024年01月20日
    浏览(15)
  • Flutter 生成随机数

    如何让随机数变化? 我们尝试过的都知道,当你创建出来一个随机数后,调用他他的值是随机的,但是,这时候他的值就会固定住,不管怎么样都是随机出来的那个数,如果想要他每次都不一样的话,我们就想要使用刷新来让他变化了。 我们可以使用这样的方法来使他每次不一

    2024年02月13日
    浏览(10)
  • java生成随机数

    java生成随机数

       bound 必须是正数。 以下代码生成的是 0 到 30 的随机数。 生成区间的随机数:[最小值,最大值] 学的不是技术,更是梦想!!!

    2024年02月07日
    浏览(18)
  • Hutool 生成随机数和随机字符串

    官方文档: https://www.hutool.cn/docs/#/core/工具类/随机工具-RandomUtil 整理完毕,完结撒花~

    2024年02月16日
    浏览(18)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包