前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言随机数的生成

C语言随机数的生成

作者头像
黎鹤舞
发布2024-03-19 15:17:01
2220
发布2024-03-19 15:17:01
举报
文章被收录于专栏:黎鹤舞的编程技术栏

C语言随机数的生成

1.随机数的生成-rand()函数

注意: rand() 函数的使用需要调用 库文件 <stdlib.h>

语法: int rand ( void );

功能: ​ 函数返回一个在零到 RAND_MAX 之间的伪随机整数。

生成范围: 0~RAND_MAX(32767) ​ 也可以对rand的取模操作,从而控制生成自己想要生成的范围 ​ eg:

代码语言:javascript
复制
v1 = rand() % 100;         // v1 生成的范围是 0 to 99
v2 = rand() % 100 + 1;     // v2 生成的范围是 1 to 100

2.伪随机数

​ 通过运行上述代码,我们发现确实生成了一个随机数,其值为41;

但是我们多次进行代码运行测试发现,每次运行的结果都是41。

这说明我们rand()函数 生成的 是一个 伪随机数!!!

伪随机并不是真实意义上的随机,而是具有一定规律的随机的随机 计算机会通过对应的随机数算法,随机数表中固定开始读取,且每次开始读取位置都相同,所以无论怎样生成的随机数都相同。

3.srand()函数

语法: ​ void srand (unsigned int seed); 头文件: ​ #include<stdlib.h> 功能: ​ 设置rand()随机序列种子。对于给定的种子seed, rand()会反复产生特定的随机序列。

srand函数是随机数发生器的初始化函数,其内部需要一个 unsigned int类型的种子来

注: 很多人并不明白为什么srand函数需要一个种子才能运行: 这是因为计算机的一切行为,都需要对其进行输入数据 才能 输出数据。在没有输入的情况下 计算机是无法凭空给出一系列的数字,更不用说是随机数了。

一旦种子相同,产生的随机数也将是相同的。

代码测试:

srand(1); 和srand(2);

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

int main() 
{
	srand(1);
	int v1 = 0;
	for (int i = 0; i < 10; i++)
	{
		v1 = rand() % 100;
		printf("%d  ", v1);
	}
	srand(2);
	printf("\n");
	for (int i = 0; i < 10; i++)
	{
		v1 = rand() % 100;
		printf("%d  ", v1);
	}
	return 0;
}

srand(1);没有使用srand(2);

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

int main() 
{
	srand(1);
	int v1 = 0;
	for (int i = 0; i < 10; i++)
	{
		v1 = rand() % 100;
		printf("%d  ", v1);
	}
	//srand(2);
	printf("\n");
	for (int i = 0; i < 10; i++)
	{
		v1 = rand() % 100;
		printf("%d  ", v1);
	}
	return 0;
}

4.time()函数的引入

很多时候我们刻意让rand()产生的随机数随机化,这个时候就需要一个 能够不断变化的种子

而我们的电脑时间正好是不断变化的;

用时间作种子 srand(time(NULL)),这样每次运行程序的时间肯定是不相同的,产生的随机数肯定就不一样了。

头文件: ​ #include<time.h> 语法: ​ time_t time (time_t* timer); 功能: ​ 返回当前时间戳,如果发生错误返回零。如果给定参数time ,那么当前时间存储到参数time中。 ​ //这里我们不需要存储时间信息,我们只需要通过时间变化来让种子随机变化 ,所以 time()里只需要NULL

用法:srand( (unsigned int ) time(NULL) )

//注:这里的time_t 类型 强制类型转换成了 unsigned int 类型(无符号整数) 因为srand()函数 内参数类型为unsigned int类型

5.总结

想要生成一个真随机的随机数

需要:

头文件:

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

生成随机数代码:

代码语言:javascript
复制
srand( (unsigned int ) time (NULL) );

int ret = rand();					//ret用来接收随机数

代码演示:

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

int main() 
{
	int i = 0;

	srand((unsigned int)time(NULL));
	for (i = 0; i < 10; i++)
	{
		int ret = rand() % 50 + 1;		//生成十个范围在 1~50的随机数
		printf("%d\n",ret);
	}

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C语言随机数的生成
    • 1.随机数的生成-rand()函数
      • 2.伪随机数
        • 3.srand()函数
          • 代码测试:
        • 4.time()函数的引入
          • 5.总结
          相关产品与服务
          对象存储
          对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档