• 随机数生成解析


          我们平时在做一些分析数据的时候经常会用到随机数,我们知道,随机数是一个设备,在利用这个设备生成随机数时,需要提供一个种子,如果我们不提供,那么默认会提供一个为1的种子,这时,随机数生成器生成的并不是真正意义上的随机数,因为每次那些随机数都是相同的,例如下面的这个例子:

    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    
    void print_rand();
    
    int main(void)
    {
    	print_rand();
    	printf("
    ");
    }
    
    void print_rand()
    {
    	int a[10], i;
    	
    	
    	for(i = 0; i < 10; i++)
    	{
    		a[i] = rand()%100;
    	}
    	
    	for(i = 0; i < 10; i++)
    	{
    		printf("%d  ", a[i]);
    	}
    }
     


        我现在连续三次执行这个程序,得到如下所示的输出。




     

        现在,我把程序改动如下:

    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    
    void print_rand();
    
    int main(void)
    {
    	print_rand();
    	printf("
    ");
    }
    
    void print_rand()
    {
    	int a[10], i;
    	
    	srand(time(NULL)); 
    	
    	for(i = 0; i < 10; i++)
    	{
    		a[i] = rand()%100;
    	}
    	
    	for(i = 0; i < 10; i++)
    	{
    		printf("%d  ", a[i]);
    	}
    }
     


        同样执行三次,得到的输出如下:




     

        从两次执行的程序可以看出,第一个程序得到的输出都是一样的,因为种子没有变,始终是1,第二个程序输出的每一次都不一样,因为,我用到了这个函数:

    srand(time(NULL)); 

    这个函数是为 rand()提供种子的,为了使每次提供的种子都不一样,我把时间作为参数提供给函数,由于时间肯定是每次都不同的,所以,这样得到的才是真正意义上的随机数。

  • 相关阅读:
    准备使用 Office 365 中国版--邮箱迁移
    准备使用 Office 365 中国版--域名
    中国版的 Office 365
    了解 Office 365
    MySQL Database on Azure 参数设置
    MySQL Database on Azure 的用户名
    Android NOTE
    从源码看Android中sqlite是怎么通过cursorwindow读DB的
    一个由proguard与fastJson引起的血案
    【转载】淘宝架构框架发展史
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3268634.html
Copyright © 2020-2023  润新知