C语言之随机数函数( rand() )的使用方法
文章出自个人博客https://knightyun.github.io/2018/04/25/c-rand-number,转载请申明。
在程序设计中,难免会使用到随机值函数,其原理与语法大多类似,接下来以C语言为例介绍其随机值函数 rand() 用法。
原理
引用百度百科,首先,需要包含头文件:
#include <stdlib.h>
rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机,有时候也叫伪随机数,使用 rand() 生成随机数之前需要用随机发生器的初始化函数 srand(unsigned seed)(也位于 stdlib.h 中) 进行伪随机数序列初始化,seed 又叫随机种子,通俗讲就是,如果每次提供的 seed 是一样的话,最后每一轮生成的几个随机值也都是一样的,因此叫伪随机数,所以需要每次提供不同的 seed 达到完全的随机,我们通常用时间函数 time(NULL) 作为 seed ,因为时间值每秒都不同,这个函数需要包含以下头文件:
#include <time.h>
理论太泛,下面用例子分析理解。
举例分析
先来理解以下伪随机数,编译以下代码:
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- int main()
- {
- srand(1);
- int i;
- for (i = 0; i < 10; i++)
- printf("%d, ", rand()%11);
- }
运行结果
8, 9, 9, 1, 7, 5, 5, 10, 1, 0,
然后无论运行多少次,结果都依然是以上随机数,不会改变,因为每次设置的种子 seed 都是 1 。
但是假如把 seed 换成 time(NULL),每次就不一样了,如下:
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- int main()
- {
- srand(time(NULL));
- int i;
- for (i = 0; i < 10; i++)
- printf("%d, ", rand()%11);
- }
结果是就变了,并且每次都不一样:
6, 3, 4, 5, 5, 9, 8, 10, 10, 4,
6, 4, 2, 4, 3, 2, 5, 1, 2, 9,
这里的 time(NULL) 的结果是一个类似于 1524655706 的数字,并且每秒都在递增 1,也就达成了 srand() 的 seed 不断变化的目的,不断生成新的随机数。
拓展
这里注意一下例子中函数 rand() 的用法,函数括号内不需要加参数,如果直接调用 rand() 的话会生成下面这样的数:
17163, 2663, 24810, 4875, 26975, 14119, 22193, 11233, 26009, 20105,
所以我们想要生成指定范围的随机数的话就需要使用到求余运算符 %,这里有个规律:例如我们需要 0–10的随机数时,就写成 rand()%11,0–100就写成 rand()%101,就是运算符后的数字需要比需求范围极值大 1,当然这也是取余运算的原理。
---------------------
作者:KNIGH_YUN
来源:CSDN
原文:https://blog.csdn.net/knigh_yun/article/details/80082944
版权声明:本文为博主原创文章,转载请附上博文链接!
C语言之随机数函数( rand() )的使用方法的更多相关文章
- MySQL的随机数函数rand()的使用技巧
咱们学php的都知道,随机函数rand或mt_rand,可以传入一个参数,产生0到参数之间的随机整数,也可以传入两个参数,产生这两个参数之间的随机整数. 而在mysql里,随机数函数rand不能传参, ...
- SQL中随机数函数rand()简介
转自:http://database.51cto.com/art/201009/224397.htm 下文将为您介绍SQL中的随机函数rand(),供您参考,如果您是才接触SQL Server的新手, ...
- sql server 获取随机数函数RAND()和RAND(x)
--RAND(x)返回一个随机浮点值v,范围在0~1之间(即0<=v<=1.0) --若指定一个整数参数x,则它被用作种子值,使用相同的种子数将产生重复序列.如果同一种子值多次调用RAND ...
- PHP生成随机数函数rand(min,max)
rand(min,max):生成min到max 的随机数,注意:包括边界rand() 返回 0 到 RAND_MAX 之间的伪随机整数.例如,想要 5 到 15(包括 5 和 15)之间的随机数,用 ...
- C语言实现strlen函数的几种方法
原文地址:http://www.51testing.com/html/72/n-221172.html 传说常见的一个笔试题:不使用中间变量求const字符串长度,即实现求字符串长度库函数strlen ...
- 【转】利用matlab生成随机数函数
原文地址:利用matlab生成随机数函数 rand(n):生成0到1之间的n阶随机数方阵 rand(m,n):生成0到1之间的m×n的随机数矩阵 (现成的函数) betarnd:贝塔分布的随机数生成 ...
- 【编程开发】C语言中随机数rand使用注意事项
[编程开发]C语言中随机数rand使用注意事项 标签: [编程开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:随机数在编程开发中非常重要,以C语 ...
- 给定一个函数rand()能产生0到n-1之间的等概率随机数,问如何产生0到m-1之间等概率的随机数?
题目:给定一个函数rand()能产生1到n之间的等概率随机数,问如何产生1到m之间等概率的随机数? 先把问题特殊化,例如原题变为给定一个函数rand5(),该函数可以随机生成1-5的整数,且生成概率一 ...
- PHP获取随机数的函数rand()和mt_rand()
rand()函数用户获取随机数,具体用法如下: rand()可以设置0个参数或者两个参数,如rand($min,$max),$min表示从XX开始取值,$max表示最大只能为XX 例如: <?p ...
随机推荐
- python 字符串格式化符号含义及注释
字符串格式化符号含义 符号 说明 %C 格式化字符及其ASCII码 %S 格式化字符串 %d 格式化整数 %o 格式化无符号八进制数 %x 格式化无符号十六进制数 %X 格式化无符号十六进制数(大写) ...
- idea appliction context not configured for this file
File --> Project Structure
- LeetCode题解之Rotate Array
1.题目描述 2.代码 void rotate(vector<int>& nums, int k) { ) return ; && (k / nums.size() ...
- Enum,Int,String的互相转换
Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基类 ...
- scrapy实战--登陆人人网爬取个人信息
今天把scrapy的文档研究了一下,感觉有点手痒,就写点东西留点念想吧,也做为备忘录.随意写写,看到的朋友觉得不好,不要喷我哈. 创建scrapy工程 cd C:\Spider_dev\app\scr ...
- GreenPlum 5.0的安装
基本环境: server IP MDW 172.16.16.31 SDW1 172.16.16.34 SDW2 172.16.16.35 1:检查操作系统是否符合要求,以及系统设置. 我这里使用的系统 ...
- 将字典或者数组转换成JSON数据或者字符串
将字典或者数组转换成JSON数据或者字符串 源码: NSDictionary+JSON.h 与 NSDictionary+JSON.m // // NSDictionary+JSON.h // Cat ...
- [翻译] DoImagePickerController
DoImagePickerController An image picker controller with single selection and multiple selection. Sup ...
- 适配iOS6与iOS7
适配屏幕其实很简单,但为了保持兼容性以及写的代码的通用性,以及最小的改动代码,本人按照如下的一种方式来适配,可以一劳永逸. 1. 先定义几个宏,分辨表示应用可以使用区域的高度,屏幕可用区域的高度,屏幕 ...
- lua调用c++函数返回值作用
2015/05/28 lua调用c++接口,返回给lua函数的是压入栈的内容,可以有多个返回值.但是c++接口本身也是有返回值的,这个返回值也非常的重要,会决定最后返回到lua函数的值的个数. (1) ...