C语言rand函数的应用实例(随机数的生成)

 更新时间:2025年12月15日 09:43:32   作者:zore_c  
在c语言中它为我们提供了一个函数rand,用它我们可以来生成随机数,而它产生的数的范围在0~RAND_MAX之间,这篇文章主要介绍了C语言rand函数应用(随机数的生成)的相关资料,需要的朋友可以参考下

一、rand函数

1.简介

用于生成随机数的函数

使⽤需要包含⼀个头⽂件:<stdlib.h>

2.返回值

返回一个介于和之间的伪随机整数。

一个介于0和RAND_MAX之间的整数值。

(RAND_MAX为32767)

那为什么说是伪随机数呢?

如下代码:

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

int main()
{
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());

	return 0;
}

运行结果:

大家可以自行尝试下,代码两次运行结果一模一样

这也说明了rand生成的数是伪随机数

那该如何生成真正的随机数呢?

rand函数是对⼀个叫种⼦的基准值进⾏运算⽣成的随机数。之所以前⾯每次运⾏程序产⽣的随机数序列是⼀样的,是因为rand函数⽣成随机数的默认种⼦是1。而要想得到真正的随机数就要使种子不断变化。这就可以用到srand函数

二、srand函数

函数原型:

void srand(unsigned int seed);

srand函数的使⽤需要包含⼀个头⽂件:<stdlib.h>

调⽤rand函数之前先调⽤srand函数,

通过srand函数的参数seed来设置rand函数所需要不断变化的种子,

使得rand函数生成的是真正的随机数。

如下代码:

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

int main()
{
	srand(1);
	//修改种子
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());

	return 0;
}

种子不同时运行结果:

可以看见两次结果不同,可以见得:

种子不一样时,生成的随机数也不同

但是,⽣成随机数的时候又需要另⼀个随机数,这就矛盾了。

三、time函数

1.简介

函数说明:

time函数可以获取当前的系统时间,返回的是一个time_t类型的从1970年1⽉1⽇0时0分0秒到现在程序运⾏时间之间的差值,如果我们给time函数传一个空指针(NULL),就会只返回这个时间的差值,这个差值也被称为时间戳。

返回值:

成功则返回秒数,失败则返回((time_t)-1)值,错误原因存于error中。

头文件:

time函数在使用前需要包含头文件< time.h >

2.注意

由上文可知

由于srand函数的参数是需要一个unsigned int 类型的值,虽然time函数的返回值为time_t类型的,但是时间戳是一个正数;所以我们只要把time函数的返回值强制类型转换为unsigned int类型即可。

3.演示

演示:

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

int main()
{
	srand((unsigned int)(time(NULL)));
	//真正的随机数
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());

	return 0;
}

大家也可以自行去试一试,每次运行的结果都不相同

两次运行结果:

四、随机数的生成

现在,我们可以生成出一个介于0和RAND_MAX之间的整数值

(RAND_MAX为32767)

但是要想生成 0到100100到200 等自定义随机数要怎么办呢?

这里需要用到一个运算符(%),这个运算符是取模运算符,得到的就是除以一个数的余数。我们只需要将得到的随机数除上规定的范围那个数就可以得到需要范围的数。

例如:

  • 要生成 0到99 随机数:
    就写rand ()%100;

  • 要生成 1到100 随机数:
    就写rand ()%100+1;

  • 要生成 100到200 随机数:
    就写rand ()%101+100;

万能公式:
生成 a 到 b 随机数:
a + rand( ) % ( b - a + 1 );

演示:

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

int main()
{
	srand((unsigned int)(time(NULL)));
	//真正的随机数
	printf("%d\n", rand() % 100);
	//0-99
	printf("%d\n", rand() % 100 + 1);
	//1-100
	printf("%d\n", rand() % 101 + 100);
	//100-200

	return 0;
}

运行结果:

五、应用

学会了随机数的生成,我们可以应用到随机数完成一些游戏

扫雷中布置雷是随机的,故可以用到rand函数以及本文的内容

我们就可以完成一个扫雷游戏

下一期我们详解扫雷!!!

六、结语

本期资料来自于:

https://legacy.cplusplus.com/

到此这篇关于C语言rand函数应用(随机数的生成)的文章就介绍到这了,更多相关C语言rand函数应用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vs2019+Qt+Opencv环境配置心得(图文)

    Vs2019+Qt+Opencv环境配置心得(图文)

    这篇文章主要介绍了Vs2019+Qt+Opencv环境配置心得(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • C语言中.与->的区别详细解析

    C语言中.与->的区别详细解析

    这篇文章主要给大家介绍了关于C语言中.与->区别的相关资料,这虽然是个小问题,但有时候很容易让人迷惑,因为有的时候用混淆了,程序编译不通过,需要的朋友可以参考下
    2023-06-06
  • 关于移位操作的一点重要说明

    关于移位操作的一点重要说明

    下面小编就为大家带来一篇关于移位操作的一点重要说明。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • C++类中的六大默认成员函数详解

    C++类中的六大默认成员函数详解

    这篇文章主要介绍了C++类中的六大默认成员函数,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • c++ error:crosses initialization of问题解决分析

    c++ error:crosses initialization of问题解决分析

    这篇文章主要介绍了c++ error:crosses initialization ofde 问题解决分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • OpenCV视频流C++多线程处理方法详细分析

    OpenCV视频流C++多线程处理方法详细分析

    为OpenCV是搞计算机视觉必须要掌握的基础,这篇文章主要给大家介绍了关于OpenCV视频流多线程处理的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • C++ string类getline()用法实例详解

    C++ string类getline()用法实例详解

    C++ getline()是一种标准库函数,用于从输入流中读取字符串或行,它是<string>标头的一部分,本文介绍C++ string类getline()用法详解,感兴趣的朋友一起看看吧
    2024-03-03
  • C++实例输入多行数字到数组

    C++实例输入多行数字到数组

    这篇文章主要介绍了C++实例输入多行数字到数组的相关资料,这里提供实例代码帮助大家学习理解,需要的朋友可以参考下
    2016-12-12
  • C++设计模式之享元模式(Flyweight)

    C++设计模式之享元模式(Flyweight)

    这篇文章主要为大家详细介绍了C++设计模式之享元模式Flyweight,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • C++类的构造与析构特点及作用详解

    C++类的构造与析构特点及作用详解

    本文章将会可能会涉及到汇编的知识,不过没有关系,我会讲的尽量通俗易懂;另外本篇文章开始前,建议了解下什么是函数重载,这个概念很简单的--有相同的函数名,但参数列表不相同的函数,就是函数重载
    2022-10-10

最新评论