该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

在C语言函数库中包含了一个产生随机数的函数:

int rand( void );

在函数库中对这个函数的说明是:

The rand function returns a pseudorandom integer in the range

0 to RAND_MAX. Use the srand function to seed the pseudorandom

-number generator before calling rand.

而在C语言函数库中是这样定义RAND_MAX的:

/* Maximum value returned by "rand" function

*/

#define RAND_MAX 0x7FFF

所以,函数int rand( void );返回的是一个界于0~32767(0x7FFF)之

间的伪随机数,包括0和32767。注意,这里产生的是伪随机数,不是真正意

义上的随机数,看下面的程序:

#include "stdlib.h"

#include "stdio.h"

void main( void )

{

/* Display a number. */

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

getchar();

}

程序运行的结果是:

346

多次运行这个程序,发现每次产生的结果都是346(不同的机器可能产生

的结果不一样),这就是所谓的伪随机数。伪随机数是通过一个公式来运算

出来的,所以,每次产生的伪随机数都一样。那么,如何才能产生真正意义

上的随机数呢?这就有一个随机种子的问题。在C语言标准函数库中,有这

么一个函数:

void srand( unsigned int seed );

在《The c programming language》中对这个函数是这样描述的:

srand uses seed(函数变量声明中的seed) as the seed(随机函数中种子

的意思) for a new sequence of pseudo-random numbers. The

initial seed is 1.

所以,要产生真正意义上的随机数,那么就要求每次提供的种子不一样,一

般情况下,都设置时间为随机函数的种子。看下面的一段程序:

/* RAND.C: This program seeds the random-number generator

* with the time, then displays 10 random integers.

*/

#include "stdlib.h"

#include "stdio.h"

#include "time.h"

void main( void )

{

int i;

/* Seed the random-number generator with current time so that

the numbers will be different every time we run.

将当前时间设置成随机函数的种子,所以每次产生的数都不一样

*/

srand( (unsigned)time( NULL ) );

/* Display 10 numbers. */

for( i = 0; i

printf( “ %6d\n”, rand() );

}

Output

6929

8026

21987

30734

20587

6699

22034

25051

7988

10104

每次运行这个程序,产生的随机数都不一样,这样就达到了随机数的要求了

注意,rand这个函数产生的随机数的范围是0~32767,如果要产生100以内

的随机数怎么办呢?在标准C语言库中并没有定义产生给定范围的随机数的

函数。其实,要产生给定范围的随机数,只要做一个取余(%)运算就可以了

。下面是一个产生10以内随机数的函数:

#include "stdlib.h"

#include "stdio.h"

#include "time.h"

int rand2( void );

void main( void )

{

int i;

/* Seed the random-number generator with current time so that

· the numbers will be different every time we run.

*/

srand( (unsigned)time( NULL ) );

/* Display 10 numbers:0~9 */

for( i = 0; i

printf( " %6d\n", rand2() );

getchar();

}

int rand2( void )

{

return rand() % 10 ;

}

运行结果:

2

5

7

9

0

1

3

5

8

3

在这个程序中,我自己写了一个函数rand2(),来产生10以内的随机数,其

实,打开标准库中的头文件 Stdlib.h 就会发现有这样的一条语句:

#define random(num) (rand() % (num))

上面的这行代码是为了方便产生给定范围的随机数的,思路也是采用取余的

方法,所以上面的程序也可以改成:

#include "stdlib.h"

#include "stdio.h"

c语言中怎样编写随机函数,怎样让c语言中的随机函数真正随机?相关推荐

  1. C语言程序设计:编写函数,求一组数中大于平均值的数的个数

    题目内容: 编写函数,求一组整数中大于平均值的个数,数组元素个数任意.例如:给定的一组数为1,3,6,9,4,23,35,67,12,88时,函数值为3. 函数头定义:int aver(int a[] ...

  2. c语言贪吃蛇编写分析,刚学C语言,想写一个贪吃蛇的代码

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include typedef struct snake { int a; int b; stru ...

  3. c语言用栈编写计算器程序,用c语言实现简易的计算器四则运算的代码最好用栈方法实现,该怎么解决...

    C/C++ code/*--------------------------------------- 函数型计算器(VC++6.0,Win32 Console)程序由 yu_hua 于2007-07 ...

  4. c语言编程国际象棋盘,C语言由国际象棋编写.doc

    C语言由国际象棋编写 井字旗C语言程序: 运行环境:Turbo C/C++for Windows集成实验与学习环境或VC++6.0 #define MAX 3 #define Status int # ...

  5. 怎样设置一个函数C语言,C语言中怎样编写一个函数 如何在C语言中定义一个函数?...

    如何在C语言中定义一个函数?小编很想在你面前流泪最后却还是选择装作打个哈欠 为什么小编怎么定义函数都不正确呢? 总是说小编 表达语法错误在main函数中 小编们可以在头文件与main函数之间定义,并编 ...

  6. R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、编写自定义函数在三线表中添加p值

    R语言使用table1包绘制(生成)三线表.使用单变量分列构建三线表.编写自定义函数在三线表中添加p值 目录

  7. 三线表是什么?R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、编写自定义三线表结构(将因子变量细粒度化重新构建三线图)、编写自定义函数在三线表中添加p值

    三线表是什么?R语言使用table1包绘制(生成)三线表.使用单变量分列构建三线表.编写自定义三线表结构(将因子变量细粒度化重新构建三线图).编写自定义函数在三线表中添加p值 目录

  8. R语言编写自定义函数自定义ggplot图像中的图例(legend)的位置、图例标题、键值、文本字体大小(title、text、key)、颜色标识的大小、点形状pch的大小

    R语言编写自定义函数自定义ggplot图像中的图例(legend)的位置.图例标题.键值.文本字体大小(title.text.key).颜色标识的大小.点形状pch的大小 目录

  9. C语言试题五十七之假定输入的字符串中只包含字母和*号。请编写函数function,它的功能是:删除字符串中所有*号。在编写函数时,不得使用c语言提供的字符串函数。

    1. 题目 假定输入的字符串中只包含字母和*号.请编写函数function,它的功能是:删除字符串中所有*号.在编写函数时,不得使用c语言提供的字符串函数. 2 .温馨提示 C语言试题汇总里可用于计算 ...

  10. max日期最大值为0_C语言编写程序输出10个整数中最小值或最大值

    C语言编写程序输出10个整数中最小值或最大值 这是一个比较基础,同时也包含C语言中诸多特点的程序,仔细体会有很多的格式规则和技巧.其中包括:输入语句,输出语句,数组,分支结构,循环结构.希望广大C语言 ...

最新文章

  1. 拼多多面试|如何用 Redis 统计独立用户访问量?
  2. 第四十五课:MVC,MVP,MVVM的区别
  3. 用中断例程完成loop指令的功能【安装中断例程,设置中断向量表】
  4. leetcode 621. 任务调度器(贪心算法)
  5. POJ 2299 - Ultra-QuickSort BIT
  6. 中国新能源汽车供应链白皮书2020
  7. 【LeetCode-面试算法经典-Java实现】【136-Single Number(仅仅出现一次的数字)】
  8. Batch, Iteration,Epoch概念理解
  9. 问诊把脉“实景三维业务发展瓶颈在哪里”和“御医良方”
  10. python调用m文件
  11. 【96】太空射击游戏_笔记
  12. uniapp打开外部链接
  13. java ldc指令_6.Java JVM_4.JVM字节码之整型入栈指令(iconst、bipush、sipush、ldc)
  14. 主动防病毒产品及实测篇
  15. 苏宁2021“轻装上阵”,张近东:聚焦零售优势业务,增利减亏
  16. 给定一个函数做其最佳平方逼近c语言,第三章 函数逼近 — 最佳平方逼近.
  17. CMT2380F32模块开发4-UART例程
  18. 2.licheepi亲自编译内核
  19. 修改 oracle 字符 zhs,修改Oracle数据库的字符集(UTF8→ZHS16GBK)
  20. 计算机配置介绍英语作文,需一篇用英文介绍笔记本电脑的小文章!~

热门文章

  1. gprs模块与服务器通信协议,什么是DTU模块和GPRS模块?它们有什么关系?
  2. 文档编号与文档版本号的作用
  3. 【Windows】文件批量重命名及后缀批量修改
  4. 电视音频输出怎么连接数字功放机
  5. python因子分析论文_Python——因子分析(KMO检验和Bartlett's球形检验)
  6. Jzoj5410 小型耀斑
  7. 几种常用非关系型数据库
  8. Cannot run program python: CreateProcess error=2, 系统找不到指定的文件。
  9. 数据结构学习(C++)——队列应用(事件驱动模拟)
  10. The NT Insider:Stop Interrupting Me -- Of PICs and APICs