C语言之随机数的生成

这篇博客主要来讲解如何生成一个随机数


C语言提供了一个函数 rand , 这个函数可以生成随机数

如下是函数的原型:

 int rand (void);

rand函数会返回一个伪随机数,在一般的编译器上,这个随机数的大小范围是0 - 32767

rand函数的使用需要包含一个头文件 stdlib.h

让我们来测试以下该函数对随机数的生成

下面两张图是两次运行的结果,我们可以发现这个函数确实生成了随机数,但是两次生成的函数却是一样的。这就是为何称其返回的是伪随机数的原因。

伪随机数只是相对随机的,而我们想要的是真正的随机数,真正的随机数应该是我们无法精准预判将要生成的数是什么。

其实,rand函数是对一个叫“种子”的基准值进行运算生成的随机数。

之所以每次程序运行产生的随机数是一样的,是因为rand函数生成随机数的默认种子是1,如果我们想要生成真正不同的随机数,那我们就需要让种子发生变化。


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

该函数的原型如下:

void srand (unsigned int seed);

程序中在调用rand函数之前先调用srand函数,通过函数srand的参数seed来设置rand函数生成随机数的时候的种子,只要种子发生变化,那么每次生成的随机数也会发生变化

所以就是给srand函数的种子是随机的,那么rand函数就能生成真正的随机值。


在程序中我们一般是使用程序的运行时间来作为种子的,为什么呢?因为时间一直在变化

在C语⾔中有⼀个函数叫 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,就只返回这个时间的差值。

timer 函数返回的这个时间差也叫作 :时间戳

比如我现在写这篇博客的时候 时间戳是

time函数使用的时候需要包含头⽂件:time.h

所以如果只想让函数返回时间戳我们可以这样写:

time(NULL);

那么一切就绪,我们想真正生成一个随机数,代码就为

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
	//使用time函数设置种子
	//因为srand的参数是unsigned int类型,我们将time函数的返回值类型强制转换
	srand((unsigned int)time(NULL));
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	return 0;
}

当我们再次执行程序,我们就会发现每次运行的结果都不一样,这是真正的随机数,大功告成啦!

   


当然,精益求精嘛。

还有一些我们是可以学习到的。

那就是随机数的--范围

如果我们要生成0 - 99的随机数:

rand() %100; // 0-99

如果要⽣成1~100之间的随机数:

 rand()%100+1; // 1-100

如果要⽣成100~200的随机数

余数的范围是0 - 100,加上100后范围就是100 - 200

100 + rand()%(200-100+1)

所以我们就有一个技巧

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

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

例子:生成0 - 99的随机数

总结:

随机数的生成还是很重要的,值得好好学习。通过随机数我们可以借此生成很多随机的东西,具体可以慢慢发现哟!

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Springboot+Vue的智慧养老服务管理系统源码+项目使用说明(优秀毕业设计).zip 该项目属于个人毕业设计,经导师的精心指导与严格评审获得高分通过的设计项目。主要针对计算机相关专业的教师、正在做毕设、课设的学生使用,也可作为项目实战演练,可直接作为课程设计、期末大作业、毕设等。 1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通。 2.主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 介绍 随着人口老龄化趋势的加剧,老年人口比例不断增加,传统的养老服务模式已经难以满足现代老年人的多元化需求。因此,如何高效、精准地提供养老服务,成为了社会关注的焦点。信息化与智能化的发展为养老服务带来了新的机遇。智慧养老作为新兴的养老服务模式,正逐步改变传统的养老服务格局。 #### 安装教程 1. 运行环境准备mysql8+java8+npm14.16.1 2. 配置maven路径,加载依赖 3. 运行sql文件,确保application.yml的数据库名称和账号密码是数据库所在主机的账号密码 #### 使用说明 1. 登入 账号:admin 密码:admin 账号:user 密码:123456 2.运行流程 前端初始化指令: > npm install 前端运行指令(有两个端,一个是管理端,一个是用户端): > npm run serve #### 项目演示 + 普通用户 访问者可以在最顶端看到系统的导航栏,根据自己的需求点击需要去到的页面。用户可以单击“入院指南”,在入院指南界面的输入框中输入标题并进行搜索,就可以查看标题、发布时间、注意事项、发布人、封面等其他信息,在个人中心界面中,可以看见家属的账号、密码和性别等基本信息,还可以对这些信息进行更新操作。 ![GIF 2024-6-17 19-49-40](GIF 2024-6-17 19-49-40-1718630421956.gif) + 管理员 管理员单击家属管理,在家属管理页面中输入家属的各项信息后,在页面中进行查询、新增或删除家属信息等操作。管理员点击护工管理,在护工管理页面中输入护工的所有信息,然后在页面上可以点击详情来查看护工的详细情况,点击修改来修改护工的信息,点击删除来删除护工的信息。管理员单击房间资料管理,在这个页面中可以对房间资料的信息进行管理。管理员单击床位管理,可以查看房间号、楼房名称等各项信息,还可以点击修改来修改床位信息,点击删除来删除床位信息。管理员还可以对老人入住进行管理,在这个界面中可以查看像入住编号、老人年龄等老人入住的详细信息,可以在界面顶端输入具体信息来查找,还可以点击删除来进行删除操作。管理员单击外出报备管理,在外出报备管理界面中可以查看老人的外出报备情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值