c语言利用rand()函数生成一组不重复的随机数
rand函数,C语言中用来产生一个随机数的函数。
rand函数界限:stdlib.h头文件中有宏#define RAND_MAX 0x7fff
rand产生一个0-0x7fff的随机数,即最大是32767的一个数
rand函数原型
#include <stdlib.h>int rand(void);
rand函数调用
rand()函数每次调用前都会查询是否调用过srand(seed),是否给seed设定了一个值,如果有那么它会自动调用srand(seed)一次来初始化它的起始值
若之前没有调用srand(seed),那么系统会自动给seed赋初始值,即srand(1)自动调用它一次
srand函数
srand函数是随机数发生器的初始化函数,原型:
void srand(unsigned int seed);
这个函数需要提供一个种子,如srand(1),用1来初始化种子
rand()产生随机数时,如果用srand(seed)播下种子之后,一旦种子相同(下面的getpid方法),产生的随机数将是相同的。当然很多时候刻意让rand()产生的随机数随机化,用时间作种子 srand(time(NULL)),这样每次运行程序的时间肯定是不相同的,产生的随机数肯定就不一样了。
我们常常使用系统时间来初始化,使用time函数来获取系统时间,得到的值是一个时间戳,即从1970年1月1日0点到现在时间的秒数,然后将得到的time_t类型数据转化为(unsigned int)的数,然后再传给srand函数,用法如下:
srand((unsigned int)time(NULL));//我们在使用rand和srand时,主要使用的就是这一种初始化方法!!
如果仍然觉得时间间隔太小,可以在(unsigned)time(0)或者(unsigned)time(NULL)后面乘上某个合适的整数。 例如,srand((unsigned)time(NULL)*10)
time的参数传NULL表示不需要经过参数获得到的time_t数据,time函数原型如下
time_t time(time_t *tloc);//time_t类型被定义为一个长整型
还有另外一种初始化种子的方式如下,用进程的pid作为种子值seed,在同一个程序中,这样的种子的值是相同的
srand((unsigned int)getpid())
rand函数的使用
如果想要表示一个数是从0开始到最大值的,比如说,想要产生一个0-99之间的随机数,那么用法如下
int num = rand() % 100;
如果想要产生一个数是从1开始到最大值的,比如说,想要产生一个1-100之间的随机数,那么用法如下
int num = rand() % 100 + 1;
需要注意最后+1和不+1的区别,+1的最小值是1,不+1的最小值是0
下面来看看rand()和srand()的具体例子,这里我们主要看看种子的初始化方式的不同带来的差异
#include <stdio.h>
#include <stdlib.h>
#include <time.h>int main(){srand((unsigned int)time(0));//初始化种子为随机值int i = 0;for(;i < 5;++i){int num = rand() % 50 + 1;//产生一个1-50之间的数printf("%d ",num);}printf("\n");return 0;
}
下面的代码每次执行程序生成的随机值都是一样的
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>int main(){// srand((unsigned int)getpid());//系统默认调用srand(1)int i = 0;for(;i < 5;++i){int num = rand() % 50 + 1;//产生一个1-50之间的数printf("%d ",num);}printf("\n");return 0;
}
参考链接:https://blog.csdn.net/lvyibin890/article/details/80141412
c语言利用rand()函数生成一组不重复的随机数相关推荐
- R语言使用rgamma函数生成符合Gamma分布的随机数、使用plot函数可视化符合Gamma分布的随机数(Gamma Distribution)
R语言使用rgamma函数生成符合Gamma分布的随机数.使用plot函数可视化符合Gamma分布的随机数(Gamma Distribution) 目录
- c语言中求大于的函数,c语言编写函数,求一组数中大于平均值的数的个数.
C语言编写程序 给定一组数,求大于0,等于0,小于0的数据个数 #define N 10 main(){int num1=0,num2=0,num3=0,i;for(i=0;i 一道C语言题目:求一组 ...
- 【C语言】利用rand函数不重复地生成不重复的数组发牌且配对!扑克牌管理操作系统的升级与优化(CodeBlocks)
PS:编程环境为Codeblocks 前言 如你所见,经过两周的洗礼,老师又抛出了一个难题 这次的扑克牌系统,需要设计一个小游戏 (当然写完就结课了!!!!!) 在结课的动力下,在野兽的咆哮中,我肝出 ...
- C语言rand函数生成随机数详解和示例
文章目录 1.生成随机数 2.生成一定范围随机数 3.获取视频教程 4.版权声明 在C/C++程序开发中,会经常用到随机数这个功能,例如编写游戏类(纸牌)的程序时就需要用到随机数. 1.生成随机数 在 ...
- c语言设置随机函数,C语言随机函数(c语言随机函数rand怎么用)
就像是楼上写的 通常随机函数rand() 带有时间种子的随机函数srand(time(0))在用rand()实现.记住加相关头文件 它的返回值就是求取随机的值,所以如果没有对数有要求,直接这样定:pr ...
- php如何生成唯一的短链接,怎么在PHP利用uniqid函数生成唯一的ID
怎么在PHP利用uniqid函数生成唯一的ID 发布时间:2020-12-19 15:06:56 来源:亿速云 阅读:70 作者:Leah 今天就跟大家聊聊有关怎么在PHP利用uniqid函数生成唯一 ...
- php生成产品编号,php中利用str_pad函数生成数字递增形式的产品编号
php中利用str_pad函数生成数字递增形式的产品编号 解决办法:$str="QB".str_pad(($maxid[0]["max(id)"]+1),5,& ...
- c语言使用node类型指针,C语言利用 void 类型指针实现面向对象类概念与抽象
不使用C++时,很多C语言新手可能认为C语言缺乏了面向对象和抽象性,事实上,C语言通过某种组合方式,可以间接性的实现面对对象和抽象. 不过多态和继承这种实现,就有点小麻烦,但是依然可以实现. 核心: ...
- C语言利用前缀表达式实现复杂科学计算器
用C语言实现的科学计算器,支持2种常量,10种基本函数,Ans寄存器.相对来说拓展性应该是不错的,思路是首先化简复杂名称的函数名和常量名,然后把表达式转换成前缀表达式,再直接处理前缀表达式即可.因此对 ...
最新文章
- springboot-springSecurity 之 http Basic认证 (四)
- 三十二、从0到1教你用Scrapy来爬取整站天气网
- C++编程问题汇总(方便日后查阅)
- fiddler设置https抓包
- AutoML数据增广
- mysql shell
- “我没搞懂元宇宙,但一天能赚9w块”
- TiKV 是如何存取数据的(下)
- 考研复习(2)链表操作
- While 1比While True快?
- jQuery cdn加速
- 京东方尚未成为苹果的最大供应商,但已经享受到果链的好处
- 爬虫之爬取易班推文信息
- 操作系统(五):FCFS/SJF/非抢占优先级/RR
- python 每分钟运行一次_python 每60秒执行一次
- 索引过长 max key length is 767 bytes
- ROM, SRAM, SDRAM的区别
- 《怪诞行为学》40条基本观点
- matlab常数编程,Matlab编程,求解出卡普雷卡尔(Kaprekar)常数
- scpjsv3模组链接_我的世界scpv3下载-我的世界scpv3模组下载-4399J小游戏