查看: 59|回覆: 0

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

[複製鏈接]

5

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2008-4-18
發表於 2025-12-15 09:43:32 | 顯示全部樓層 |閲讀模式

一、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函数应用内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!

您可能感兴趣的文章:
  • C语言中随机数rand()函数详解
  • 详解C语言中rand函数的使用
  • C语言的随机数rand()函数详解
  • C语言使用rand函数生成随机数
  • C语言rand和srand函数使用方法介绍
  • C语言srand函数的详细用法示例小结
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部