rand(),srand()研究

测试程序,测试数据必不可少,要获得尽可能多的测试数据,随机函数的使用必不可少。

本文是研究《算法竞赛入门经典(第二版)》习题4-1 象棋 Uva1589过程的产物。

rand(),srand()研究

上网搜索了许多,不理想,感觉难以理解。

按自己的想法,编程验证吧。

程序1:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int i;
    for(i=0;i<10;i++){
        
        printf("%d %d\t",rand(),rand());
    }
    printf("\n\n");
    for(i=0;i<10;i++){
        
        printf("%d %d\t",rand(),rand());
    }
    return 0;
}

程序1运行结果,运行了两次

第一次:

第二次:


对比两次输出结果,完全相同,想要说明的问题是,rand()每次运行时,默认初始化值始终相同,即每次srand()的调用参数,完全同相同。

程序2:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int i;
    srand(1);
    for(i=0;i<10;i++){
        
        printf("%d %d\t",rand(),rand());
    }
    printf("\n\n");
    for(i=0;i<10;i++){
        
        printf("%d %d\t",rand(),rand());
    }
    return 0;
}


程序2的输出结果与程序1完全一致,对比两个程序,可以发现,rand()默认采用srand(1)初始化。


程序3:

#include <stdio.h>
#include <time.h>

int main(){
    printf("%d %d\n",time(0),time(NULL));
    return 0;
}

程序3输出

time(0)与time(NULL)结果完全一致,故0与NULL完全等价,

在stddef.h中发现#define NULL 0。

time是C语言获取当前系统时间的函数,以秒作单位,time(0)代表自Unix标准

时间戳(1970年1月1日0点0分0秒,GMT)到当前时间经过了多少秒。程序运行,

每次time(0)值均不同。

程序4:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main(){
    int i;
    srand(time(0));
    for(i=0;i<10;i++){
        
        printf("%d %d\t",rand(),rand());
    }
    printf("\n\n");
    for(i=0;i<10;i++){
        
        printf("%d %d\t",rand(),rand());
    }
    return 0;
}

程序4,因time(0)每次运行值都不同,每次srand(time(0))对rand()的初始化值都不同,故每次运行程序,产生的随机数都不同。


本文目的,是弄清srand(time(0));rand();这对组合的原理。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值