首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【C语言】rand函数的应用(随机数的生成)

【C语言】rand函数的应用(随机数的生成)

作者头像
zore
发布2025-12-30 18:47:01
发布2025-12-30 18:47:01
3990
举报
文章被收录于专栏:C/C++ 专栏C/C++ 专栏

一、rand函数

1.简介

用于生成随机数的函数 使⽤需要包含⼀个头⽂件:<stdlib.h>

2.返回值

返回一个介于和之间的伪随机整数。 一个介于0和RAND_MAX之间的整数值。 (RAND_MAX为32767)

那为什么说是伪随机数呢? 如下代码:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int main()
{
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());

	return 0;
}

运行结果:

大家可以自行尝试下,代码两次运行结果一模一样 这也说明了rand生成的数是伪随机数

那该如何生成真正的随机数呢?

rand函数是对⼀个叫种⼦的基准值进⾏运算⽣成的随机数。之所以前⾯每次运⾏程序产⽣的随机数序列是⼀样的,是因为rand函数⽣成随机数的默认种⼦是1。而要想得到真正的随机数就要使种子不断变化。这就可以用到srand函数

二、srand函数

函数原型:

代码语言:javascript
复制
void srand(unsigned int seed);

srand函数的使⽤需要包含⼀个头⽂件:<stdlib.h>

调⽤rand函数之前先调⽤srand函数, 通过srand函数的参数seed来设置rand函数所需要不断变化的种子, 使得rand函数生成的是真正的随机数。 如下代码:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>


int main()
{
	srand(1);
	//修改种子
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());

	return 0;
}

种子不同时运行结果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可以看见两次结果不同,可以见得: 种子不一样时,生成的随机数也不同 但是,⽣成随机数的时候又需要另⼀个随机数,这就矛盾了。

三、time函数

1.简介

函数说明: time函数可以获取当前的系统时间,返回的是一个time_t类型的从1970年1⽉1⽇0时0分0秒到现在程序运⾏时间之间的差值,如果我们给time函数传一个空指针(NULL),就会只返回这个时间的差值,这个差值也被称为时间戳。

返回值: 成功则返回秒数,失败则返回((time_t)-1)值,错误原因存于error中。

头文件: time函数在使用前需要包含头文件< time.h >

2.注意

由上文可知: 由于srand函数的参数是需要一个unsigned int 类型的值,虽然time函数的返回值为time_t类型的,但是时间戳是一个正数;所以我们只要把time函数的返回值强制类型转换为unsigned int类型即可。

3.演示

演示:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main()
{
	srand((unsigned int)(time(NULL)));
	//真正的随机数
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());

	return 0;
}

大家也可以自行去试一试,每次运行的结果都不相同 两次运行结果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、随机数的生成

现在,我们可以生成出一个介于0和RAND_MAX之间的整数值 (RAND_MAX为32767)

但是要想生成 0到100100到200 等自定义随机数要怎么办呢?

这里需要用到一个运算符(%),这个运算符是取模运算符,得到的就是除以一个数的余数。我们只需要将得到的随机数除上规定的范围那个数就可以得到需要范围的数。

例如:

  • 要生成 0到99 随机数: 就写rand ()%100;
  • 要生成 1到100 随机数: 就写rand ()%100+1;
  • 要生成 100到200 随机数: 就写rand ()%101+100;

万能公式: 生成 a 到 b 随机数: a + rand( ) % ( b - a + 1 );

演示:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main()
{
	srand((unsigned int)(time(NULL)));
	//真正的随机数
	printf("%d\n", rand() % 100);
	//0-99
	printf("%d\n", rand() % 100 + 1);
	//1-100
	printf("%d\n", rand() % 101 + 100);
	//100-200

	return 0;
}

运行结果:

在这里插入图片描述
在这里插入图片描述

五、应用

学会了随机数的生成,我们可以应用到随机数完成一些游戏 扫雷中布置雷是随机的,故可以用到rand函数以及本文的内容 我们就可以完成一个扫雷游戏 下一期我们详解扫雷!!!

六、结语

本期资料来自于: https://legacy.cplusplus.com/

本文有若有不足之处,希望各位兄弟们能给出宝贵的意见。谢谢大家!!! 新人,希望各位兄弟们能动动小手,三连走一走!!!支持一下(三连必回)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、rand函数
    • 1.简介
    • 2.返回值
  • 二、srand函数
  • 三、time函数
    • 1.简介
    • 2.注意
    • 3.演示
  • 四、随机数的生成
  • 五、应用
  • 六、结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档