猜数字游戏(C语言)

猜数字游戏

编译环境VS2017

猜数字游戏,顾名思义,是需要人们猜测一个未知但已确定的数,此问题中还规定了范围0~99。其中,这个未知但要确定的数就要由编写程序来产生,当这个数生成后我们猜数字,程序告诉我们猜的高了,低了,或猜对了来提示我们猜数。
这个未知但已确定的数我们可以用随机数来代替,运用rand()函数可以产生产生随机数,但产生的随机数并不是真正意义上的随机数,因为rand的内部实现是用线性同余法做的,他并不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的。 rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。rand ()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它.初始化的函数就是srand()。 srand()用来设置rand()产生随机数时的随机数种子。其参数必须是个整数,通常可以利用time(0)的返回值来当做参数。如果每次参数都设相同值,rand()所产生的随机数值每次就会一样。 例如:当不设置随机数种子时每次产生随机数都一样,如下
int num[10];
	for (int i =0; i < 10; ++i) {
          
   
		num[i] = rand()%100;
		printf("%d	", num[i]);
	}
这段代码每次运行产生的随机数列都不变如下: 当设置变化的随机种子后 即添加代码srand((unsigned int)time(0));
int num[10];
	srand((unsigned int)time(0));
	for (int i =0; i < 10; ++i) {
          
   
		num[i] = rand()%100;
		printf("%d	", num[i]);
	}
即运行结果为: 再次运行结果为 可以看出,设置变化的时间戳作为随机种子后生成的随机数组不再重复 需要注意的是time(0)返回值与srand()中参数类型并不同,srand()中参数类型为unsigned int型,为避免警告,需要进行类型强制转换 具体实现如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void Menu() {
          
   
	printf("**************************
");
	printf("   1.开始游戏
");
	printf("   0.退出游戏
");
	printf("**************************
");
	printf("请输入您的选择
");
}
void fun() {
          
   
	int x;
	srand((unsigned int)time(0));//用时间戳来改变每次产生的随机数序列
	int to_guess = rand() % 100;//产生0到99的随机整数
	while (1) {
          
   
		printf("请输入您猜的数字
");
		scanf("%d", &x);
		if (x > to_guess) {
          
   
			printf("高了
");
		}
		else if (x < to_guess) {
          
   
			printf("低了
");
		}
		else {
          
   
			printf("猜对了
");
			break;
		}
	}
}
int main() {
          
   
	int num;
	Menu();
	scanf("%d", &num);
	system("cls");
	if (num == 1) {
          
   
		fun();
	}
	if (num == 0) {
          
   
		printf("再见!
");
	}
	system("pause");
	return 0;
}
运行结果如下: 再次运行后:
经验分享 程序员 微信小程序 职场和发展