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)
其他情况,以此类推,这里不作详细说明。
当然,本文取伪随机浮点数的方法只是用来说明函数的使用办法,你可以采用更好的方法来实现。
C语言,如何产生随机数的更多相关文章
- C语言中生产随机数 rand()函数
参考资料:C语言中产生随机数 一:如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间.RAND_MAX定义在stdl ...
- C语言基础(11)-随机数发生器
一. rand() rand是一个C语言库函数,功能是生成一个随机数.rand需要一个不同的种子,才能生成不同的随机数. 二. srand(int seed) rand需要一个不同的种子,才能生成不同 ...
- C语言如何产生随机数
1.基本函数 在C语言中取随机数所需要的函数是: int rand(void); void srand(unsigned int n); rand()函数和srand()函数被声明在头文件stdlib ...
- C语言 生成一个随机数
随机数的生成 有缺陷的生成方式 生成随机数可以使用 <stdlib.h> 里的 int rand(void); 函数实现! 注释: C语言中还有一个 random() 函数可以获取随机数, ...
- C语言之实现随机数产生算法
随机数,也就是在不同的时刻产生不同的数值.在UNIX操作系统和window的操作系统上,我们知道有一个函数rand,它就是用来产生随机数的函数API接口,那么它的原理如何实现? 如果约定a1=f(se ...
- c语言: 生成随机数
#include <time.h> srand((unsigned)time(NULL)); for(int i=0;i<10;i++) { //printf("%d\n& ...
- go语言基础之随机数的使用
1.随机数的使用 示例1: 如果种子参数一样,每次运行程序产生的随机数都一样 package main //必须有个main包 import "fmt" import &quo ...
- C语言 · 明明的随机数
算法训练 明明的随机数 时间限制:1.0s 内存限制:256.0MB 问题描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的 ...
- Go语言 之产生随机数
package main import ( "fmt" "math/rand" "strconv" "time" ) f ...
- C语言中如何产生随机数
今天看到一段小程序 ,里面用到随机数.才发现在C语言中产生随机数不像matlab中那么简单. C中也有rand()函数,但是rand()函数产生的数不是真正意义上的随机数,是一个伪随机数,是根据一个数 ...
随机推荐
- 【Android】Intent中使用Extra传递数据
传值方法一 Intent intent = new Intent(); Bundle bundle = new Bundle(); //该类用作携带数据 bundle.putString(" ...
- oracle优化思考-双刃剑
oracle优化是一个双刃剑,特别注意这把剑用的场合:系统规划OLTP or OLAP 优化1:索引 在DML操作时.必须维护索引.假设大量的DML操作,想想看,IO是不是老高了? 索引长处:在非常多 ...
- mysql binlog解析概要
1,dump协议: 根据数据库的ip+port创建socket,如果创建成功,说明链接建立成功,接下来是使用dump协议订阅binlog 链接建立成功之后,服务端会主动向客户端发送如下问候信息gree ...
- asp.net页面与页面之间参数传递
传值asp文件send.aspx 代码如下 复制代码 <form id="form1" runat="server" action="recei ...
- Java 反射机制浅析
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反 ...
- c++数组操作
一.数组定义和初始化 : 一维数组初始化: : 标准方式一: ]; // value[i]的值不定,没有初始化 : 标准方式二: ] = {,}; // value[0]和value[1]的值分别为1 ...
- 删除数组中等于某个key的所有元素
题目描述: 给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度. 这道题目做暴力的想法就是,用一个指针从头到尾遍历,删除哪个元素就把后面的元素统一向前移动一个位置.但是这样的时间复杂度很 ...
- jquery编写的简单日历
以前在开发web页面的时候遇到日历,都是直接引入一些日历组件来用,一直不太明白实现原理,总感觉挺复杂的. 今天尝试着用jquery写了一个简单的日历功能,可以选择年份,月份,返回今天,原来简单的日历功 ...
- IPTV小窗口播放视频 页面焦点无法移动的解决方法
在IPTV高清页面中,小窗口播放视频时,在某些机顶盒上(如高清中兴.高清大亚4904)会出现焦点无法移动现象,即按键无响应.被这个bug困扰了很久,虽然我知道解决方法,但只知其然,不知其所以然.今天做 ...
- digital root问题
问题阐述会是这样的: Given a non-negative integer num, repeatedly add all its digits until the result has only ...