您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C语言-随机函数的使用
C语言中srand(),rand(),time()函数srand函数srand函数是随机数发生器的初始化函数。原型:voidsrand(unsignedseed);用法:它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子,后面的rand()函数会出现一样的随机数。如:srand(1);直接使用1来初始化种子。不过为了防止随机数每次重复常常使用系统时间来初始化,即使用time函数来获得系统时间,它的返回值为从00:00:00GMT,January1,1970到现在所持续的秒数(即从1970年1月1日的00:00:00到当前你所处的时间所经过的秒数),然后将time_t型数据转化为(unsigned)型再传给srand函数,即:srand((unsigned)time(&t));还有一个经常用法,不需要定义time_t型t变量,即:srand((unsigned)time(NULL));直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的t数据。srand((int)getpid());使用程序的ID(getpid())来作为初始化种子,在同一个程序中这个种子是固定的。例1(C语言)随机输出十个0-100之间的整数程序例1:#includestdlib.h/*用到了srand函数,所以要有这个头文件*/#includestdio.h#includetime.h/*用到了time函数,所以要有这个头文件*/#defineMAX10intmain(void){intnumber[MAX]={0};inti;unsignedintseed;scanf(%d,&seed);/*手动输入种子*/srand(seed);for(i=0;iMAX;i++){number[i]=rand()%100;/*产生100以内的随机整数*/printf(%d,number[i]);}printf(\n);return0;}例2(C语言)程序例2:#includestdlib.h#includestdio.h#includetime.h/*用到了time函数,所以要有这个头文件*/#defineMAX10intmain(void){intnumber[MAX]={0};inti;srand((unsigned)time(NULL));/*播种子*/for(i=0;iMAX;i++){number[i]=rand()%100;/*产生100以内的随机整数*/printf(%d,number[i]);}printf(\n);return0;}例3(C++)#includeiostream#includectime#includecstdlibusingnamespacestd;intmain(){doublerandom(double,double);srand(unsigned(time(0)));for(inticnt=0;icnt!=10;++icnt){coutNo.icnt+1:int(random(0,10))endl;}return0;}doublerandom(doublestart,doubleend){returnstart+(end-start)*rand()/(RAND_MAX+1.0);}在VC++6.0中输出的结果是:==========================================No.1:6No.2:3No.3:8No.4:7No.5:0No.6:8No.7:4No.8:8No.9:7No.10:9==========================================rand函数简介功能::伪随机数发生器所属库:stdlib.h用法:需要先调用srand初始化,一般用当前日历时间初始化随机数种子,这样每行代码都可以产生不同的随机数。函数原型:intrand(void);相关函数:srand、time、GetTickCount程序例程序1:#includestdio.h#includestdlib.hintmain(void){inti;printf(Tenrandomnumbersfrom0to99\n\n);for(i=0;i10;i++)rintf(%d\n,rand()%100);return0;}例1程序在每次运行时都会生成相同的十个伪随机数,如要每次生成的随机数不同应结合srand函数和time函数。如下:程序例2:#includestdio.h#includestdlib.h#includetime.hintmain(void){inti;srand((unsignedint)time(NULL));printf(Tenrandomnumbersfrom0to99\n\n);for(i=0;i10;i++)printf(%d\n,rand()%100);return0;}解释:其中rand()%100中的“100”是可变量,也就是随机产生时的最大值(100-1=99)。产生随机数的范围是[0,100),如果不采用srand((unsignedint)time(NULL));程序会默认调用srand(1)。伪整型随机数[a,b)如果要取得[a,b)之间的数,则num=rand()%(b-a)+a;伪浮点随机数[a,b)fnum=rand()/(double)(RAND_MAX/(b-a))+a;注:a,b均为整数,a!=b,且a=0;time函数函数名:time头文件:time.h函数原型:time_ttime(time_t*timer)功能:获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从CUT(CoordinatedUniversalTime)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。然后调用localtime将time_t所表示的CUT时间转换为本地时间(我们是+8区,比CUT多8个小时)并转成structtm类型,该类型的各数据成员分别表示年月日时分秒。补充说明:time函数的原型也可以理解为longtime(long*tloc),即返回一个long型整数。因为在time.h这个头文件中time_t实际上就是:#ifndef_TIME_T_DEFINEDtypedeflongtime_t;/*timevalue*/#define_TIME_T_DEFINED/*avoidmultipledefinesoftime_t*/#endif即long。函数应用举例time函数获得日历时间。日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。这个标准时间点对不同的编译器来说会有所不同,但对一个编译系统来说,这个标准时间点是不变的,该编译系统中的时间对应的日历时间都通过该标准时间点来衡量,所以可以说日历时间是“相对时间”,但是无论你在哪一个时区,在同一时刻对同一个标准时间点来说,日历时间都是一样的。程序例1:#includetime.h#includestdio.h#includedos.hintmain(void){time_tt;t=time(NULL);printf(ThenumberofsecondssinceJanuary1,1970is%ld,t);return0;}程序例2://time函数也常用于随机数的生成,用日历时间作为种子。#includestdio.h#includetime.h#includestdlib.hintmain(void){inti;srand((unsigned)time(NULL));printf(tenrandomnumbersfrom0to99\n\n);for(i=0;i10;i++)printf(%d\n,rand()%100);return0;}程序例3:用time()函数结合其他函数(如:localtime、gmtime、asctime、ctime)可以获得当前系统时间或是标准时间。#includestdio.h#includestddef.h#includetime.hintmain(void){time_ttimer;//time_t就是longint类型structtm*tblock;timer=time(NULL);//这一句也可以改成time(&timer);tblock=localtime(&timer);printf(Localtimeis:%s\n,asctime(tblock));return0;}在VC++6.0中输出的结果是:===============================Localtimeis:TueMar2020:34:312012===============================
本文标题:C语言-随机函数的使用
链接地址:https://www.777doc.com/doc-2908755 .html