C语言如何使用随机数?

栏目: C · 发布时间: 5年前

内容简介:功能介绍 推送一些C语言方面的知识,提供C语言/C++语言资料,讨论和学习C语言/C++编程知识。给学习C语言的同学们一些帮助。随机数的使用,是不少在学C语言过程中进行一些小功能开发的同学的一个技术问题,今天我们为大家讲解如何在C语言中使用随机数。通常情况下,使用最多的方法的就是使用rand函数随机生成伪随机数来完成随机数的生成工作。注意这里的伪随机数并非是假的! 只不过是计算机按自己的一套理论生成,并不是”完全理想”状态下的随机数,所以是可以接受的。

功能介绍 推送一些 C语言 方面的知识,提供C语言/C++语言资料,讨论和学习C语言/C++编程知识。给学习C语言的同学们一些帮助。

随机数的使用,是不少在学C语言过程中进行一些小功能开发的同学的一个技术问题,今天我们为大家讲解如何在C语言中使用随机数。

通常情况下,使用最多的方法的就是使用rand函数随机生成伪随机数来完成随机数的生成工作。注意这里的伪随机数并非是假的! 只不过是计算机按自己的一套理论生成,并不是”完全理想”状态下的随机数,所以是可以接受的。

函数原型为:int rand(void); 需要包含stdlib头文件,它可以生成一个0 ~RAND_MAX之间的数字,其中RAND_MAX是一个宏,VC6下笔者查看为0x7fff,建议大家亲自上机实验!

这个时候你可能会遇到下面几个问题:

Q1:为什么每次生成的数字都一样?

A1:rand函数每次生成的数字与所谓的”种子”有关,使用rand函数前需要使用srand函数进行种种子(请见后文)。如果没有调用,系统会默认给1,导致每次的随机数都一样。

Q2:为什么最大是0x7fff?

A2:这可能取决于编译器环境,笔者这里是VC6,在rand的函数中看到定义的最大值为0x7fff,如下图:

C语言如何使用随机数?

Q3:如果我想生成特定范围内的数字,该如何写呢?

A3:多多利用%求余运算符即可。如:

生成10以内的数字,可以参考rand()%10

生成1~10之间的数字,可以参考rand()%10+1

特定的,要生成a~b之间的数字,可以参考rand()%(b-a+1)+a

更多时候,我们希望每次运行生成的数字都不相同,这个时候需要配合srand函数来解决这一问题。关于具体原因,大家可以参考rand函数与srand函数的实现细节来加以理解,代码如下:

C语言如何使用随机数?

C语言如何使用随机数?

那么srand函数如何使用呢,先看函数原型:

void srand(unsigned seed); 只需要在rand函数使用之前,调用srand函数传入一个种子即可。但事实上传入一个数,往往产生的随时仍然固定不变。那么较为聪明的写法目前看来只有使用系统时间作为种子最为合适,所以这里srand的参数往往传入time(NULL)参数作为获取系统当前时间作为种子,来产生不同的结果!

并注意类型一致,srand((unsigned)time(NULL)); 记得添加time.h的头文件!

测试代码如下:

C语言如何使用随机数?

大家可以自行上机测试,如果有学习C/C++或者想要学习C/C++可以加我们的学习交流QQ群:712263501群内有相关学习资料


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Concepts, Techniques, and Models of Computer Programming

Concepts, Techniques, and Models of Computer Programming

Peter Van Roy、Seif Haridi / The MIT Press / 2004-2-20 / USD 78.00

This innovative text presents computer programming as a unified discipline in a way that is both practical and scientifically sound. The book focuses on techniques of lasting value and explains them p......一起来看看 《Concepts, Techniques, and Models of Computer Programming》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具