C语言学习day13:for循环练习(生成随机数)

题目:

通过程序随机一个1-100的数,用户通过键盘输入数字  看是否匹配,匹配成功则跳出循环,失败则继续循环。

思路:

  • 然后生成一个随机数
  • 需要写成死循环,同时需要有其他的出口
  • 可以写一个提示,比如输入的数字较大/较小

涉及知识:rand()、srand()函数和time()函数

time()函数:

        会返回系统的当前日历时间,自 1970 年 1 月 1 日以来的秒数。如果系统没有时间,则返回         -1。该返回值也被称为 Unix 时间戳。

time(NULL):

        获取当前时间,以秒为单位,从1970年1月1日(即UNIX纪元)开始计算。

区别:

        如果你传递一个指针,那么time()函数会把当前的时间戳写入这个指针指向的内存位置,并            且返回这个时间戳。

        如果你传递NULL,那么time()函数不会尝试写入任何东西,只会返回当前的时间戳。

如果非要形象的解释:可以想象成time()time(NULL)都是时间的魔术师。他们都可以告诉你从1970年1月1日到现在已经过去了多少秒。他们的区别在于,time()喜欢与人互动,他希望你给他一个空间,他可以在那里写下他的答案。你可以把这个空间想象成一个空白的纸条,你把纸条给time(),然后time()会在纸条上写下答案,并把纸条还给你。而time(NULL)则更喜欢单独工 作,他不需要你给他任何东西,他只是静静地告诉你答案,就像一个神秘的预言家。这就是  time()time(NULL)的区别,他们都是时间的魔术师,只是他们的表演方式略有不同。

        

 srand()函数:

         是一个随机数种子,如果不使用srand()函数,而直接使用rand()函数,那么,每次生             成的随机数都会是一样的

        同时,srand()函数中不能给一个固定的值,否则 rand()函数中的随机数会一直是同一个         数

rand()函数:

        rand()函数会根据随机数种子(srand()函数 )来获取一个随机数

代码:

int main() {
	/**
    产生随机数
	1.导入头文件 time.h  stdlib.h
		时间的开始是从1970/01/01 00:00:00 开始 和现在当前时间的一个差值
	2.添加随机数种子
		若不添加随机数种子,那么每次生成的随机数都会是一样的
	3.获取随机数
    **/
	srand((unsigned int)time(NULL));//先将time函数的返回类型转换成无符号类型,在生成一个随机数        
    种子,使每次随机数不一样
	/**for (int i = 0; i < 10; i++) {
        会生成10个随机数
		int value = rand() % 10;//生成一个0-9的随机数,赋值给value 取余的值不会大于除的值
		printf("%d\n", value);
	}**/

	int value = rand() % 100;
	int num;
	for (;;) {
		printf("请输入数字\n");
		scanf("%d", &num);
		if (num>value) {
			printf("输入的数字较大\n");
		}else if(num < value) {
			printf("输入的数字较小\n");
		}
		else {
			printf("正确");
			break;
		}
	}
	return 0;
}

解释:

srand((unsigned int)time(NULL))

        现在我们开始拆解:

  • time(NULL):用于获取当前的系统时间,表示为从 1970 年 1 月 1 日(即 UNIX 纪元)以来的秒数。
  • (unsigned int):将time_t类型(time()的返回值类型)转换成一个无符号整型
  • srand():用以生成一个随机数种子
  • 所以srand((unsigned int)time(NULL)):这行代码的作用是用当前的系统时间作为种子来设置随机数生成器。由于系统时间是持续变化的,所以每次运行程序时,种子都会不同,生成的随机数序列也就会不同。

结果:

第一次运行:

C语言学习day13:for循环练习(生成随机数)_第1张图片

 第二次运行:

C语言学习day13:for循环练习(生成随机数)_第2张图片

第三次运行

C语言学习day13:for循环练习(生成随机数)_第3张图片

 这篇的重点在于随机数和随机数种子,如果有不懂可以留言或评论,看见了会回

你可能感兴趣的:(C语言学习,学习)