5Cwen  

1、rand()函数和srand()函数被声明在头文件stdlib.h中,time()函数在文件time.h

2、相同的种子传入srand(),然后调用rand()时,就会产生相同的随机数序列。

3、没有先调用srand(),rand()就和事先调用srand(1)所产生的结果一样

4、随机数是由随机种子根据一定的计算方法计算出来的数值。所以,只要计算方法一定,随机种子一定,那么产生的随机数就不会变。

5、只要用户或第三方不设置随机种子,那么在默认情况下随机种子来自系统时钟(即定时/计数器的值)

6、C语言生成随机数需要用到两个函数,一个是srand(),一个是rand(),首先给srand()提供一个种子,unsigned int类型,其取值范围从0~65535,srand()根据这个种子会由一个特定的公式生成一个随机数序列;然后调用rand(),它会依次从这个序列中返回一个数(在0到32767之间),而在不指定srand()种子的情况下,它每次都使用默认的种子(5与6存在矛盾,6是对的,5应该是其他语言的)

 

 

//1、要取得0~1之间的浮点数
            randnumber =rand() / (double)(RAND_MAX);

//2、更大范围的随机浮点数,比如0~100
            randnumber =rand() /((double)(RAND_MAX)/100);

//3、取[0,10)之间的随机整数
            randnumber = rand() % 10//4、[a,b)之间的随机整数
             randnumber =(rand() % (b - a)) + a;

 

//举出栗子一:
#include<dos.h>

static unsigned int RAND_SEED;

unsigned int random(void)
{
    RAND_SEED=(RAND_SEED*123+59)%65536;
    /*是用来计算随机数的方法,随机数的计算方法在不同的计算机中是不同的*/
    return(RAND_SEED);
}

void random_start(void)
{
    int temp[2];
    movedata(0x0040,0x006c,FP_SEG(temp),FP_OFF(temp),4);
    /*这个函数用来移动内存数据;把位于0040:006CH存储单元中的双字
        放到数组temp的声明的两个存储单元中;
       FP_SEG(far pointer to segment)是取temp数组段地址的函数;
       FP_OFF(far pointer to offset)是取temp数组相对地址的函数;
          0040:006CH处存放的是,时钟记数器*/
    RAND_SEED=temp[0];
    //通过temp数组把0040:006CH处的一个16位的数送给RAND_SEED
}

main()
{
    unsigned int i,n;
    random_start();
    for(i=0;i<10;i++)
        printf("%u\t",random());
    printf("\n");
} 

 

//举个栗子二

#include <iostream>
#include <ctime>
using namespace std;

int main()
{
    srand((unsigned)time(NULL));
    unsigned int r = rand();
   cout << r << endl;
    return 0;
}
//举个栗子三:
    #include <stdlib.h>
    #include <iostream.h>
    #include <conio.h>
    #include <time.h>
    void main()
    {
     srand( (unsigned)time( NULL ) );
     /*放在循环外,由于计算机运行很快,所以你每次用time得到的时间都是一样的(time的时间精度较低,只有55ms)*/
     for(int i=0;i<100000;i++)
     {
     cout<<rand()<<endl;
     }
    }

 

posted on 2016-12-09 23:33  5Cwen  阅读(1172)  评论(0)    收藏  举报