C语言,如何产生随机数

1. 基本函数

在C语言中取随机数所需要的函数是:

int rand(void);
void srand (unsigned int n);

rand()函数和srand()函数被声明在头文件stdlib.h中,所以要使用这两个函数必须包含该头文件:

#include <stdlib.h>


2. 使用方法

rand()函数返回0到RAND_MAX之间的伪随机数(pseudorandom)。RAND_MAX常量被定义在stdlib.h头文件中。其值等于32767,或者更大。

srand()函数使用自变量n作为种子,用来初始化随机数产生器。只要把相同的种子传入srand(),然后调用rand()时,就会产生相同的随机数序列。因此,我们可以把时间作为srand()函数的种子,就可以避免重复的发生。如果,调用rand()之前没有先调用srand(),就和事先调用srand(1)所产生的结果一样。

for (int i=0; i<10; i++)
{
printf("%d ", rand()%10);
}

每次运行都将输出:1 7 4 0 9 4 8 8 2 4

srand(1);
for (int i=0; i<10; i++)
{
printf("%d ", rand()%10);
}

每次运行都将输出:1 7 4 0 9 4 8 8 2 4

例2的输出结果与例1是完全一样的。


srand(8);
for (int i=0; i<10; i++)
{
printf("%d ", rand()%10);
}

每次运行都将输出:4 0 1 3 5 3 7 7 1 5

该程序取得的随机值也是在[0,10)之间,与srand(1)所取得的值不同,但是每次运行程序的结果都相同。


srand((unsigned)time(NULL));
for (int i=0; i<10; i++)
{
printf("%d ", rand()%10);
}

该程序每次运行结果都不一样,因为每次启动程序的时间都不同。另外需要注意的是,使用time()函数前必须包含头文件time.h。


3. 注意事项

  • 求一定范围内的随机数。

如要取[0,10)之间的随机整数,需将rand()的返回值与10求模。

randnumber = rand() % 10;

那么,如果取的值不是从0开始呢?你只需要记住一个通用的公式。

要取[a,b)之间的随机整数(包括a,但不包括b),使用:

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

  • 伪随机浮点数。

要取得0~1之间的浮点数,可以用:

rand() / (double)(RAND_MAX)

如果想取更大范围的随机浮点数,比如0~100,可以采用如下方法:

rand() /((double)(RAND_MAX)/100)
其他情况,以此类推,这里不作详细说明。

当然,本文取伪随机浮点数的方法只是用来说明函数的使用办法,你可以采用更好的方法来实现。

转载于:https://www.cnblogs.com/lpjia/p/3680222.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB源码概述——内存管理和存储引擎

数据存储&#xff1a; 之前在介绍Journal的时候有说到为什么MongoDB会先把数据放入内存&#xff0c;而不是直接持久化到数据库存储文件&#xff0c;这与MongoDB对数据库记录文件的存储管理操作有关。MongoDB采用操作系统底层提供的内存文件映射&#xff08;MMap&#xff09;的方…

OBTW的完整形式是什么?

OBTW&#xff1a;哦&#xff0c;顺便说一下 (OBTW: Oh, By The Way) OBTW is an abbreviation of "Oh, By The Way". OBTW是“哦&#xff0c;顺便说一下”的缩写 。 It is an expression, which is commonly used in messaging or chatting on social media network…

SharePoint 2010 Form Authentication (SQL) based on existing database

博客地址 http://blog.csdn.net/foxdaveSharePoint 2010 表单认证&#xff0c;基于现有数据库的用户信息表本文主要描述本人配置过程中涉及到的步骤&#xff0c;仅作为参考&#xff0c;不要仅限于此步骤。另外本文通俗易懂&#xff0c;适合大众口味儿。I. 开启并配置基于声明的…

《MySQL 8.0.22执行器源码分析(3.1)关于RowIterator》

目录RowIteratorInit()Read()SetNullRowFlag()UnlockRow()StartPSIBatchMode()EndPSIBatchModeIfStarted()real_iterator()RowIterator 使用选定的访问方法读取单个表的上下文&#xff1a;索引读取&#xff0c;扫描等&#xff0c;缓存的使用等。 它主要是用作接口&#xff0c;但…

hdu 2432法里数列

这题本来完全没思路的&#xff0c;后来想一想&#xff0c;要不打个表找找规律吧。于是打了个表&#xff0c;真找到规律了。。。 打表的代码如下&#xff1a; int n; void dfs(int x1, int y1, int x2, int y2) {if (y1 y2 < n) {dfs(x1, y1, x1 x2, y1 y2);printf("…

python学习笔记四——数据类型

1.数字类型&#xff1a; 2.字符串类型&#xff1a; 切片&#xff1a;a[m:n:s] m:起始值 n:结束值&#xff08;不包括n&#xff09; s:步长&#xff0c;负数表示从后向前取值 3.序列&#xff1a;列表&#xff0c;元组和字符串都是序列 序列的两个主要特点是索引操作符和切片…

小狐狸ChatGPT系统 不同老版本升级至新版数据库结构同步教程

最新版2.6.7下载&#xff1a;https://download.csdn.net/download/mo3408/88656497 小狐狸GPT付费体验系统如何升级&#xff0c;该系统更新比较频繁&#xff0c;也造成了特别有用户数据情况下升级时麻烦&#xff0c;特别针对会员关心的问题出一篇操作教程&#xff0c;本次教程…

《MySQL 8.0.22执行器源码分析(3.2)关于HashJoinIterator》

在本文章之前&#xff0c;应该了解的概念&#xff1a; 连接的一些概念、NLJ、BNL、HashJoin算法。 目录关于join连接probe行保存概念Hashjoin执行流程&#xff08;十分重要&#xff09;HashJoinIterator成员函数讲解1、BuildHashTable2、ReadNextHashJoinChunk3、ReadRowFromPr…

json 语法_JSON的基本语法

json 语法JSON which stands for JavaScript Object Notation is a lightweight readable data format that is structurally similar to a JavaScript object much like its name suggests. 代表JavaScript Object Notation的 JSON是一种轻量级的可读数据格式&#xff0c;其结…

RFC3261(17 事务)

SIP是一个基于事务处理的协议&#xff1a;部件之间的交互是通过一系列相互独立的消息交换来完成的。特别是&#xff0c;一个SIP 事务由一个单个请求和这个请求的所有应答组成&#xff0c;这些应答包括了零个或者多个临时应答以及一个或者多个终结应答。在事务中&#xff0c;当请…

HDUOJ---1754 I Hate It (线段树之单点更新查区间最大值)

I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 33469 Accepted Submission(s): 13168 Problem Description很多学校流行一种比较的习惯。老师们很喜欢询问&#xff0c;从某某到某某当中&#xff0c;…

WEG的完整形式是什么?

WEG&#xff1a;邪恶邪恶的咧嘴 (WEG: Wicked Evil Grin) WEG is an abbreviation of "Wicked Evil Grin". WEG是“ Wicked Evil Grin”的缩写 。 It is also known as EWG (Evil Wicked Grin) "Grin" refers to a broad smile. "Wicked" refer…

C# 把数字转换成链表

例如&#xff1a;123456转换成 1 -> 2 -> 3-> 4-> 5-> 6 View Code static LinkedList<int> CovertIntToLinkedList(int num){Stack<int> stack new Stack<int>();LinkedList<int> result new LinkedList<int>();while (num!0…

《MySQL 8.0.22执行器源码分析(4.1)Item_sum类以及聚合》

Item_sum类用于SQL聚合函数的特殊表达式基类。 这些表达式是在聚合函数&#xff08;sum、max&#xff09;等帮助下形成的。item_sum类也是window函数的基类。 聚合函数&#xff08;Aggregate Function&#xff09;实现的大部分代码在item_sum.h和item_sum.cc 聚合函数限制 不…

Java 性能优化实战记录(2)---句柄泄漏和监控

前言: Java不存在内存泄漏, 但存在过期引用以及资源泄漏. (个人看法, 请大牛指正) 这边对文件句柄泄漏的场景进行下模拟, 并对此做下简单的分析.如下代码为模拟一个服务进程, 忽略了句柄关闭, 造成不能继续正常服务的小场景. 1 public class FileHandleLeakExample {2 3 p…

什么是Java文件?

Java文件 (Java files) The file is a class of java.io package. 该文件是java.io包的类。 If we create a file then we need to remember one thing before creating a file. First, we need to check whether a file exists of the same name or not. If a file of the sa…

绕过本地验证提交HTML数据

我们在入侵一个网站,比如上传或者自己定义提交的文件时,会在本地的代码中遇到阻碍,,也就是过 滤,过滤有两种,一种是在远程服务器的脚本上进行的过滤,这段代码是在服务器上运行后产生作用的,这种过 滤方式叫做远程过滤;另一种是在我们的IE浏览器里执行的脚本过滤,就是说是在我们…

《dp补卡——343. 整数拆分、96. 不同的二叉搜索树》

343. 整数拆分 1、确定dp数组以及下标含义。 dp[i]&#xff1a;分拆数字i&#xff0c;可以得到的最大的乘积 2、确定递推公式&#xff1a; dp[i]最大乘积出处&#xff1a;从1遍历j到i&#xff0c;j * dp[i-j] 与 j * (i-j)取最大值。( 拆分j的情况&#xff0c;在遍历j的过程…

Adroid学习之 从源码角度分析-禁止使用回退按钮方案

有时候&#xff0c;不能让用户进行回退操作&#xff0c;如何处理&#xff1f; 查看返回键触发了哪些方法。在打开程序后把这个方法禁止了。问题&#xff1a;程序在后台驻留&#xff0c;这样就会出现&#xff0c;其他时候也不能使用回退按钮。如何处理&#xff0c;在onpase()时方…

骑士游历问题问题_骑士步行问题

骑士游历问题问题Problem Statement: 问题陈述&#xff1a; There is a chessboard of size NM and starting position (sx, sy) and destination position (dx,dy). You have to find out how many minimum numbers of moves a knight goes to that destination position? 有…