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函数应用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • OpenCV实现图像转换为漫画效果

    OpenCV实现图像转换为漫画效果

    这篇文章主要为大家详细介绍了OpenCV实现图像转换为漫画效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • C语言实现猜拳游戏

    C语言实现猜拳游戏

    这篇文章主要为大家详细介绍了C语言实现猜拳游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • C语言修炼之路初识分支句 循环助本心下篇

    C语言修炼之路初识分支句 循环助本心下篇

    现实生活中我们经常需要根据不同的条件做出不同的选择。程序设计中也需要根据条件来选择不同的程序进行处理,这称之为分支结构,当条件表达式不存在时,它被假设为真。您也可以设置一个初始值和增量表达式,一般情况下,C 程序员偏向于使用 for(;;) 结构来表示一个无限循环
    2022-03-03
  • C++ 二维数组参数传递的实现方法

    C++ 二维数组参数传递的实现方法

    这篇文章主要介绍了C++ 二维数组参数传递的实现方法的相关资料,这里提供三种方法帮助大家实现这样的功能,需要的朋友可以参考下
    2017-08-08
  • C++继承和多态的用法解读

    C++继承和多态的用法解读

    这篇文章主要介绍了C++继承和多态的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • C语言中settimeofday函数和gettimeofday函数的使用

    C语言中settimeofday函数和gettimeofday函数的使用

    这篇文章主要介绍了C语言中的settimeofday函数和gettimeofday函数的使用,注意settimeofday()函数只返回0和-1,需要的朋友可以参考下
    2015-08-08
  • 用C语言判断一个二叉树是否为另一个的子结构

    用C语言判断一个二叉树是否为另一个的子结构

    这篇文章主要介绍了用C语言判断一个二叉树是否为另一个的子结构,是数据结构学习当中的基础知识,需要的朋友可以参考下
    2015-08-08
  • 实现Dijkstra算法最短路径问题详解

    实现Dijkstra算法最短路径问题详解

    这篇文章主要介绍了实现Dijkstra算法最短路径问题详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 深入探讨:main函数执行完毕后,是否可能会再执行一段代码?

    深入探讨:main函数执行完毕后,是否可能会再执行一段代码?

    本篇文章是对main函数执行完毕后,是否可能会再执行一段代码,进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 数据结构用两个栈实现一个队列的实例

    数据结构用两个栈实现一个队列的实例

    这篇文章主要介绍了C++语言数据结构用两个栈实现一个队列的实例的相关资料,需要的朋友可以参考下
    2017-06-06

最新评论