【c语言】生成随机数

简介

有时我们想要一些随机的数据,比如生成一个随机数又或者想让数组里的数据随机。 这时候,就需要用c语言里的库函数生成随机数了,下面就介绍如何在c语言生成随机数。

rand()函数

描述

int rand (void)函数返回一个伪随机数,其范围在0-RAND_MAX之间。 RAND_MAX的值依赖于库,不同的库RAND_MAX值不同,但在所有的库中,RAND_MAX至少是32767。

这个伪随机数是用一个数(也称为种子(seed)),经过一个算法生成的伪随机数。 rand()函数的默认种子是1;

声明

int rand (void);

参数

无参数

返回值

返回一个在0 - RAND_MAX之间的整数

头文件

stdio.h

示例

1.直接调用rand()函数生成0-RAND_MAX之间的随机数。

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

int main()
{
          
   
	int num = rand();
	return 0;
}

输出:

41

2.生成10个0-10之间的随机数:

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

int main()
{
          
   
	for (int i = 0; i < 10; i++)
	{
          
   
		//调用rand()函数再模11,就能生成0-10之间的数
		int num = rand() % 11;
		//打印
		printf("%d ", num);
	}

	return 0;
}

输出:

8 9 9 1 7 5 5 10 1 0

注意

当你运行了一次代码之后,再运行一次,你会发现生成的随机数是相同的。 这是因为每次执行程序的时候,rand()函数种子是相同的,默认是1。 如果要每次运行都生成不同的种子,那就要用srand()函数设置种子。

srand()函数

描述

void srand (unsigned int seed)用来设置rand()函数的种子。

声明

void srand (unsigned int seed)

参数

unsigned int seed				要设置的种子,类型为无符号整型

返回值

无返回值

头文件

stdio.h

示例

这个种子经常传的参数是time(NULL),因为这个参数是程序运行的时间戳,每次运行程序这个值都不一样。 所以每次运行程序,用rand()函数产生的随机值都不一样。

下面的程序就把time(NULL)作为参数传给srand()函数的参数,并且运行多次运行程序。

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

int main()
{
          
   
	//将时间戳time(NULL)作为种子
	srand(time(NULL));
	for (int i = 0; i < 10; i++)
	{
          
   
		//生成0-10的随机数
		int num = rand() % 11;
		printf("%d ", num);
	}
	return 0;
}

第一次运行输出:

2 2 9 0 10 10 9 1 6 0

第二次运行输出:

6 6 6 2 6 9 9 1 7 9

第三次运行输出:

10 7 4 0 9 3 10 6 2 10

注意

1.time函数所需头文件为time.h 2.time(NULL)也可以写成(unsigned int)time(NULL),也就是将time()函数的返回值转型成(unsigned int) 不转型也没问题。

生成某一个范围中的随机数

有时候我们需要生成一个范围内的随机数,比如10-20内的随机数。 但库中并没有函数能直接生成一个范围内的随机数。 但利用rand()函数,再加上我们手动处理一下就可以生成一个范围内的随机数。

举个例子:

我们要生成10-20内的随机数: 首先利用rand()函数生成0-10范围内的数,再加10,不就是10-20范围内的数了吗。

代码:

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

int main()
{
          
   
	//设置种子
	srand(time(NULL));
	
	for (int i = 0; i < 10; i++)
	{
          
   
		//生成10-20范围内的随机数
		int num = rand() % 11 + 10;
		printf("%d ", num);
	}
	
	return 0;
}

输出:

18 17 11 20 16 16 11 15 11 16

要是我们要生成200到300之间的随机数呢?再抽象一点,生成n-m之间的随机数呢? 其实生成n-m内的数据是有公式可套的,公式如下: number = rand() % (m - n + 1) + n

就拿生成6-10范围内的随机数举例子: number = rand() % (10 - 6 + 1) + 6 即: number = rand() % 5 + 6

分析:rand() % 5的数在0-4范围内,再加6,就在6-10范围内了。

经验分享 程序员 微信小程序 职场和发展