part.8 从盘古开天开始学C++之循环

引言

循环在编程学习当中是至关重要的一项内容,循环宛如是编程领域里的一把神奇钥匙,它能让计算机按照我们设定的规则,一遍又一遍地执行相同或相似的任务。当我们面对需要重复操作的情况时,循环就大显身手了。
比如说,要找到 1 至 10 当中的偶数,转化成计算机的逻辑时,我们就需要让计算机从 1 开始,逐一地去判断其是否为偶数。在这种情形下,这种多次重复的内容就需要通过循环来将代码进行简化。
C++中有两种循环,分别是for循环和while循环,我们先来学习for循环的相关内容。

for循环

我们来看一下for循环的语法结构

#include <iostream>
using namespace std;
int main () {
	for (int i = 1; i <= 10; i++) {
		cout << i << " ";
	}
}

首先需要遍历1-10的所有数字

for 循环是由关键字“for”所引发的,紧接着在其后的括号当中,所涵盖的内容分别为:①创建循环变量、②设定进入循环的条件,③以及明确循环变量在每次循环时所产生的变化。④最后的大括号内的代码则是每次循环都会重复执行的循环体。其执行的顺序是:①②④③ ②④③ ②④③ ②④③…
上面所提及的循环可以这样来理解:循环从将变量 i 设定为 1 开始进入循环,当 i 满足小于等于 10 这个条件时进入循环,并且每次循环 i 的值增加 1。每次进行循环时,都会将 i 的值打印出来。
所以上面的循环会打印:1 2 3 4 5 6 7 8 9 10,此时i的值为11不满足循环条件,所以跳出了循环。
通过这个for循环我们就可以完成1-10所有数字的遍历。

有了遍历之后,我们就可以逐个判断了

#include <iostream>
using namespace std;
int main () {
	for (int i = 1; i <= 10; i++) {
		// 循环中i的值会从1逐个变换到10
		if (i % 2 == 0) {
			cout << i << " ";
		}
	}
}

从上面的循环解释中我们获取到一个非常重要的信息——循环变量i会从1变到2到3…一直到10。所以,我们只需要每次对i进行判断,即可将1-10中所有的偶数判断到了。

另一种方法

既然可以自行决定循环变量i每次循环可以如何变化,那么其实我们可以用另外一种方法解决这个问题
2 4 6 8 …

不难看出连续的偶数之间的差值都是2,那么对于我们而言,只需要找到起始偶数后续的偶数逐次加2即可。

#include <iostream>
using namespace std;
int main () {
	for (int i = 2; i <= 10; i = i + 2) {
		cout << i << " ";
	}
}

那么这里修改i每次变化的值就可以了。同样的道理,如果想要输出奇数也是一样的操作。
循环变量不仅可以每次增加,也可以逐次减少、逐次乘以2、逐次除以3等等,根据具体的需求我们只需要修改这里的赋值运算式的内容即可。

while循环

while循环其实与for循环没有太大的差异。特定情况下,while循环的代码书写会相对简便,所以根据自己的喜好选择其中之一使用就可以了。
首先我们依旧以上面那道题为例,写一个while循环来观察它的具体结构。

#include <iostream>
using namespace std;
int main () {
	// 定义一个循环变量用以控制循环
	int i = 1;
	while (i <= 10) {
		// 判断循环变量的i是否满足条件,满足则输出
		if (i % 2 == 0) {
			cout << i << " ";
		}
		// 每次循环将循环变量i增加1
		i++;
	}
}

不难发现,对于while循环而言,他的循环变量是需要提前在循环外面进行创建并且赋予初始值的,这就是它与for循环最大的不同之处。
对于上面我们写的for循环而言,循环变量i是属于for循环自己内部创建的变量,所以当循环结束后,我们在for循环外是无法调用这个变量进行任何操作的。
但是while循环不同,它的循环变量只能是提前创建,所以即使while循环结束了,那么在循环中变量发生的改变依旧会保留在变量中。我们可以看看思考一下,下面一段代码执行后会发生什么。

在这里插入图片描述

那么程序在for循环退出后执行打印变量i的时候抛出了异常,说的是你并没有声明变量i,怎么突然就开始输出变量i了呢?因此通过这个错误,我们验证了上面提及的内部循环变量的说法。这就好比你可以在靶场使用他们的手枪,但是当你走出靶场的时候你是不可能使用到他们的手枪的!
相对于for循环而言,while循环关于循环变量的设定并不囊括在固定结构中,所以我们可以使用的相对自由一些。
while循环还有一种比较特殊的写法叫做:do…while。其实就是将循环体从while循环下方移到了上方,那么我们会发现,循环会率先执行一次循环体在对循环变量进行判断,第一次循环不管是否满足循环的条件都会执行。

#include <iostream>
using namespace std;
int main () {
	// 定义一个循环变量用以控制循环
	int i = 11;
	do {
		cout << i << endl;
	}while (i <= 10);
}

在这里插入图片描述

如果将循环的条件判定和初始值用到正常while或者for循环中,循环肯定一次都不会执行,而do…while结构就是应对特殊情况下,必须要执行一次循环体的需求。

关于死循环

通过上面内容的学习,对于循环我们应该是有了一些自身的认知。那么接下来我们一起看看循环的特殊用法。
首先是死循环,有些时候我们在编写循环的时候并不知道该在什么位置退出循环,那么此时就得通过死循环来帮我们将循环进行下去了。
例如:请你使用循环接收用户输入的数字,当用户输入的数据是3的倍数时,就将该数输出,否则就不输出,当用户输入数字0的时候表示输入操作停止了。
如何制造一个死循环呢,这就需要改变改变循环的条件了,我们从for循环开始。for循环后的括号里分别记录了三条内容,他们分别是循环变量的赋予初始值、循环条件以及循环变量的变换。想要制造一个死循环我们可以让循环条件永远满足即可,那么方法可就多了。
例如,我可以设定循环变量i的初始值为0,当i小于2的时候进入循环,每次循环i的值减少1。那么对于这个循环而言因为i的值一开始就比2小,并且每次循环还在不断变小,所以循环条件会一直成立,那此时死循环也就构建完成了。注意:死循环永远不会停止,我们可以通过快捷键ctrl + C手动停止,或者直接点击控制台右上角的x退出。
在这里插入图片描述
如果我们不想要循环变量,也可以非常简单粗暴的这样写

#include <iostream>
using namespace std;
int main () {
	// 我不创建循环变量i,当然也不设定循环条件,那么这必定会成为一个死循环。
	for (;;){
		cout << 1;
	}
}

那么通过这两种方式,其实我们可以得出一个结论,那么就是for循环的括号里有三个内容,但是我们可以选择性的填写,当我需要循环变量的时候,那么我就写上,不需要判断条件的时候,那么我就不写。
好了,现在死循环有了,但是虽然我们构建了一个死循环,我们的目的并不在于要它一直执行下去,还是要在特定情况下退出循环的,那么这里我们就得使用关键字“break”了,就如同这个单词的本身释义一样,它的作用就是打破循环并跳出。这样,上面的问题就可以完美的解决了。

#include <iostream>
using namespace std;
int main () {
    // 创建一个变量用于存储用户输入的内容
	int num;
	for (;;){
		cin >> num;
		if (num % 3 == 0) {
			cout << num << " ";
		}
		if (num == 0){
			break;
		}
	}
}

与break一起,我还要给大家介绍一个关键字“continue”,这个单词的意思是继续,它的作用是跳过本次循环,在本次循环中,continue下的所有代码不再执行,直接进入下一次的循环。那么我们不禁可以想到,其实每次循环体的代码执行完成后,都会执行一次continue进入下次的循环。可是当我将continue加入到循环体代码中的时候,当continue执行后续的代码就少执行一次了。
例如下面的代码,每当循环变量为2的倍数的时候,continue都会执行,那么continue下面的cout代码都会被跳过,所以造成了程序在运行后只会输出奇数。

#include <iostream>
using namespace std;
int main () {
    for (int i = 1; i < 100; i++){
    	if (i % 2 == 0) {
    		continue;
    	}
    	cout << i << " ";
    }
}

以上是使用for循环的解决方案,对于while循环而言,死循环可太简单了,while是通过条件判断进入循环的,那么条件判断判断的就是true或false,也就是说,括号里给他个1,循环就永远不会停了,因为1就是true,且1也不是一个变量永远不会变化,所以该循环就成了死循环了。

#include <iostream>
using namespace std;
int main () {
    while(1) {
    	cout << 1;
    }
}

当然,你也可以通过让循环条件永远成立不了来完成死循环的操作。break和continue的效果用在所有循环中都是一样的,所以这里就不再赘述了。

循环还是非常有趣的,不同的循环变量的判断或是每次循环后的调整都会带来不同的结果。后续的内容中,我们会常常用到循环,所以如果有什么问题,请私信或者进群问都是可以的这节的内容就到这里了,再见在这里插入图片描述

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值