C语言rand生成随机数的范围,c语言rand函数产生随机数

C语言rand生成随机数的范围,c语言rand函数产生随机数,C语言随机数生成教程(rand和srand用法)

本文主要介绍C语言随机数生成教程(rand和srand用法),通过示例代码介绍的非常详细,对大家的学习或工作有一定的参考价值。有需要的朋友下面跟边肖学习。

在实际编程中,我们经常需要生成随机数。例如,在贪吃蛇游戏中,食物出现在随机位置,而在扑克游戏中,纸牌是随机分发的。

在C语言中,我们一般使用stdlib.h头文件中的rand()函数来生成随机数。它的用法是:

int rand(void);

Void表示不需要传递任何参数。

C中还有一个random()函数可以获取随机数,但random()不是标准函数,在VC/VS等编译器中无法传递,所以很少使用。

Rand()将随机生成一个介于0和rand _ max之间的整数。

RAND_MAX是stdlib.h头文件中的一个宏,用来表示RAND()可以返回的最大随机数。C语言标准没有规定RAND_MAX的具体值,只说它的值至少是32767。在实际编程中,我们不需要知道RAND_MAX的具体值,可以把它当作一个大数字来处理。

以下是随机数生成的一个示例:

#包含stdio.h

#包含stdlib.h

int main(){

int a=rand();

printf('%d\n ',a);

返回0;

}

操作结果示例:

193

随机数的本质

多次运行上面的代码,你会发现每次生成的随机数都是一样的。这是怎么回事?为什么随机数不是随机的?

实际上rand()函数产生的随机数是伪随机的,是根据一个数值按照一定的公式计算出来的,我们称之为“种子”。并且种子随机数和种子随机数的关系是正态分布,如下图所示:

C语言随机数和种子之间是正态分布。

每次电脑启动时种子都是随机的,但电脑一启动就不变了。也就是说,每次启动计算机,种子是固定的,所以根据公式计算出来的结果(也就是生成的随机数)是固定的。

追播

我们可以通过srand()函数重新“播种”,这样种子就会发生变化。srand()的用法是:

void srand(无符号int seed);

它需要一个无符号int类型的参数。在实际开发中,我们可以用时间作为参数。只要每次播种时间不一样,生成的种子就不一样,最终的随机数也不一样。

使用time.h头文件中的time()函数获取当前时间(精确到秒),如下所示:

srand((无符号)时间(空));

感兴趣的读者请猛戳这里自行学习time()函数的用法。本节不做过多解释。

在生成随机数之前,修改上面的代码以植入随机数:

#包含stdio.h

#包含stdlib.h

#包含时间. h

int main() {

int a;

srand((无符号)时间(空));

a=rand();

printf('%d\n ',a);

返回0;

}

多次运行程序,你会发现每次生成的随机数都不一样。但是,这些随机数往往是逐渐增加或减少的,因为我们以时间为种子,时间是逐渐增加的。结合上面的正态分布图,很容易推断出随机数也会逐渐增加或减少。

生成一定范围内的随机数。

在实际开发中,我们经常需要一定范围内的随机数,过大或过小都不符合要求。那么,如何产生一定范围内的随机数呢?我们可以采用取模块的方法:

int a=rand()% 10;//生成一个从0到9的随机数。注意,10是可以除尽的。

要指定上限和下限:

int a=rand()% 51 13;//生成一个13到63之间的随机数

解析:取模就是取余数。rand()Q 13可以看做两部分:rand()Q是生成0~50的随机数,后13位保证A最小只能是13,最大只能是50 ^ 13=63。

最后给出了产生13~63范围内随机数的完整代码:

#包含stdio.h

#包含stdlib.h

#包含时间. h

int main(){

int a;

srand((无符号)时间(空));

a=rand()% 51 13;

printf('%d\n ',a);

返回0;

}

生成连续随机数

有时候我们需要一组随机数(多个随机数)。我们如何创造它们?一个容易想到的解决方案是使用循环并对每个循环重新播种。请看下面的代码:

#包含stdio.h

#包含stdlib.h

#包含时间. h

int main() {

int a,I;

//使用for循环生成10个随机数

for(I=0;i 10i ) {

srand((无符号)时间(空));

a=rand();

printf('%d ',a);

}

返回0;

}

操作结果示例:

8 8 8 8 8 8 8 8 8 8

结果很奇怪。我们每个周期都重新播种。为什么生成的随机数都一样?

这是因为,for循环运行速度很快,一秒钟就运行完了,而time()函数得到的时间只能精确到秒,所以每次循环得到的时间是一样的,所以种子是一样的,随机数也是一样的。

那么,如何解决呢?没有办法连续生成随机数吗?当然,我们会在《C语言连续生成多个随机数》节给出巧妙的解决方案。

这就是这篇关于C语言随机数生成教程的文章(rand和srand的用法)。关于C语言中随机数生成的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: