生成随机数组函数

#ifndef SORTTESTHELPER_H
#define SORTTESTHELPER_H

#include<iostream>
#include<ctime>
#include<cassert>

namespace SortTestHelper{
	
	//生成有n个元素的随机数组,每个元素的随机范围为[rangeL,rangeR] 
	int* generateRandomArray(int n,int rangeL,int rangeR)
	{
		assert(rangeL <= rangeR );
		
		int *arr = new int[n];
		srand(time(NULL));
		for(int i=0;i<n;i++)
		    arr[i]=rand()%(rangeR-rangeL+1)+rangeL;
		return arr;
	}
    
       //输出随机数组
       	template<typename T>
	void printfArray(T arr[],int n)
           {
		for( int i = 0 ; i < n ; i ++ )
                     cout<<arr[i]<<" ";
                cout<<endl;
	   }
	  
}

assert()函数

assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: 
#include <assert.h>                                          //#include<cassert>    C++

void assert( int expression ); 

assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息, 
然后通过调用 abort 来终止程序运行。  如果其值为真,那么则继续执行后面的语句。

srand(),rand(),time()函数

srand()函数

srand()函数是随机数发生器的初始化函数。

原型:void  srand(unsigned  seed);

用法: 它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子,后面的rand()函数会出现一样的随机数。如:

srand(1); 直接使用1来初始化种子。不过为了防止随机数每次重复常常使用系统时间来初始化,即使用time函数来获取系统时间,它的返回值为从 00:00:00 GMT,January 1,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())来初始化种子,在同一个程序中这个种子是固定的。

rand()函数

功能: 伪随机数发生器

所属库: stdlib.h

用法:需要先调用srand初始化,一般用当前日历时间初始化随机数种子,这样每行代码都可以产生不同的随机数。

函数原型:int rand(void);

相关函数: srand,time,GetTickCount

解释: 

rand()%100 中的“100”是可变量,也就是随机产生时的最大值(100-1=99)。产生随机数的范围是[0,100),如果不采用srand((unsiged int)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_t   time(time_t  *timer)

功能:获取当前的系统时间,返回到的结果是一个time_t类型,其实就是一个大整数,其值表示从CUT(Coordinated Universal Time)时间1970年1月1日 00:00:00(称为UNIX系统的Eopch时间)到当前时刻的秒数。然后调用localtime 将time_t所表示的CUT时间转换为本地时间(我们是+8区,比CUT多8个小时)并转成struct tm类型,该类型的各数据成员分别表示年月日时分秒。

补充说明:

time函数的原型也可以理解为long time(long *tloc), 即返回一个long型整数。因为在time.h这个头文件中time_t实际上就是:

#ifndef  _TIME_T_DEFINED

typedef long time_t;     /* time value */

#define _TIME_T_DEFINED /* avoid multiple  defines of time_t */

#endif

即long 。

函数应用举例

time函数获得日历时间,日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。这个标准时间点对不同的编译器来说会有所不同,但对一个编译系统来说,这个标准时间点是不变的,该编译系统中的时间对应的时间都通过该标准时间点来衡量,所以可以说日历时间是“相对时间”,但是无论你在哪一个时区,在同一时刻对同一标准时间点来说,日历时间都是一样的。

程序例:

用time()函数结合其他函数(如: localtime ,gmtime ,asctime , ctime)可以获得当前系统时间或是标准时间。

#include<stdio.h>
#include<stddef.h>
#include<time.h>
int main(void)
{
    time_t timer;        // time_t 就是 long int 类型
    struct tm *tblock;
    timer = time(NULL);   //这一句也可以改成time(*timer);
    tblock = localtime(&timer);
    printf("Local time is: %s\n",asctime(tblock));
    return 0;
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值