欢迎光临散文网 会员登陆 & 注册

第 8 讲:for 循环

2021-08-30 16:17 作者:SunnieShine  | 我要投稿

for 语句的标准写法

变量循环其实就是 whiledo-while 语句的一种特别写法,为了方便人的理解,才创立的这样的循环操作,它是 while 的语法糖。

写法是这样的:

for 的括号里有三个语句,并且分别使用分号分开。原因在于它的写法会被编译为 while 语句,所以其实这些语句在 while 之中也都是需要加分号的,所以用分号隔开。两个分号把括号内的内容分隔成了三个部分,按顺序分别叫做初始值条件增量,即按变量来看的初始情况值,变量作循环需要满足的条件(或叫每做完一次循环后的判断条件),和每一次循环完成后变量需要变化的量。

它的解释是这样的:先赋初始值、然后判断条件、条件成立时执行循环里面的操作、然后对变量增加增量、然后判断条件、然后条件成立时只需循环里面的操作、然后对变量增加增量、然后判断条件,这样的操作。

比如上面的写法就是这样的:

另外,sum = 0 语句还可以直接写在 for 里。这也是可以的:

不过,变量赋初始值的时候,多个变量得用逗号隔开了。而且,标准 C 语言规定,变量的声明是不能写在 for 的里面的,比如这样是不可以的:

残缺 for

for 循环的分号内的东西可有可无,比如不需要的时候就可以不写,不过呢,分号不能省略。

这样和上面的语句是等价的。毕竟赋初值可以在前面写,也可以后面写。

还可以这样:

这样还是等效的。


带有逗号表达式的 for

在说这一点前,就不得不讲一个东西:逗号表达式。


逗号表达式

逗号表达式发明出来的唯一用途就只是放在 for 里,因为 for 需要用分号分隔所有部分(初值、条件和增量),所以如果想要同时给多个变量赋初始值的时候,或者是给多个变量设定增量的时候,就可以使用它,而不影响分号。

但是,因为它是在 C 语言里存在的语法点,所以也可以使用在其他场合,虽然这一点并不多大意义。

在赋值操作后,a = 3 * 5, a * 4 就是一个逗号表达式。它由两个部分构成:a = 3 * 5a * 4。逗号表达式的计算是放在所有操作都执行完了才会执行的地方,这里是因为它有括号,所以会执行。

运算法则是这样的,从左到右依次计算,逗号表达式里面每一个用逗号分开的部分都会计算一次,并取最后一个部分,作为整体表达式的数值。比如这里,从左至右,先让 a 获得一个数值是 15,然后计算 a * 4,得到 60,这个 60 就是整体表达式的数值,最后赋值给 b,所以 a = 15b = 60

不过,由于它最后才会被计算,所以如果没有括号的话,就得小心了。

答案竟然是 231!你敢信?我们来看看为什么。

首先,C 语言规定,它的计算顺序是放在最后的,换句话说,赋值啥的所有操作全部在它前面。所以赋值会被先执行,也就是这句话等于是以下三句话的简写:

只是合并了而已。而这句话你也看得出,逗号表达式虽然要取出最后一个逗号部分作为表达式的数值,但因为运算的关系,a++ 已经先被赋值给 c 了,所以最终逗号表达式整体数值结果其实并没有什么用途,故这里其实只是相当于合并书写的一种操作罢了。

那么,c = a++ 得到 c 的值应为 1,因为 ++ 在后。而 a 最终是会变为 2 的。然后 b 则会因为后面两句话,而增大两个单位。所以 b 应为 3。所以 a = 2b = 3c = 1

逗号表达式嵌套到 for

知道这一点之后,我们来看怎么嵌套。

我们知道,为 1 到 100 求和时,除了为作为循环的变量 i 赋值外,还需要为 sum 给定初始值,否则 sum 从一个根本就不知道是多少的数开始增加,是错误的。

所以我们可以这么写:

当然了,简化写法:

也是 OK 的。注意,这次 for 因为没有大括号的关系,循环的部分就只有 for 带上这个小括号这一部分而已。所以加上了分号,表示它在这里截断,for 的语句只能到这里。


为什么经常把 for 里用的变量命名为 i

这是一个很好的问题。你记住一点,它诞生自人们的习惯。之前就说过,变量名称只会受到标识符命名规则的约束,所以取名这一点才是关键。我们最初经常使用到 int 类型来表示整数,除非万不得已才会调整类型。而在 for 循环里,我们常常使用 int 类型的变量作为循环的成员。而这个变量一般表示循环的量,所以它不太好取名。为了简单化处理,我们一般使用它的类型名称的首字母就直接作为了这个变量的名字。比如这里的 int 变量就直接叫做 i。包括后续会介绍到的嵌套循环,那么里面的变量就叫做 j,按着顺序排下来,从 i 开始,ijk、……。

当然,如果是一个字符类型的变量作为初始变量,那么一般就叫做 c 或者 ch,其它的变量按类型取名也都是一样的规则。


第 8 讲:for 循环的评论 (共 条)

分享到微博请遵守国家法律