linux C语言获取随机数rand()和srand(time(NULL))介绍


linux C语言获取随机数rand()和srand(time(NULL))介绍


一、在使用rand()产生随机数时,产生的是0~RAND_MAX(该值与平台有关,至少为32767,我下面测试的平台是0x7fffffff),之间的随机数,但其产生的随机数时伪随机数,默认随机数种子为0,所以每次重新运行程序,都会产生相同的随机数,如果要是每次运行时产生的随机数不同,可以以当前时间time(0)作为随机数种子。


二、srand(seed)函数用于给rand()函数设定种子。


三、time是C语言获取当前系统时间的函数,以秒作单位,代表当前时间自Unix标准时间戳(1970年1月1日0点0分0秒,GMT)经过了多少秒。


四、time(0)产生的时间的单位是秒,所以如果在要在一秒内产生多个随机数,那么就不应该用time(0)作为种子,time(0)一般只用于重新运行时要产生不同随机数的情况,否则在这一秒内产生的随机数将会是一样的。如下:

测试代码:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void main( void )
{
    int i=RAND_MAX;
    
	printf("RAND_MAX=0x%x   time(0)=%d \n",RAND_MAX,(int)time(0));
    
    /* 输出 10 个随机数. */
    for( i = 0;   i < 10;i++ )
    {   
        srand(time(0));
 		printf( "%6d  ", rand() );
	}
	printf( "\n");
}




五、如果在此之前没有调用过srand(seed),它会自动调用srand(1)一次,而且你会发现每次重新运行都将输出同样的值。

测试代码:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void main( void )
{
    int i=RAND_MAX;
    
	printf("RAND_MAX=0x%x   time(0)=%d \n",RAND_MAX,(int)time(0));
    
    /* 输出 10 个随机数. */
    for( i = 0;   i < 10;i++ )
    {   
 		printf( "%6d  ", rand() );
	}
	printf( "\n");
}



六、srand(seed)用于给rand()函数设定种子,因为时间的流逝,种子会有变化,得到的随机值也就不一样了。

测试代码

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void main( void )
{
    int i=RAND_MAX;
    
	printf("RAND_MAX=0x%x   time(0)=%d \n",RAND_MAX,(int)time(0));
    srand((int)time(NULL)); 
    /* 输出 10 个随机数. */
    for( i = 0;   i < 10;i++ )
    {   
 		printf( "%6d  ", rand() );
	}
	printf( "\n");
}


七、取得[a,b)之间的随机整数,使用(rand() % (b-a))+ a (结果值将含a不含b)。取得取得[a,b]之间的随机整数,使用(rand() % (b-a+1))+ a (结果值将含a含b).

测试代码

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define random_1(a,b) ((rand()%(b-a))+a)
#define random_2(a,b) ((rand()%(b-a+1))+a)

void main( void )
{
    int i=RAND_MAX;
    
	printf("RAND_MAX=0x%x   time(0)=%d \n",RAND_MAX,(int)time(0));
    srand((int)time(NULL)); 
    /* 输出 10 个随机数. */
	printf( "[0,100): ");
    for( i = 0;   i < 10;i++ )
    {   
 		printf( "%6d  ", random_1(0,100) );
	}
	printf( "\n");
    printf( "[0,100]: ");
	for( i = 0;   i < 10;i++ )
    {   
 		printf( "%6d  ", random_2(0,100) );
	}
	printf( "\n");
	
}


七、用rand() / double(RAND_MAX)可以取得0~1之间的浮点数。

测试代码

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void main( void )
{
    int i=RAND_MAX;
    double ran_float=0.0;
	printf("RAND_MAX=0x%x   time(0)=%d \n",RAND_MAX,(int)time(0));
    srand((int)time(NULL)); 
    /* 输出 10 个随机数. */
    for( i = 0;   i < 10;i++ )
    {   
        ran_float = rand() / (double)(RAND_MAX);
 		printf( "%6f  ",ran_float );
	}
	printf( "\n");
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值