`
sony-soft
  • 浏览: 1022547 次
文章分类
社区版块
存档分类
最新评论

C语言中随机函数应用

 
阅读更多

1前言:有些程序每次执行时不应该产生相同的结果,如游戏和模拟,此时随机数就非常有用。下面这两个函数合在一起使用能够产生伪随机数(pseudo-random number):通过计算产生的随机数,可能有重复出现,所以并不是真正的随机数。

int rand(void);

void srand(unsigned int seed);

1>rand返回一个范围在0和RAND_MAX(至少为32767)之间的伪随机数。当它重复调用时,函数返回这个范围内其他数。为了得到一个更小范围的伪随机数,首先把这个函数的返回值根据所需范围的大小进行取模,然后通过加上或减去一个偏移量对它进行调整。

2>为了避免程序每次运行时获得相同的随机数序列,可以调用srand函数。它用它的参数值对随机数发生器进行初始化。

一个常用的技巧是使用每天的时间作为随机数产生器的种子(seed),例如:

srand((unsignedint )time(0));

2.实例:

程序一:

#include<stdio.h>

#include <stdlib.h>

int main()

{

int k;

k=rand();

printf("%d\n", k);

return 0;

}

大家可以把以上的代码编译运行一下,发现他的确产生随机数了,但是你会发现,每次运行程序产生的随机数都是一样的,为什么呢?因为随机数取在C语言中采用的是固定序列,所以每次执行所取的是同一个数。

那么如何写一个程序,让它每次运行时产生的随机数都不一样呢? 请看下面的例子:

#include<stdlib.h>

#include<time.h>

#include<stdlib.h>

Int main(void)

{

int i;

srand((unsigned int )time(0));

printf("Tenrandom numbers from 0 to 99\n\n");

for (i=0; i<10; i++)

printf("%d\n", rand()%100);

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;

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

分享到:
评论

相关推荐

    抛硬币测率(简单的c语言随机数应用)

    用c语言随机数简单模拟概率论中的抛硬币判断正面的概率

    C语言程序设计(PDF格式)

    9.1.7 用随机函数实现动画的技巧 187 9.1.8 用putimage 函数实现动画的技巧 189 9.2 菜单设计技术 191 9.2.1 下拉式菜单的设计 191 9.2.2 选择式菜单的设计 194 9.2.3 实现阴影窗口的技巧 195 9.3 音响技巧 197 ...

    C语言文件读写.zip

    在处理文件时,C语言还提供了文件定位函数,如`fseek`和`ftell`,它们允许程序在文件中移动文件指针到指定位置,从而实现对文件的随机访问。这对于需要处理大型文件或需要多次访问文件特定部分的程序来说非常有用。 ...

    C语言程序设计(高清PDF)

    9.1.7 用随机函数实现动画的技巧 187 9.1.8 用putimage 函数实现动画的技巧 189 9.2 菜单设计技术 191 9.2.1 下拉式菜单的设计 191 9.2.2 选择式菜单的设计 194 9.2.3 实现阴影窗口的技巧 195 9.3 音响技巧 197 ...

    谭浩强C语言设计第三版.pdf

     3.2.1 命题的“真”、“假”与C语言中的逻辑值  3.2.2 关系运算与关系表达式  3.2.3 逻辑运算与逻辑表达式  3.3 选择型程序设计  3.3.1 if...else结构的应用  3.3.2 if.elseif结构的应用  3.3.3 switch结构...

    基于C语言的六子棋程序设计

    4、AI下棋的算法并没有做深入的研究,本程序中只是应用了rand函数产生随机点实现下棋功能。具体的AI下棋算法待后续更新。 5、本程序可判断下棋的输赢,并且在控制台加以显示。 6、程序中的不足之处还请各位批评指正...

    《C语言程序设计》-PDF格式

    9.1.7 用随机函数实现动画的技巧 187 9.1.8 用putimage 函数实现动画的技巧 189 9.2 菜单设计技术 191 9.2.1 下拉式菜单的设计 191 9.2.2 选择式菜单的设计 194 9.2.3 实现阴影窗口的技巧 195 9.3 音响技巧 197 ...

    C语言程序设计标准教程

    在C语言中提供了多种文件读写的函数: ?字符读写函数 :fgetc和fputc ?字符串读写函数:fgets和fputs ?数据块读写函数:freed和fwrite ?格式化读写函数:fscanf和fprinf  下面分别予以介绍。使用以上函数都要求...

    C语言入门经典(第4版)--源代码及课后练习答案

    8.5.2 从函数中返回指针值 318 8.5.3 在函数中递增指针 322 8.6 小结 322 8.7 习题 323 第9章 函数再探 325 9.1 函数指针 325 9.1.1 声明函数指针 325 9.1.2 通过函数指针调用函数 326 9.1.3 函数指针数组 ...

    C语言解析教程(原书第4版)(美) 凯利.pdf

    《c语言教程(原书第4版)》是一本优秀的c程序设计语言教材,完整描述了ansi c语言及其语法特性,并对c语言的高级特性和应用作了深入阐述,介绍了从c到c++和java过渡的相关知识。《c语言教程(原书第4版)》的一个...

    上海电机学院C语言实训答案

    实训是在学生已经具备了使用C语言编写简单的应用程序的能力,为使学生对C语言有更全面的理解,进一步提高运用C语言编程解决实际问题的能力,通过提出算法、指定输入输出来设计一个解决方案。并为参加计算机等级考试...

    c语言实战105例源码

    15 SimpleDebug函数应用  16 常用的几种排序方法  17 广度优先搜索及深度优先搜索  18 实现基本的串操作  19 计算各点到源点的最短距离  20 储油问题  21 中奖彩球问题  22 0-1背包问题  ...

    C语言经典算法100例.rar

    C语言的经典算法。 第一篇 基础与提高  实例1利用库函数编写基本显示程序  实例2变量属性  实例3运算符与类型  实例4关于程序结构  实例5显示函数曲线图  实例6二分法选代的应用  实例7多变的立方体  实例8...

    c语言实用代码举例

     实例30文件的按记录随机读写 第二篇 图形与多媒体  实例31改变文字背景色  实例32及本颜色设置  实例33制作表格  实例34制作多样的椭圆  实例35美丽的透视图形  实例36错位窗口  实例37能移动的矩形  ...

    c语言经典源码例子100篇

    实例25 函数的引用调用 //swap 实例26 数组函数的调用 // 实例27 命令行变元 // 实例28 函数的返回值 实例29 函数的嵌套调用 实例30 函数的递归调用 实例31 局部和全局变量 实例32 变量的存储类别 实例33 内部和外部...

    (严版C语言版)数据结构源码.rar

    // 随机函数初始化 T=NULL; // 空二叉树T for (int pass=0; pass; pass++) { // 测试运行5次,第一次为空树 outBiThrTree(T,gl_str); // 以类广义表的形式输出二叉树T到gl_str printf("T = %s\n", gl_str); // ...

    C语言程序设计.rar

    9.1.7 用随机函数实现动画的技巧 187 9.1.8 用putimage 函数实现动画的技巧 189 9.2 菜单设计技术 191 9.2.1 下拉式菜单的设计 191 9.2.2 选择式菜单的设计 194 9.2.3 实现阴影窗口的技巧 195 9.3 音响技巧 197 ...

    C语言通用范例开发金典.part2.rar

    ∷相关函数:Parent函数 LeftChild函数 RightChild函数 LeftSibling函数 RightSibling函数 1.4.7 双亲、孩子和兄弟节点的查询(链式结构) 162 范例1-61 双亲、孩子和兄弟节点的查询 162 ∷相关函数:Parent函数 ...

    《你必须知道的495个C语言问题》

    《你必须知道的495个C语言问题》以问答的形式组织内容,讨论了学习或使用C语言的过程中经常遇到的一些问题。书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预...

    c语言数据结构字符串模式匹配算法.zip

    对于一般文稿中串的匹配,简单匹配算法的时间复杂度可降为O (m+n),因此在多数的实际应用场合下被应用。 KMP算法的核心思想是利用已经得到的部分匹配信息来进行后面的匹配过程。看前面的例子。为什么T[5]==’d’的...

Global site tag (gtag.js) - Google Analytics