你知道C语言中随机数是如何生成的吗~?

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

目录

1.你听说过函数rand的吗?

2.引入srand函数~

3.time函数的使用~

4.随机数的实现!

5. 如何控制随机数的范围呢~

6.这时候我们就可以写出一些比较有趣的代码啦~ 

7.对我们说的一些话~


 

                           不是每个人都能做自己想做的事,成为自己想成为的人。

                                                  克心守己,律己则安!

创作不易,宝子们!如果这篇文章对你们有帮助的话,别忘了给个免费的赞哟~ 

1.你听说过函数rand的吗?

1.C语⾔提供了⼀个函数叫 rand,这函数是可以⽣成随机数的,函数原型如下所⽰:

int rand (void);

 rand函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的⼤⼩是 依赖编译器上实现的,但是⼤部分编译器上是32767。 rand函数的使⽤需要包含⼀个头⽂件是:stdlib.h

那我们就测试⼀下rand函数,这⾥多调⽤⼏次,产⽣5个随机数:

你知道C语言中随机数是如何生成的吗~?,C语言,c语言
第一一次运行结果
你知道C语言中随机数是如何生成的吗~?,C语言,c语言
第二次运行结果

我们可以看到虽然⼀次运⾏中产⽣的5个数字是相对随机的,但是下⼀次运⾏程序⽣成的结果和上⼀次 ⼀模⼀样,这就说明有点问题。 如果再深⼊了解⼀下,我们就不难发现,其实rand函数⽣成的随机数是伪随机的,伪随机数不是真正 的随机数,是通过某种算法⽣成的随机数。真正的随机数的是⽆法预测下⼀个值是多少的。⽽rand函 数是对⼀个叫“种⼦”的基准值进⾏运算⽣成的随机数。 之所以前⾯每次运⾏程序产⽣的随机数序列是⼀样的,那是因为rand函数⽣成随机数的默认种⼦是1。 如果要⽣成不同的随机数,就要让种⼦是变化的。 

2.引入srand函数~

C语⾔中⼜提供了⼀个函数叫 srand,⽤来初始化随机数的⽣成器的,srand的原型如下:

void srand (unsigned int seed);

程序中在调⽤ rand 函数之前先调⽤ srand 函数,通过 srand 函数的参数seed来设置rand函数⽣成随 机数的时候的种⼦,只要种⼦在变化,每次⽣成的随机数序列也就变化起来了。 那也就是说给srand的种⼦是如果是随机的,rand就能⽣成随机数;在⽣成随机数的时候⼜需要⼀个随 机数,这就⽭盾了。

3.time函数的使用~

在程序中我们⼀般是使⽤程序运⾏的时间作为种⼦的,因为时间时刻在发⽣变化的。 在C语⾔中有⼀个函数叫 time ,就可以获得这个时间,time函数原型如下:

time_t time (time_t* timer);

time 函数会返回当前的⽇历时间,其实返回的是1970年1⽉1⽇0时0分0秒到现在程序运⾏时间之间的 差值,单位是秒。返回的类型是time_t类型的,time_t 类型本质上其实就是32位或者64位的整型类 型。 time函数的参数 timer 如果是⾮NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存 中带回去。 如果 timer 是NULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做:时间戳。 time函数的时候需要包含头⽂件:time.h

你知道C语言中随机数是如何生成的吗~?,C语言,c语言
time_t类型的说明

如果只是让time函数返回时间戳,我们就可以这样写:

time(NULL);//调⽤time函数返回时间戳,这⾥没有接收返回值

4.随机数的实现!

那我们就可以让⽣成随机数的代码改写成如下:

你知道C语言中随机数是如何生成的吗~?,C语言,c语言
第一次运行
你知道C语言中随机数是如何生成的吗~?,C语言,c语言
第二次运行

(注:截图只是当时程序运⾏的结果,你的运⾏结果不⼀定和这个⼀样) srand函数是不需要频繁调⽤的,⼀次运⾏的程序中调⽤⼀次就够了。

注意:因为srand的参数是unsigned int类型,我们将time函数的返回值强制类型转换

5. 如何控制随机数的范围呢~

1.如果我们要⽣成0~99之间的随机数,⽅法如下:

rand() %100;//余数的范围是0~99

2.如果要⽣成1~100之间的随机数,⽅法如下:

rand()%100+1;//%100的余数是0~99,0~99的数字+1,范围是1~100

3.如果要⽣成100~200的随机数,⽅法如下:

100 + rand()%(200-100+1) //余数的范围是0~100,加100后就是100~200

4.所以如果要⽣成a~b的随机数,⽅法如下:

a + rand()%(b-a+1)

6.这时候我们就可以写出一些比较有趣的代码啦~ 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
	printf("欢迎来到^_^猜数字游戏\n");
	printf("     1.play   \n");
	printf("     0.exit	  \n");
}
void game()
{
	int ret = rand() % 100 + 1;
	int guess = 0;
	int count = 10;
	while (count)
	{
		printf("亲,请注意你还有%d次机会!\n", count);
		printf("请输入要猜的数字:");
		scanf("%d", &guess);
		if (guess > ret)
		{
			printf("猜大了\n");
		}
		else if (guess < ret)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你!猜对了^_^数字是%d\n",ret);
			break;
		}
		count--;
	}
	if (count == 0)
	{
		printf("很遗憾,挑战失败\n");
	}
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏!\n");
			break;
		default:
			printf("输入错误,请重新选择!\n"); 
			break;
		}

	} while (input);
	return 0;
}

 这是一个简单的猜数字游戏~这里演示一下哦~

你知道C语言中随机数是如何生成的吗~?,C语言,c语言

 你们可以尝试自己实践一下哦~毕竟纸上得来终觉浅,更何况编程的学习。

7.对我们说的一些话~

每一次成功编译并运行一个程序,都是对自我的一次肯定,不要害怕犯错,编程中的错误是成长的阶梯,通过不断的调试,你会更加熟练,良好的开始是成功的一半,你已经迈出了学习C语言的第一步,接下来,每一步都值得期待~

这里是“秋风起,再归来~”,我们下期不见不散~文章来源地址https://www.toymoban.com/news/detail-836777.html

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

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

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

相关文章

  • 如何使用Verilog生成随机数

    输入:时钟信号,复位信号,重新加载信号,种子 输出:随机数 输入一个种子32位,输出16位随机数;选取时钟,复位,重新加载种子。 // 使用32个逻辑单元用于D触发器/加法器和8个DSP块用于32x18=32位乘法 module c_rand (   input clk,         // 时钟输入   input rst,        

    2024年02月03日
    浏览(28)
  • Unity如何生成随机数(设置种子)

    我们可以使用Random类来生成一些随机数 Random类是用于生成随机数的类之一。它可以用于生成不同类型的随机数,如整数、浮点数和向量。 我们可以使用Random.Range来生成指定范围内的随机整数或浮点数。下面举两个例子: 运行结果如下所示: 使用Random.insideUnitCircle来获取一个

    2024年02月04日
    浏览(30)
  • 【Java】Java如何生成随机数?

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

    2024年02月12日
    浏览(30)
  • C语言生成随机数【简易抽卡代码为例】

    本文将详细解释如何在C语言中生成随机数,并介绍应用的小技巧 c语言生成一个真正的随机数需要用到三个函数: rand()、srand()和time()。 函数介绍 头文件 : #includestdlib.h 函数声明 : int rand(void) 作用 ; 生成一个伪随机数序列,随机数取值范围是0~RAND_MAX PS - RAND_MAX其实是一个宏

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

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

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

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

    2024年02月05日
    浏览(35)
  • C语言中随机数的生成(rand函数和srand函数)

    CSDN话题挑战赛第2期 参赛话题:学习笔记 学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢? 目录 一.rand函

    2024年02月04日
    浏览(30)
  • R语言【base】——.Random.seed(),RNGkind(),RNGversion(),set.seed():随机数生成器

    Package  base  version 4.2.0 .Random.seed是一个整数向量,包含R中生成随机数的随机数生成器(RNG)状态。它可以保存和恢复,但不应该被用户更改。 RNGkind是一个更友好的接口,用于查询或设置正在使用的RNG类型。 RNGversion在早期的R版本中可以用来设置随机生成器(为了再现性)。 set

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

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

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

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

    2023年04月08日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包