在stdlib.h中,有两个函数与伪随机数的生成有关:srand和rand。C语言中,随机数表有很多列,srand函数是根据其参数(unsigned类型)来获得一个种子(seed),根据种子来设置从哪一列开始取随机数。rand无参数,返回一个相应的随机数。种子相同,则从同一列随机数中选取,rand每次选取之后会自动选取下一个随机数。以上的所说十分之抽象,但是一下程序可以清楚地解释其原理。

#include <stdio.h>
#include <stdlib.h> int main(void)
{
int seed, i; for (;;)
{
printf("Please input a number to set the seed:");
scanf("%d", &seed); if (seed == 0)
break;
for (i = 0; i < 5; i++)
printf ("%d\t", rand());
printf("\n\n");
} return 0;
}

一下是运行结果:

可见,如果srand设置的种子相同,则会从同一列随机数中选取。那么,究竟如何做到生成真正不同的随机数呢?

问题的关键在于种子的选取。我们的目的是要在不同的时间生成不同的随机数。因此,只要有一个只和时间有关的数,将其传递给srand,就可以达到目的了。这样的函数位于time.h头文件中。函数名即为time。调用time会返回一个和时间有关的整数,具体的用法如下:

/*
* rand2.c
* to create a list of random numbers.
*/ #include <stdio.h>
#include <stdlib.h>
#include <time.h> #define MAXNUM 100 int main(void)
{
int i;
srand((unsigned) time(NULL));
for (i = 0; i < 10; i++)
printf("%d\t", rand()%MAXNUM); printf("\n");
return 0;
}

运行效果如下:

C语言伪随机数的生成的更多相关文章

  1. Go 语言控制台输入&生成随机数

    Go 语言控制台输入&生成随机数 1. 不同基础类型之间的转化对于不同的基础类型之间的转化,Go 提供了 strconv包.它实现了字符串与其他基本数据类型之间的转化.其中最常用的数值转化函数 ...

  2. R语言系列:生成数据

    R语言系列:生成数据 (2014-05-04 17:41:57) 转载▼ 标签: r语言 教育 分类: 生物信息 生成规则数据1.使用“:“,如x=1:10,注意该方法既可以递增也可以递减,如y=10 ...

  3. java、python、golang等开发语言如何快速生成二维码?

    免费二维码生成途径非常多!比如比较有名的草料二维码,如果只是简单的使用,用它就足够了.但是如果想大规模的生成,那就不太合适了.再者很多工具都没办法在二维码中加入logo(像微信二维码一样). 接下来, ...

  4. numpy伪随机数的生成

    numpy伪随机数的生成 normal函数 可以用normal来得到一个标准正态分布的4×4样本数组 >>> import numpy as np >>> samp ...

  5. C语言实现随机生成0或1

    rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数.如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的.srand(u ...

  6. nodejs语言实现验证码生成功能

    验证码已经是非常常用的反作弊.反攻击手段了,其实要实现这个功能对技术水平好的人也不难,但是并不是每个人,每种语言都天然适合搞某个功能...不过我们可以通过封装接口,来屏蔽差异化,把问题简单化,现在就用 ...

  7. Go语言使用swagger生成接口文档

    swagger介绍 Swagger本质上是一种用于描述使用JSON表示的RESTful API的接口描述语言.Swagger与一组开源软件工具一起使用,以设计.构建.记录和使用RESTful Web服 ...

  8. c语言cJson数组生成与解析

    1.生成 json char* CreatJsCustNo( BT_BNF_CUST *p, char *strPaperNO) { cJSON *pJsonArry,*pJsonsub; pJson ...

  9. C语言实现随机生成0~100的数

    #include <iostream> #include <time.h> int main() { srand((unsigned)time(NULL));//srand() ...

随机推荐

  1. UVAlive 6131 dp+斜率优化

    这道题和06年论文<从一类单调性问题看算法的优化>第一道例题很相似. 题意:给出n个矿的重量和位置,这些矿石只能从上往下运送,现在要在这些地方建造m个heap,要使得,sigma距离*重量 ...

  2. [iOS]使用symbolicatecrash分析crash文件

    对于我们iOS开发者来说,最心碎的事莫过于苹果审核一个星期后上架app store,而第二天就报出闪退bug.一周前我刚经历过,而且最坑的是由于第一次做个人开发,经验不足,没有集成友盟的分析SDK,还 ...

  3. C语言之可重入函数 && 不可重入函数

    可重入函数 在 实时系统的设计中,经常会出现多个任务调用同一个函数的情况.如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任 务调用这个函数的数据,从而导致不可预料 ...

  4. VS2013服务器资源管理器添加Mysql数据源

    如何为VS2013服务器资源管理器添加Mysql数据源,如图: 接下来就看下如何添加 1.需要下载安装Mysql for Visual Studio 1.1.1 下载位置:http://downloa ...

  5. svn服务器的配置步骤

    1.安装客户端: TortoiseSVN-1.9.3.27038-x64-svn-1.9.3.msi下载地址:http://jaist.dl.sourceforge.net/project/torto ...

  6. 微信企业号 出现redirect_uri unauthorized 50001 解决办法

    在企业号内获得用户信息时,需要对域名授权,如果不授权会提示: redirect_uri unauthorized  50001 错误. 通常,我们会在 输入我们的授权域名. 今天在企业号内又新建了一个 ...

  7. MVC上传相关

    1.上传大小设置 system.web节点,httpruntime节点加入maxRequestLength="4096",以K为单位,例子中大小限制为4M. 2.form提交htm ...

  8. Struts2:ValueStack

    一.ValueStack     1 .ValueStack是一个接口,在struts2中使用OGNL(Object-Graph Navigation Language)表达式实际上是使用       ...

  9. 类 this指针 const成员函数

    C++ Primer 第07章 类 7.1.2 ​Sales_data类的定义如下: #ifndef SALES_DATA_H #define SALES_DATA_H #include <st ...

  10. [Leetcode][015] 3Sum (Java)

    题目在这里: https://leetcode.com/problems/3sum/ [标签] Array; Two Pointers [个人分析] 老实交待,这个题卡半天,第一次做不会,抄别人的.过 ...