zoukankan      html  css  js  c++  java
  • 随机数发生器(对拍)-----对比测试

    对于写好的程序,可能会花费较长的时间进行调试,所以要具备一定的调试和测试能力。测试的任务就是检查一份代码是否正确。如果找到了错误,最好还能提供一个让它错误的数据。有了错误数据之后,接下来的任务便是调试:找出出错的原因。如果找到了错,最好把它改对——至少对于刚才的错误数据能得到正确的结果。改对一组数据之后,可能还有其他错误,因此需要进一步测试;即使以前曾经正确的数据,也可能因为多次改动之后反而变错了,需要再次调试。总之,在编码结束后,为确保程序的正确性,测试和调试往往要交替进行。

    确保代码正确的方法是:再找一份完成同样功能的代码与之对比,用它来和这个新程序“对答案”(俗称对拍)。

    下面给出随机数发生器的代码:

     

    #include<stdio.h>
    #include<time.h>
    #include<stdlib.h>
    int n=100,m=100;
    
    double random()
    {
      //以下两种方式均可以
        //return(double) rand()/RAND_MAX;
       return (double)rand()/(RAND_MAX+1);
    }
    int random(int n)
    {
        //return (int)((n-1)*random()+0.5);
        return (int)(1+n*random());
    }
    int main()
    {
        printf("%d%d
    ",n,m);
        srand(time(NULL));//系统时间
        for(int i=1;i<=m;i++)
        {
            if(rand()%2) printf("A ");else printf("B ");
            //int x=random(n)+1;
           int x=random(n);
            //int y=random(n)+1;
            int y=random(n);
            printf("%d %d
    ",x,y);
        } 
        return 0;
    }

     

    1.rand()函数

    rand()函数的主要功能是产生随机数。

    (1)表头文件:

    #include <stdlib.h> 

    (2)函数原型:

    int rand(void) 

    (3)函数说明

    rand()函数的内部实现是线性同余法的,它不是真的随机数,只不过是因为其周期特别长,所以在一定的范围里可看成是随机的,rand()会返回一随机数,范围在0至RAND_MAX区间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1(即调用srand(1)),rand()产生的是假随机数字,每次执行是相同的,若要不同,以不同的值来初始化它,初始化函数是srand()。

    (4)返回值

    返回值是0至RAND_MAX之间的随机整数值,RAND_MAX的范围最少是32767之间(int),取双字节(16位数)。若用unsigned int双字节是65535,四字节是4294967295的整数范围,0~RAND_MAX每个数字被选中的机率是相同的。

     提示6-1:

    stdlib.h中的rand()生成闭区间[0,RAND_MAX]内均匀分布的随机整数,其中RAND_MAX至少为32767。如果生成更大的随机整数,在精度要求不太高的情况下可以用rand()的结果“放大”得到。

    说明:用“int x=1+rand()%n;”来生成[1,n]之间的随机数这种方法是不可取的,比较好的做法是:j=1+(int)(n*rand()/(RAND_MAX+1.0));产生一个[1,n]之间的随机数。

    2.srand()函数

    srand()函数的功能是设置随机数种子。

     (1)函数原型:

    void srand(unsigned int seed); 

    (2)函数说明

    srand()函数用来设置rand()产生随机数时的随机数种子。参数seed必须是整数,通常可以利用getpid()(即取目前进程的进程识别码)或time(NULL)的返回值来当做seed。

    time()函数的功能是返回从1970/01/01到现在的秒数。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。由于每一次运行程序的时间是不同,time(NULL)

    函数的返回值也不同,即种子不同,所以产生的随机数也不同。

    提示6-2:

    stdlib.h中的srand()函数初始化随机数种子。如果需要程序每次执行是使用一个不同的种子,可以用time.h中的time(NULL)为参数调用srand。一般来说,只在程序执行的开头调用一次srand。

     

     

  • 相关阅读:
    地址栏中提交中文参数乱码问题
    拼接html字符串时单引号问题
    细线表格的制作
    盒子模型
    盒子间距离的计算规则:
    正则表达式
    轻便+智能:史上最酷恒温器Nest 2.0!
    医疗的未来,是身体控制大权的争夺战
    而立之年话沧桑
    刘晓明大使在《电讯报》的英文原文
  • 原文地址:https://www.cnblogs.com/khbcsu/p/3915666.html
Copyright © 2011-2022 走看看