C語言 rand函数 进阶探讨与实现

C语言中随机函数应用

可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C标准,所以说,random函数不能在gcc,vc等编译器下编译通过。那么怎么实现C语言中的随机函数呢?

除了random函数,还有一个rand函数,也是一个随机函数,可以产生从0到rand_max的随机数。

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

int main()
{
    int x;
    x = rand();
    printf("%d\n", x);
    return 0;
}

运行上面的代码,你会发现系統确实生成了一个随机数,但是继续运行多几次,你会发现系统生成的数字还是以前那个,什么情况,伤我感情~~

原來是因为随机数取在C语言中采用的是固定序列,所以每次执行所取的是同一个数。

但是,仔細想想,如果要生成一大堆不一樣的随机数,那要怎么做啊,跪求苍天啊啊啊啊啊啊~~~~ 那是没有用滴,还不如靠自己~~

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

int main()
{
    int x;
    time_t t;
    srand((unsigned) time(&t));
    for(int i=0; i<10; i++) {
        printf("%d\n", rand()%100); //生成10個0~99的不同隨機數
    }
    return 0;
}

这时运行程序,会发现每次产生的随机数都不一样。

那么为什么第一个程序一样而第二个程序不一样呢?

第二个程序用到了一个新的函数srand,这个函数是给随机数产生一个随机种子(seed),函数原型是

srand( (unsigned) time(NULL));

time的值每时每刻都不同。所以种子不同,所以,产生的随机数也不同。

所以说,要想产生不同的随机数,在使用rand之前需要先调用srand

由于rand产生的随机数从0到rand_max,而rand_max是一个很大的数,那么如何产生从X~Y的数呢?

从X到Y,有Y-X+1个数,所以要产生从X到Y的数,只需要这样写:

k=rand()%(Y-X+1)+X;

这样,就可以产生你想要的任何范围内的随机数了。

时间: 2024-10-11 01:45:59

C語言 rand函数 进阶探讨与实现的相关文章

php MySQL使用rand函数随机取记录(转)

php MySQL使用rand函数随机取记录 如何在mysql中使用随机数, 如何写一个语句能一下更新几百条MYSQL数据! 需要测试MYSQL数据库,里面有一个上万条数据的数据库,如何写一个PHP文件一下每次更新几百条信息,我都是写一个循环一次更新一条信息,这样我知道用WHILE写就可以了,要是一次更新好比100条数据改如何写呢! 正确答案是:UPDATE cdb_posts SET views = rand(); 顺便给你找了点关于mysql rand函数的实例,如下: 那就在insert

matlab rand函数详解

均匀分布的随机数或矩阵 语法 Y = rand(n) Y = rand(m,n) Y = rand([m n]) Y = rand(m,n,p,...) Y = rand([m n p...]) Y = rand(size(A)) rand s = rand('state') 描述 rand函数产生由在(0, 1)之间均匀分布的随机数组成的数组. Y = rand(n) 返回一个n x n的随机矩阵.如果n不是数量,则返回错误信息. Y = rand(m,n) 或 Y = rand([m n])

php加載語言包

在languagebag.php中 <?php ob_start(); include_once 'template/index.html'; //加载模板文件,并执行里面的php指令 $str = ob_get_contents(); ob_clean(); $zh_arr = array( //中文语言包 'name'        => '姓名', 'address'    => '地址', 'date'        => '日期'     ); $en_arr = arr

关于rand()函数 转载于其他人

C++中的rand()函数 分类: 编程语言/ C#/ 文章 C++中产生随机数种子对于初学者一直都很困惑.大家知道,在C中有专门的srand(N)函数可以轻松实现这一功能,然而在C++中则要复杂一些.下面是笔者学习的一点心得,希望对大家能有所帮助.(这里我们依然要借助C标准库中的rand()函数) 函数说明: int rand();                                          :返回从[0,MAX)之间的随机整数,这里的MAX与你所定义的数据类型而定:需#

GO語言基礎教程:數據類型,變量,常量

GO類似PHP,每行的結尾要加分號來結束,不同點在於GO對此並不強制,這一點又像javascript,另外GO的語句塊是用一對大括號來包裹的,但是go要求左大括號必須要在語句的結尾處,不能在行首出現左大括號,這是一個新的特性,至少在我接觸的編程語言中第一次遇到這種狀況.還有就是GO對大小寫敏感,這一點相信大家不會有什麽爭議.    GO語言的註釋方法和PHP是相同的,單行註釋用//,而多行註釋用/*註釋內容*/,這一點是沒差別的. Go有眾所周知的數據類型int,這個類型很特殊,他會自動根據您的

关于rand函数

C语言要获得随机数,就要用到rand()函数.关于rand函数要注意以下几点: 1.要包含stdlib.h,rand函数声明在这个函数里. 2.rand()函数返回一个0~RAND_MAX之间的随机数,经测试在VC,GCC中,[0,RAND_MAX],这个随机数是可以是0或RAND_MAX的. 3.rand()产生的是伪随机数,如果不初始化,每次输出都是一样的序列. 4.srand(seed)是初始化函数,seed一般用机器时间. RAND_MAX是跟实现有关的,在VC6里是32767,在GCC

C中的rand函数和srand函数

rand函数和srand函数 先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明. 1.rand(产生随机数) 表头文件: #include<stdlib.h> 定义函数 :int rand(void) 函数说明 : 因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND_MAX 间.在调用此函数产生随机数前,必须先利

浅析C语言中的rand函数和srand函数(一)

我们在编程解决问题的过程中,往往需要使用到随机数.由于计算机是一台以逻辑为基础的机器,没法做到真正的随机(大概量子计算机可以?).所以计算机生成的是伪随机数,供我们使用. 我们使用C语言的rand函数,生成的也是伪随机数. 一个简单的示范如下: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 5 int 6 main(int argc, char** argv) 7 { 8 // 以机器当

Ubuntu語言支持爲灰色修復方法

Ubuntu語言支持爲灰色修復方法 在Ubuntu12.04中,在下不知爲何將 語言支持 中 應用到整個系統 和 添加語言 這2個按弄成了灰色,導致ibus不能輸入中文,現在唔將修復方法公告天下: 1.啓動 terminal ,輸入如下命令, 安裝輸入法:sudo apt-get install ibus-clutter ibus-gtk3 ibus-pinyin 2. 輸入如下命令,選擇語言:sudo gnome-language-selector 3.選擇要安裝的語言:英語,簡體中文和繁體中