C语言入门(七):写一个关机程序、随机函数的基本认识

一:关机程序的基本代码

写一个关机程序

功能:

程序运行起来的话,电脑就倒计时1分钟关机

如果在1分钟内输入:"我是猪",则取消关机

不输入或者输入错误,则1分钟后关机

关机程序完整代码如下(使用的是goto语句实现的)

cpp 复制代码
int main()
{
	char input[20] = { 0 };//字符数组,用来存放字符串,可以存20个字符
 
	system("shutdown -s -t 60");//设置命令,     这里需要头文件
	//shutdown是关闭的意思,-s是设置的意思,-t是时间的意思,60是我们执行的时间,注意它们之间要空格隔开
 
again:
 
	printf("不要在负隅顽抗了,系统在1分钟内马上就关机了,如果输入:我是猪,则取消关机\n");
 
	scanf("%s", input);//这里不用去地址,因为数组名本身就是地址

	if (strcmp(input, "我是猪")==0)//strcmp 是string compare的缩写,【字符串比较】的意思,如果两个字符串相等,则strcmp函数会返回0,这里还需要头文件
	{
		system("shutdown -a");//取消关机
		printf("已经取消关机\n");
	}
	else
	{
		goto again;
	}
	return 0;
}

使用while循环写的完整关机程序代码

cpp 复制代码
int main()
{
	char input[20] = { 0 };
	system("shutdown -s -t 60");//设置命令

	while (10)//随便给的数字
	{
		printf("不要在负隅顽抗了,系统在1分钟内马上就关机了,如果输入:我是猪,则取消关机\n");
		scanf("%s", input);
		if (strcmp(input, "我是猪") == 0)//字符串比较,如果两个字符串相等,则strcmp函数会返回0
		{
			system("shutdown -a");//取消关机
			printf("好的,猪,我已经取消关机了\n");
			break;
		}
	}
	return 0;
}

现在我来给大家一一解释关机程序代码怎么写的

这里我们先来认识几个新的函数

syetem函数的介绍

shutdown是关闭的意思,-s是设置的意思,-t是时间的意思,60是我们执行的时间,可以改成其他的秒数,还有,注意一下它们之间要空格隔开,同时它还需要一个头文件

cpp 复制代码
	system("shutdown -s -t 60");

头文件

cpp 复制代码
#include<stdlib.h>//system的头文件

strcmp函数的介绍

strcmp 是string compare的缩写,中文意思是【字符串比较】,如果两个字符串相等,则strcmp函数会返回0,此外这里还需要头文件,下面是将input即我们输入的值,与"我是猪"比较,如果你输入了我是猪,则与我们规定的输入值一样,那么函数就会返回为0

cpp 复制代码
strcmp(input, "我是猪")==0

头文件

cpp 复制代码
#include<string.h>//strcmp的头文件

还有关于goto语句,在前面几篇我的博客里,我就初步的介绍了goto语句的基本使用,想必大家应该有所了解,这里我们规定跳到again那个地方去,again我们可以随便设置,放在哪个地方,我们就会跳到那个对方

cpp 复制代码
goto again;

这了我给大家看看关机程序是说明样子的

这是我们运行代码的时候出现的情况

这里我们输入 我是猪

输入完之后,我们就已经取消了关机程序代码

这里如果我们不输入正确的答案,它会再次提醒我们,请输入我是猪,然后取消关机,要不然一分钟过后就真的关机了

关于while循环写的关机程序代码是一样的,这里我就不给大家展现了

二:随机函数rand、srand的基本介绍

注意:随机数的整体范围是0-37962,不能超过这数,这个是计算机规定的

1.rand函数的基本介绍

rand函数的原型

int rand (void);

作用:可以生成随机数

注意:它需要一个头文件,#include<stdlib.h>

头文件

cpp 复制代码
#include<stdlib.h>

rand代码的基本代码的使用

cpp 复制代码
int main()
{
	printf("%d \n", rand());
	printf("%d \n", rand());
	printf("%d \n", rand());
	printf("%d \n", rand());
	printf("%d \n", rand());
	printf("%d \n", rand());	
	return 0;
}

输出结果

它生成的是一个伪随机数,不是真正的随机数,第一次运行代码的时候,确实是随机出来的,但是你再运行一次代码,我们发现数没有变化

原因:rand函数是对一个默认的生成器(种子)的基准上生成的随机数,想要真正的生成出随机数,就要改变它的生成器(种子)rand函数一开始设置的(种子)默认1,你再次运行代码的时候,它还是1,因此不会生成真正的随机数

现在我们来设置这个生成器(种子),这里我们需要用到另一个函数srand

2.srand函数的介绍

srand函数的原型

srand void (unsigned int seed);

这里我们的(种子)是1的话,结果就是我们最上面运行的代码的输出值

cpp 复制代码
srand(1);

如下

此时我们将(种子)改成2

cpp 复制代码
	srand(2);
	printf("%d \n", rand());
	printf("%d \n", rand());
	printf("%d \n", rand());
	printf("%d \n", rand());
	printf("%d \n", rand());
	printf("%d \n", rand());
	return 0;
}

输出结果如下,我们发现这里的数字明显和上面的不一样了,所以总的来说,srand其实就是将生成器(种子)进行了变化,所以我们的输出值也会跟着变化

这里我们来正式设置一个随机数,不用再让我们自己去改那个种子了,它会自动的变化我们的种子

先看下完整的代码,后面我会给大家解释的

cpp 复制代码
int main()
{
	srand((unsigned int)time(NULL));//time(NULL)的意思是,调用time函数返回时间戳,这里没有接收返回值,不用time参数,我们就用NULL,这里的NULL先不做解析,后面我会讲到的
	printf("%d \n", rand());//还有就是注意一下:time函数的使用也要头文件    #include<time.h>  不要忘记了
	printf("%d \n", rand());
	printf("%d \n", rand());
	printf("%d \n", rand());
	printf("%d \n", rand());
	printf("%d \n", rand());
	return 0;
}

第一次输出结果

第二次输出结果,我们发现第一次和第二次的结果发生了变化

现在我来给大家一一解释

我们因为使用了下面这个代码,所以我们才能实现变化的输出值

time(NULL)的意思是,调用time函数返回时间戳,这里没有接收返回值,不用time参数,我们就用NULL,这里的NULL先不做解析,后面我会讲到的

unsigned int这个是整型的定义,我们之所以要转变函数,是因为time()函数并不会被编译器认识,所以为了让编译器认识time()函数,所以我们要将它变成整型函数

cpp 复制代码
srand((unsigned int)time(NULL));

注意:time()函数也是需要一个头文件,大家不要忘记了

cpp 复制代码
  #include<time.h> 

三:随机数范围的规定方法

问题:生成0-99之间的随机数

%100的话我们的余数就一定是0-99之间的数字

cpp 复制代码
int main()
{
	srand((unsigned int)time(NULL));

	printf("%d \n", rand()%100);//余数范围是0-99
	printf("%d \n", rand()%100);
	printf("%d \n", rand()%100);
	printf("%d \n", rand()%100);
	printf("%d \n", rand()%100);
	printf("%d \n", rand()%100);
	return 0;
}

问题:生成1-100的随机数

%100余数范围是0-99,加上1就是1-100

cpp 复制代码
int main()
{
	srand((unsigned int)time(NULL));

	printf("%d \n", rand() % 100+1);//余数范围是0-99,加上1就是1-100
	printf("%d \n", rand() % 100+1);
	printf("%d \n", rand() % 100+1);
	printf("%d \n", rand() % 100+1);
	printf("%d \n", rand() % 100+1);
	printf("%d \n", rand() % 100+1);
	return 0;
}

问题:生成100-200的随机数

余数范围是0-100,加上100,就是100-200

cpp 复制代码
int main()
{
	srand((unsigned int)time(NULL));

	printf("%d \n", 100+rand() % (200-100 + 1));//余数范围是0-100,加上100,就是100-200
	printf("%d \n", 100+rand() % (200-100 + 1));
	printf("%d \n", 100+rand() % (200-100 + 1));
	printf("%d \n", 100+rand() % (200-100 + 1));
	printf("%d \n", 100+rand() % (200-100 + 1));
	printf("%d \n", 100+rand() % (200-100 + 1));
	return 0;
}

其实这里的数我们有一个格式,就是随机数范围设置的公式,我们可以好好的理解这个公式,我们就能更好的去理解上面的数字是怎么加的

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

换成100-200的随机数,相当于a=100,b=200

好了,以上就是关于关机程序带的基本介绍,以及随机函数的基本使用,以及我们怎么去规定随机数的一个大致范围,加上我们之前讲解的所有内容,加上今天的知识,我们就能写一个猜数字的游戏,这里我们放到下一篇博客来专门讲我们的猜数字游戏

相关推荐
GilgameshJSS2 小时前
STM32H743-ARM例程13-SDIO
c语言·arm开发·stm32·嵌入式硬件·学习
GilgameshJSS3 小时前
STM32H743-ARM例程8-EXTI外部中断
c语言·arm开发·stm32·单片机·嵌入式硬件·学习
月盈缺3 小时前
学习嵌入式的第四十三天——ARM——I2C
arm开发·学习
charlie1145141913 小时前
精读 C++20 设计模式:行为型设计模式——观察者模式
c++·学习·观察者模式·设计模式·程序设计·c++20
熊猫钓鱼>_>3 小时前
深度解析学习率:梯度下降中的“速度与激情“
学习
charlie1145141913 小时前
精读 C++20 设计模式:行为型设计模式 — 备忘录模式
c++·学习·设计模式·c++20·备忘录模式
迎風吹頭髮3 小时前
UNIX下C语言编程与实践15-UNIX 文件系统三级结构:目录、i 节点、数据块的协同工作机制
java·c语言·unix
迎風吹頭髮4 小时前
UNIX下C语言编程与实践6-Make 工具与 Makefile 编写:从基础语法到复杂项目构建实战
运维·c语言·unix
我的xiaodoujiao4 小时前
Web UI自动化测试学习系列5--基础知识1--常用元素定位1
windows·python·学习·测试工具