C语言中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())来作为初始化种子,在同一个程序中这个种子是固定的。
例1(C语言)
随机输出十个0-100之间的整数
程序例1:
#include <stdlib.h> /*用到了srand函数,所以要有这个头文件*/
#include <stdio.h>
#include <time.h> /*用到了time函数,所以要有这个头文件*/
#define MAX 10
int main( void)
{
    int number[MAX] = {0};
    int i;
    unsigned int seed;
    scanf("%d",&seed);/*手动输入种子*/
利用printf函数输出日历    srand(seed);
    for(i = 0; i < MAX; i++)
    {
        number[i] = rand() % 100; /*产生100以内的随机整数*/
        printf("%d ", number[i]);
    }
    printf("\n");
    return 0;
}
例2(C语言)
程序例2:
#include <stdlib.h>
#include <stdio.h>
#include <time.h> /*用到了time函数,所以要有这个头文件*/
#define MAX 10
int main( void)
{
    int number[MAX] = {0};
    int i;
    srand((unsigned) time(NULL)); /*播种子*/
    for(i = 0; i < MAX; i++)
    {
        number[i] = rand() % 100; /*产生100以内的随机整数*/
        printf("%d ", number[i]);
    }
    printf("\n");
    return 0;
}
例3(C++)
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
    double random(double,double);
    srand(unsigned(time(0)));
   
    for (int icnt = 0; icnt != 10; ++icnt)
    {
      cout << "No." << icnt+1 << ": " << int(random(0,10))<< endl;
    }
    return 0;
}
double random(double start, double end)
{
    return start+(end-start)*rand()/(RAND_MAX+ 1.0);
}
在VC++6.0中输出的结果是:
==========================================
No.1: 6
No.2: 3
No.3: 8
No.4: 7
No.5: 0
No.6: 8
No.7: 4
No.8: 8
No.9: 7
No.10: 9
==========================================
rand函数
简介
 功 能::伪随机数发生器
 所属库:stdlib.h
 用 法:
 需要先调用srand初始化,一般用当前日历时间初始化随机数种子,这样每
行代码都可以产生不同的随机数。
 函数原型int rand(void);
 相关函数:srandtimeGetTickCount
程序例
程序1:
#include "stdio.h"
#include "stdlib.h"
int main(void)
{
    int i;
    printf("Ten random numbers from 0 to 99\n\n");
    for(i=0; i<10; i++)
    printf("%d\n", rand() % 100);
    return 0;
}
例1程序在每次运行时都会生成相同的十个伪随机数,
如要每次生成的随机数同应结合srand函数和time函数如下:
程序例2:
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
int main(void)
{
    int i;
    srand((unsigned int)time(NULL));
    printf("Ten random numbers from 0 to 99\n\n");
    for(i=0; i<10; i++)
    printf("%d\n", rand() % 100);
    return 0;
}
解释:
其中rand()%100中的“100”是可变量,也就是随机产生时的最大值(100-1=99)。产生随机数的范围是[0,100),如果不采用srand((unsigned 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系统的Epoch时间)到当前时刻的秒数。然后调用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函数获得日历时间。日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。这个标准时间点对不同的编译器来说会有所不同,但对一个编译系统来说,这个标准时间点是不变的,该编译系统中的时间对应的日历时间都通过该标准时间点来衡量,所以可以说日历时间是“相对时间”,但是无论你在哪一个时区,在同一时刻对同一个标准时间
点来说,日历时间都是一样的。
程序例1:
#include <time.h>
#include <stdio.h>
#include <dos.h>
int main(void)
{
      time_t t;
    t = time(NULL);
    printf("The number of seconds since January 1, 1970 is %ld",t);
    return 0;
}
程序例2:
//time函数也常用于随机数的生成,用日历时间作为种子。
#include <stdio.h>
#include <time.h>
#include<stdlib.h>
int main(void)
{
    int i;
    srand((unsigned)time(NULL));
    printf("ten random numbers from 0 to 99\n\n");
    for (i=0; i<10; i++)
    {
        printf("%d\n", rand()%100);
    }
    return 0;
}
程序例3:
用time()函数结合其他函数(如:localtime、gmtimeasctimectime)可以获得当前系统时间或是标准时间。
#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;