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()函数生成一组不重复的随机数相关推荐

  1. R语言使用rgamma函数生成符合Gamma分布的随机数、使用plot函数可视化符合Gamma分布的随机数(Gamma Distribution)

    R语言使用rgamma函数生成符合Gamma分布的随机数.使用plot函数可视化符合Gamma分布的随机数(Gamma Distribution) 目录

  2. c语言中求大于的函数,c语言编写函数,求一组数中大于平均值的数的个数.

    C语言编写程序 给定一组数,求大于0,等于0,小于0的数据个数 #define N 10 main(){int num1=0,num2=0,num3=0,i;for(i=0;i 一道C语言题目:求一组 ...

  3. 【C语言】利用rand函数不重复地生成不重复的数组发牌且配对!扑克牌管理操作系统的升级与优化(CodeBlocks)

    PS:编程环境为Codeblocks 前言 如你所见,经过两周的洗礼,老师又抛出了一个难题 这次的扑克牌系统,需要设计一个小游戏 (当然写完就结课了!!!!!) 在结课的动力下,在野兽的咆哮中,我肝出 ...

  4. C语言rand函数生成随机数详解和示例

    文章目录 1.生成随机数 2.生成一定范围随机数 3.获取视频教程 4.版权声明 在C/C++程序开发中,会经常用到随机数这个功能,例如编写游戏类(纸牌)的程序时就需要用到随机数. 1.生成随机数 在 ...

  5. c语言设置随机函数,C语言随机函数(c语言随机函数rand怎么用)

    就像是楼上写的 通常随机函数rand() 带有时间种子的随机函数srand(time(0))在用rand()实现.记住加相关头文件 它的返回值就是求取随机的值,所以如果没有对数有要求,直接这样定:pr ...

  6. php如何生成唯一的短链接,怎么在PHP利用uniqid函数生成唯一的ID

    怎么在PHP利用uniqid函数生成唯一的ID 发布时间:2020-12-19 15:06:56 来源:亿速云 阅读:70 作者:Leah 今天就跟大家聊聊有关怎么在PHP利用uniqid函数生成唯一 ...

  7. php生成产品编号,php中利用str_pad函数生成数字递增形式的产品编号

    php中利用str_pad函数生成数字递增形式的产品编号 解决办法:$str="QB".str_pad(($maxid[0]["max(id)"]+1),5,& ...

  8. c语言使用node类型指针,C语言利用 void 类型指针实现面向对象类概念与抽象

    不使用C++时,很多C语言新手可能认为C语言缺乏了面向对象和抽象性,事实上,C语言通过某种组合方式,可以间接性的实现面对对象和抽象. 不过多态和继承这种实现,就有点小麻烦,但是依然可以实现. 核心: ...

  9. C语言利用前缀表达式实现复杂科学计算器

    用C语言实现的科学计算器,支持2种常量,10种基本函数,Ans寄存器.相对来说拓展性应该是不错的,思路是首先化简复杂名称的函数名和常量名,然后把表达式转换成前缀表达式,再直接处理前缀表达式即可.因此对 ...

最新文章

  1. springboot-springSecurity 之 http Basic认证 (四)
  2. 三十二、从0到1教你用Scrapy来爬取整站天气网
  3. C++编程问题汇总(方便日后查阅)
  4. fiddler设置https抓包
  5. AutoML数据增广
  6. mysql shell
  7. “我没搞懂元宇宙,但一天能赚9w块”
  8. TiKV 是如何存取数据的(下)
  9. 考研复习(2)链表操作
  10. While 1比While True快?
  11. jQuery cdn加速
  12. 京东方尚未成为苹果的最大供应商,但已经享受到果链的好处
  13. 爬虫之爬取易班推文信息
  14. 操作系统(五):FCFS/SJF/非抢占优先级/RR
  15. python 每分钟运行一次_python 每60秒执行一次
  16. 索引过长 max key length is 767 bytes
  17. ROM, SRAM, SDRAM的区别
  18. 《怪诞行为学》40条基本观点
  19. matlab常数编程,Matlab编程,求解出卡普雷卡尔(Kaprekar)常数
  20. scpjsv3模组链接_我的世界scpv3下载-我的世界scpv3模组下载-4399J小游戏

热门文章

  1. 前端工程师 - 面试题 (最新,最全)
  2. 【第二趴】uni-app开发工具(手把手带你安装HBuilderX、搭建第一个多端项目初体验)
  3. 【Linux】系统管理命令
  4. 联想主板bios设置u盘启动项的方法怎么操作
  5. Hibernate 缓存机制续 - 查询缓存
  6. Hamibot 基于AutoJs的自动化安卓app小程序赚钱神奇
  7. 功能连接分析方法及其解释缺陷的综述
  8. windows10 设定和取消定时关机
  9. Wireshark使用详解
  10. Verilog always和assign知识点