首页 > 其他分享 >计算机小白的成长历程——分支与循环(10)

计算机小白的成长历程——分支与循环(10)

时间:2023-09-16 10:33:32浏览次数:35  
标签:语句 10 goto 程序 小白 循环 历程 标识符 我们

大家好,很高兴又和大家见面了!前面我们花了四章的内容进行了编码题的练习以及编写了第一个游戏程序——猜数字,今天我们要探讨的是分支与循环的最后一个内容——goto语句。

goto语句

1.理解:

goto语句我们在分支与循环(1)中有提到过,它是作为转向语句的一种。goto语句也被称为无条件转移语句,我对它的理解是去往前往的意思,具体是去哪里,那就需要根据实际情况来决定了。

2.使用方法:

goto语句的使用格式是:

//语句结构
标识符://标识符后跟一个冒号;
正常语句;
goto 标识符;//goto语句后跟上标识符,中间用空格隔开,标识符后跟分号代表语句结束;

它具体是如何使用的,这里我们来举个例子,以打印1-9为例:

int main()
{
	int a = 0;
	b:
	for (a = 0; a < 10; a++)
	{
		printf("%d ", a);
		if (5 == a)
		{
			goto b;
		}
	}
	return 0;
}

这个代码我们已经接触过很多次了,今天就不在重复看正常运行的结果了,但是本次编码过程中我在for语句前加了一个标识符b,在循环内加了一个if条件语句,条件语句的执行语句为goto b;这种情况下程序又会如何执行呢?下面我们来运行一下:

计算机小白的成长历程——分支与循环(10)_关机小程序

这里我们可以看到,程序进入了死循环,为什么会这样呢,我们来看看这个代码的运行流程:

计算机小白的成长历程——分支与循环(10)_goto语句_02

从执行流程中我们可以看到,通过goto语句,每次在运行到a=5时就会跳转到循环外,从a=0开始进入循环判断,判定结果肯定为真,然后进入循环,这样就导致了程序无法走出for循环,这就是为什么运行结果是一个死循环。从这个例子我们可以得到下列结论:

1.goto语句后面跟的标识符不需要额外定义可以根据自己的喜好来编写,只需要在标识符后面加一个冒号就可以了;

2.goto语句在进行跳转时并没有任何条件限制,所以是无条件跳转,在使用时只需要goto加上前面有加冒号的标识符;

3.适用场合:

从上述例子我们可以看到,如果我们在代码中随意乱用标识符的话就很容易产生bug,那我们应该如何使用呢?请看下面的例子:

int main()
{
	int a, b, c, d;
	for (a = 0; a < 10; a++)
	{
		for (b = 0; b < a; b++)
		{
			for (c = 0; c < b; c++)
			{
				d = a + b + c;
				if (b + c > a)
				{
					goto sum;
				}
			}
		}
	}
sum:
	printf("%d+%d+%d=%d\n", a,b,c,d);
	return 0;
}

这里我们嵌套了多个循环,如果我们我们正常运行的话它会从最里面的循环一层一层的结束循环然后跳出循环,但是我们在最里层的循环加一个goto语句的话会有什么结果呢?

计算机小白的成长历程——分支与循环(10)_深层嵌套_03

我们从这个结果可以看到,相比于一层一层的结束循环,使用goto语句能更快的跳出循环,大大提高了运行效率,这里我们可以做个总结:

1.goto语句作为无条件转移语句,如果随意使用,容易出现bug,在循环中容易进入死循环;

2.goto语句在深层嵌套中用来跳出嵌套的话,可以大大提高程序的运行效率。

下面咱们来进行实操加深对goto语句的理解:

4.实操理解:

接下来我们来编写一个关机的小程序,在编写代码前,我们先来了解几个知识点:

1.电脑关机命令shutdown -s -t 60:-s——设置关闭,-t——设置时间, 60——60s;

2.cmd——command——命令行,可以通过电脑开始菜单里输入cmd;

3.取消关机命令:shutdown -a:-a——中止系统关闭,仅限在时限内使用;

4.system——执行系统命令函数;

在了解了这些内容之后,我们开始编写代码吧:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
	char a[20] = { 0 };//定义字符数组接受输入的字符;
	again://标识符again为goto语句的跳转标志;
	system("shutdown -s -t 60");//通过system函数执行系统命令,需要调用头文件<stdlib.h>;
	printf("您的电脑将在1分钟后关闭,请输入one piece取消关机>;");
	scanf("%s", a);
	if (strcmp(a, "one piece") == 0)//strcmp——string compare字符串比较函数,需要调用头文件<string.h>;
	{
		system("shutdown -a");
	}
	else
	{
		goto again;
	}
	return 0;
}

这里咱们的代码就编码完成了,有兴趣的朋友可以去试一下。

慎用!!!整蛊小妙招:

在咱们存放项目的文件夹里找到debug文件夹点进去,会看到一个后缀名为.exe的文件:

计算机小白的成长历程——分支与循环(10)_深层嵌套_04

这个就是咱们编写的程序,我们可以通过Ctrl+Alt+.打开任务管理器,之后选择文件->建立新任务->输入cmd->勾选以系统管理权限创建此任务->点击确定进入cmd窗口

计算机小白的成长历程——分支与循环(10)_关机小程序_05

在窗口内输入下面的代码:

sc create servicename binpath="你想要添加的程序的存放路径"

回车之后程序就成功添加进你的电脑服务中了:

计算机小白的成长历程——分支与循环(10)_关机小程序_06

我们只需要将单击此电脑,右键选择管理,找到服务与应用程序,点击服务,再寻找刚刚添加进去的新文件,将它的启动类型改为自动,这样你添加的程序就能自动运行了,具体要怎么使用,那就因人而异了。

那咱们今天的内容到这里就全部结束了,希望这篇内容能帮助大家更好的理解goto语句,接下来随着学习的深入,我会继续给大家分享我在学习过程中的感受,感谢大家的翻阅,咱们下一篇见。

标签:语句,10,goto,程序,小白,循环,历程,标识符,我们
From: https://blog.51cto.com/u_16231477/7491533

相关文章

  • 牛客小白月赛78-C第K小表示数
    题意给定k和一个集合初始只包含a,b,每次可以选择一个数乘2或者选择两个数相加然后将结果放入集合中,问所有可能的集合中第k小值最小值。思路从小到大贪心,每次将该值加a和加b,当集合的大小枚举到2k时说明指针已经枚举到第k个。代码#include<bits/stdc++.h>#defineintlonglon......
  • Win10 C盘清理
    删除windows升级文件夹“$windows.~BT”。管理员运行cmd:执行以下命令。若无权限,将“所有者”改为本机账户,勾选“启用继承”,获得完全控制权限即可takeown/FC:\$Windows.~BT\*/R/AicaclsC:\$Windows.~BT\*.*/T/grantadministrators:Frmdir/S/QC:\$Windows.~BT\  ......
  • Redis7 10大数据类型(Redis集合)
    一、常用二、单值多value,且无重复三、案例SADDkeymember[member...]添加元素SMEMBERSkey遍历集合中的所有元素SISMEMBERkeymember判断元素是否在集合中SREMkeymember[member...]删除元素scard获取集合里面的元素个数SRANDMEMBERkey[数字]从集合中随机展现......
  • 暂停Win10更新100年
    讨厌的Windows更新,动不动就给我来个自动重启,最可怕的是更新过程中还发生意外事件,导致系统挂了,要不是win的生态软件好,直接就转Linux了废话不多说,谁让咱只有抱怨还得用Microsoft家的系统呢?咱既要用它也不能让它惹事,一招解决Windows永久关闭自动更新食用方法:1、以管理员身份运行cm......
  • 代码随想录算法训练营第10天| 232.用栈实现队列 ● 225. 用队列实现栈
    栈和队列232.用栈实现队列stack:queue:卡哥代码一个入栈,一个出栈,即可模拟队列的pop操作pop之前要检查出栈是否为空若为空,则排出入栈里所有的元素至出栈中classMyQueue{public:stack<int>stackIn;stack<int>stackOut;MyQueue(){......
  • 洛谷题解 | P1046 陶陶摘苹果
    ​目录题目描述输入格式输出格式输入输出样例说明/提示题目思路AC代码题目描述陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个 30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现......
  • Educational Codeforces Round 100
    B.FindTheArray对于条件二来说,1是万金油的存在,所以我们只需要把奇数位置或偶数位置全部变成1即可。因为要求差值小于\(\fracs2\),所以我可以求出奇偶位的和修改较小值即可。#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongusingpii=pair<in......
  • 揭秘10个Chat Emy兼职赚钱策略
    在当今数字时代,创造一个有利可图的副业从未如此便利。随着科技的发展,强大的AI语言模型ChatEmy为那些希望增加额外收入的个人开辟了新的途径。在这份全面的指南中,我们将探讨利用ChatEmy潜力的十种巧妙策略,打造您自己的副业帝国。1、利用ChatEmy进行特定领域创作将Cha......
  • 2023 Bonree ONE 秋季产品发布会,10月20日 深圳见!
    ......
  • 2023.9.15 CF gym 104369 vp
    The2023GuangdongProvincialCollegiateProgrammingContesthttps://codeforces.com/gym/104369A枚举并判断即可。B注意到相邻的基站中不能有完整的区间,我们可以双指针求出最小的\(p_i\),使得\([p_i,i]\)中没有完整的区间。然后单调队列即可。C贪心,把最小的卖到最......