椋鸟C语言笔记#10:随机数的生成

萌新的学习笔记,写错了恳请斧正。


 

目录

rand函数

伪随机

随机种子

时间函数

设置随机种子

设置随机数范围

猜数字


在C语言的stdlib.h头文件中,有一个能生成随机数的函数rand()

rand函数

rand函数会返回一个在0~RAND_MAX之间的伪随机数

RAND_MAX由编译器决定,一般为32767(0x7ffff)

为什么说是伪随机数呢?

伪随机

伪随机数不是真的随机抽取的,而是由对应的种子计算生成的

当种子相同时,生成随机数就会相同:

#include 
#include 

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

以上方代码为例,如果在相同环境下反复运行,其输出结果保持不变

随机种子

随机种子由srand函数设置,其值要求为unsigned int

用法如下:

srand(一个无符号短整型);
//无返回值

随机数通过随机种子生成

随机种子不同时,随机数才能随机

这不就矛盾了吗?我们需要随机数才能生成随机数?

时间函数

这时有一个解决方案,那就是用时间作为随机种子

因为时间肯定是一直在变的嘛!

我们如何在程序中引入时间呢?

可以使用时间函数time(需要包含time.h头文件):

time_t time (time_t* timer); //这是时间函数的原型

时间函数的返回值类型为time_t(32或64位的整型)

当time函数的参数为NULL时,将返回当前的时间戳

时间戳:从1970年1月1日0时0分0秒到当前时间的秒数差值

如果参数不是NULL而是一个指针,函数也会将返回的差值放在timer所指向的内存中

设置随机种子

因此,如果要使用随机数,我们应该这么写:

srand((unsigned int)time(NULL)); //设置随机数种子
printf("%d\n", rand());

设置随机数种子建议放主函数开头

设置随机数范围

比方说要生成0-99间的随机数,我们可以:

rand() % 100

如果是1-100间:

rand() % 100 + 1

如果是1-666间:

rand() % 666 + 1

由此可以得到,在a-b间:

 a + rand() % (b-a+1)

猜数字

这样我们可以写一个猜数字游戏:

#include 
#include 
#include   //利用此头文件中的system函数可以实现清屏

void menu()
{
	printf("******************\n");
	printf("**1.guess-number**\n");
	printf("**0.exit-game   **\n");
	printf("******************\n");
}

void game()
{
	system("CLS");  //清屏
	int num = rand() % 100 + 1;
	int guess = 0;
	int cnt = 1;

	while(1)
	{
		printf("答案在1~100之间,请开始你的表演:\n");
		scanf("%d", &guess);
		
		if (num < guess)
		{
			system("CLS");
			printf("好大~\n");
		}
		else if (num > guess)
		{
			system("CLS");
			printf("行不行啊~细狗~\n");
		}
		else
		{
			system("CLS");
			printf("对喽~\n");
			break;
		}

		cnt++;
	}

	if (1 == cnt)
		printf("Ohhhhhhhhhhh\n一次猜中的欧皇!\n");
	else if (cnt <= 5)
		printf("666\n你用%d次就猜中了!\n", cnt);
	else if (cnt <= 10)
		printf("就这?就这?!\n你用了%d次才猜中\n", cnt);
	else
		printf("好好好,这么玩是吧?\n%d次猜中,太菜了\n", cnt);


}

int main()
{
	int cs = 0;

	srand((unsigned)time(NULL));

	do
	{
		menu();
		scanf("%d", &cs);

		switch (cs)
		{
		case 1: game(); break;
		case 0: break;
		default: system("CLS"); printf("你在瞎输什么?啊?\n");
		}
	} while (cs);

	return 0;
}

你可能感兴趣的:(C语言笔记,c语言,笔记,开发语言)