关注

C语言中要如何生成随机数

目录

大家好,今天为大家带来在C语言中该如何生成随机数的相关知识

1.rand函数

2.srand函数

3.time函数

3.1时间戳

3.2 time_t 是什么?

4.随机数的生成

5.如何控制随机数的范围

6.猜数字游戏(100~200之间)

6.1菜单

6.2游戏

6.3主函数部分


大家好,今天为大家带来在C语言中该如何生成随机数的相关知识

随机数是编程中常见的基础需求,C 语言本身提供了标准库来实现随机数生成。
但很多人只知道用  rand() ,却不清楚种子、范围控制等细节,导致写出的随机数不符合预期。
本文详细讲解 C 语言随机数的原理、用法与常见坑。

1.rand函数

要使用rand函数必须包含头文件<stdlib.h>

它会返回随机一个0~RAND_MAX(32767)中的值

可以看到它会返回一个随机数给我们

但是我们再次运行程序时,我们发现两次运行生成的随机数相同

我们如果再深入调查一下就能发现rand函数并不是真正的生成随机数,而是通过某种算法得到的“随机数”,是伪随机数

在这个网站我们知道rand - C++ 参考https://legacy.cplusplus.com/reference/cstdlib/rand/?kw=rand

rand 函数是对一个叫 “种子” 的基准值进行运算生成的随机数。

之所以前面每次运行程序产生的随机数序列是一样的,那是因为 rand 函数生成随机数的默认种子是 1

如果要生成不同的随机数,就要改变种子的值。

那怎么改变种子呢?这就要使用srand函数了

2.srand函数

这个函数要给它传一个无符号整数来充当种子,我们也能知道rand 函数生成随机数的默认种子是 1。

这时就需要让传给 srand 函数的参数是随机的就行了。

但我们就疑惑了,我们本来就要让系统给我生成一个随机数,带生成一个随机数就需要一个随机数,这不是悖论吗?

其实我们只需要传给它一个不停变化的值就行了,这时就需要 time 函数

3.time函数

它会将时间戳返回到 time_t 指针指向的数据中,如果是空指针(NULL)它会将时间戳已返回值的形式带回来

3.1时间戳

就是如今距1970年1月1日过了多少秒

3.2 time_t 是什么?

 time_t本质上就是32位或64位的整型类型

这样由于时间在不停变化,传给 srand 函数的参数就不停变化,这样“ 种子 ”就不停变化了

4.随机数的生成

综上我们就可以真正得到随机数了

5.如何控制随机数的范围

如果我们要生成1~100之间的随机数该如何做呢?

我们让 rand 函数的返回值" %100 "就能得到0~99的值再" +1 "就行了

那么 100~1000 呢?

我们可以先确定生成0~900的数,再" +100 "

printf("%d\n", 100 + rand() % 901);

这样我们要求生成a~b之间的随机值就是

printf("%d\n", a + rand() % (b - a + 1));
//rand() % (b - a + 1)得到0~b - a之间的数,再加上a得到a~b之间的随机值

6.猜数字游戏(100~200之间)

我们如果了解了随机数的生成方式就可以写一个小游戏——猜数字游戏

6.1菜单

void menu(void)
{
	printf("********************\n");
	printf("*****  1.Paly  *****\n");
	printf("*****  0.Exit  *****\n");
	printf("********************\n");
}

6.2游戏

void game(int n)
{
	if (!n)//判断用户是否游玩
		return;
	else
	{
		srand((size_t)time(NULL));
		int target = 100 + rand() % 101;//生成随机数
		int input = 0;//记录用户猜的数字
		while (input != target)
		{
			printf("请选择你要猜的数字\n");
			scanf("%d", &input);
			if (input > target)
				printf("猜大了\n");
			else if (input < target)
				printf("猜小了\n");
			else
				printf("恭喜你,您猜对了!\n");
		}
	}
}

6.3主函数部分

int main()
{
	int input = 0;
	do
	{
		menu();
		printf("请选择操作->\n");
		scanf("%d", &input);
		game(input);
	} while (input);
	return 0;
}

以上就是全部内容,感谢阅读,希望能够帮到你,也欢迎大家指错及补充

转载自CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/lunar_coder/article/details/157971508

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--