首页 理论教育 for循环语句流程及控制规则

for循环语句流程及控制规则

时间:2023-10-23 理论教育 版权反馈
【摘要】:图5-1显示了for循环的程序流程。此外,如果k的定义是expression1的一部分,则当到达for循环的右大括号时,该变量将从符号表中删除。注意程序控制不会作为for语句块的一部分再次返回到expression1,它是为接下来会发生什么取决于expression2。如果该语句的计算结果为逻辑false,则for循环结束,并将控制发送到for语句块的右括号后面的第一条语句。

for循环语句流程及控制规则

for循环的一般语法结构如下所示:

for循环由for关键字组成,后跟一个括号,括号中有三个表达式,每个表达式之间用分号隔开。循环语句块由大括号包围,里面有一个或多个程序语句将由for循环控制。

这些程序语句通常被称为for循环的主体。在主体上有一个右大括号,它标志着for循环结构的结束。

在循环结构中,expression1通常初始化控制循环的变量。然而,因为expression1可以有一个逗号分隔的子表达式列表,所以我们不能总是说expression1初始化循环控制变量(你将在下一段中看到这方面的示例)。expression2执行某种形式的逻辑运算,以确定是否需要再次执行循环体。Expression3通常负责更改循环控制变量的状态,但不要求这样做(事实上,如果愿意,你可以将expression3移动到循环体中,但这不是问题所在)。图5-1显示了for循环的程序流程。

图5-1 循环程序执行流程

在图5-1中,程序从变量k的定义开始,然后,是一些附加语句。接着输入for循环。首先,处理表达式1或k=0。因为表达式后面跟一个分号,所以表达式1是一个完整的语句。注意,expression1可以具有以逗号分隔的子表达式列表。例如,你可能会看到如下内容:

for(k=0,j=1;k<1000;k++){

其中,j作为表达式1的一部分初始化为1。还可以将定义和初始化移动到expression1中,如下所示:(www.xing528.com)

for(int k=0;k<1000;k++){

注意,在本例中,变量k被定义并初始化为expression1的一部分。笔者不太喜欢这两种变体,因为笔者倾向于相信简单更好。此外,如果k的定义是expression1的一部分,则当到达for循环的右大括号时,该变量将从符号表中删除。如果在循环完成后需要使用k,那么将变量定义为expression1的一部分是行不通的。

处理expression1后,控制传递到expression2,或图5-1中的k<1000。注意程序控制不会作为for语句块的一部分再次返回到expression1,它是为接下来会发生什么取决于expression2。如果expression2的计算结果为逻辑true,然后将控制传递给循环的循环体语句,或图5-1中的③。如果expression2是true,并在处理循环体中的语句后,将控制传递给expression3,其中k++被处理(图5-1中的④。增加k后,控制权再次传递给exression2,如图5-1所示)。如果expression2的计算结果为逻辑false,则for循环结束,控制传递给第一个for循环语句块的右括号后面的语句。

通常,expression3用于更改控制循环迭代的变量的状态,在我们的示例中是变量k。可以使用逗号分隔的子表达式列表,如下所示:

for(k=0;k<1000;k++,j--){

再说一次,笔者不太喜欢for循环表达式中的复杂表达式。就我个人而言,我会将j的减量推回到循环体的语句块中。笔者没有一个强有力的理论依据来支持这种偏好,这只是笔者做事的方式。

在处理expression3之后,控制返回expression2,以测试是否应该再次执行循环。现在所走的道路取决于expression2的结果。如果表达式的计算结果为逻辑true,则再次执行循环体语句。如果该语句的计算结果为逻辑false,则for循环结束,并将控制发送到for语句块的右括号后面的第一条语句。

Arduino C提供了几种循环风格,那么你如何知道选择哪一种呢?现在,让我们做一个简单的概括:如果你知道要通过循环进行多少次传递,那么For循环通常是一个不错的选择。

对于循环,你会喜欢的另一件事是,良好的循环所具有的三个条件都可以在for循环的括号内找到。expression1通常用于初始化控制循环。expression2通常是逻辑运算,该结果将导致逻辑正确或错误,从而确定是否应通过回路进行另一次传递。最后,expression3会更改循环控制变量的值。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈