首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

For 循环语句用法介绍

For 循环语句用法介绍

For 循环的结构如下:

For ( 表达式1; 表达式2; 表达式3 )

一条语句/复合语句

无论 For 循环到底会循环多少次,表达式1 都只会被运算一次——只有当 For 循环第一次执行时才会运算表达式1。表达式2 用于控制是否继续进行循环。如果表达式2 为真,则执行“一条语句/复合语句”,反之则退出循环。出于表达上的方便,我们把循环结构中的“一条语句/复合语句”称为循环体。在表达式2 成立的情况下,并且在循环体执行完毕后,表达式3 才会被运算。表达式3 运算完毕后,再次运算表达式2,若表达式2 为真,则再执行一次循环体,然后再运算表达式3,接着再测试表达式2 的真假性……如下图所示:




基于这些特性,表达式1 常用于对某个(些)变量赋初始值,表达式2 常用于测试这个(些)变量是否满足特定的条件,而表达式3 常用于更新这个(些)变量的值。例如:

#Define ARR_SIZE 10

Int I;

Int Arr[ARR_SIZE] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

/* 输出数组中所有元素的值 */

For ( I = 0; I < ARR_SIZE; ++I )

Printf("%D
", Arr[I]);

上例中的 I = 0 只会被运算一次;仅当 I < ARR_SIZE 为真时才会进入循环体;循环体完成一次执行后才运算 ++I,接着再判断 I < ARR_SIZE 的真假性……每次进入循环体之前都要先判断 I < ARR_SIZE 的真假,如果第一次判断其真假性时就发现其为假,则循环体一次也不会被执行,也不会运算 ++I。

For 循环能做的,改用 While 循环也可以实现。与上面的 For 循环等价的 While 循环是:

I = 0;

While ( I < ARR_SIZE )

{

Printf("%D
", Arr[I]);

++I;

}

不过相比之下,在这种情况下,使用 For 循环要比 While 循环简练。

同理,While 循环能做的,For 循环也能胜任:

Int Guess = 0;

While ( Guess != 567 )

{

Printf("Guess What I Am: ");

Scanf("%D", &Guess);

}

等价的 For 循环为:

Int Guess = 0;

For ( ; Guess != 567; ) // 这里看不懂没关系,后面会讲到

{

Printf("Guess What I Am: ");

Scanf("%D", &Guess);

}

不过相比之下,这里使用 While 循环看起来会比较舒服。

一般而言,如果一个循环在第一次进入循环体之前需要对某个(些)变量赋初值,并且在每次循环体结束后都要改变这个(些)变量的值,我们习惯上会使用 For 循环;如果一个循环不需要对变量赋初值,也不需要在每次循环体结束后都改这个(些)变量的值,使用 While 循环会更自然一点。

For 循环中的表达式1、表达式2 和表达式3 可以是任何合法的表达式,也可以省略。你可以省略这三个表达式中的任意一个或者两个甚至全部省略,不过分号(;)不能省略!注意,这里的 ; 不是语句结束标志,而是分隔符。如果省略表达式2,则表明这个 For 循环是一个无条件无限循环:

/* 无限循环 */

For ( I = 0; ; ++I )

{

/* Something Here */

}

上面这个 For 循环,I = 0 首先被运算一次,然后无条件进入循环体,执行完一次循环体后,接着运算 ++I,然后又再无条件执行循环体……

/* 全部省略,当然也是无限循环 */

For ( ; ; )

{

/* Something Here */

}

上面这个 For 循环,把所有三个表达式都省略了,不用说当然是无限循环。

/* 省略表达式1 */

For ( ; I != 10; ++I )

{

/* Something Here */

}




上面这个 For 循环,省略了表达式1,一开始执行时就判断 I != 10 是否为真,如果为真,则进入循环体,执行完一次循环体后,接着运算 ++I,然后再判断 I != 10 的真假性……如果 I != 10 为假则退出循环。

总之,For 循环是按照前面图示的顺序执行的,当然我们也可以根据实际情况省略那三个表达式中的任何表达式。这三个表达式都是完全表达式,所以它们之中任何一个表达式运算结束时,该表达式的所有副作用就都已经结束了。

前面讲逗号运算符时,曾经说过逗号运算符通常配合 For 循环使用,下面我们来看一个例子:

Int I, J, Limit;

Scanf("%D", &Limit);

For ( I = 0, J = 0; I <= Limit; ++I, J = J + 2 )

{

/* ... ... */

}

上例通过使用逗号运算符,在表达式1 中对多个变量赋初值,在表达式3 中修改多个变量的值。这是逗号运算符配合 For 循环使用时最常见的用法。

For 循环使用起来灵活多变,特别是配合逗号运算符使用时更是变幻无穷!以上列举的仅仅是 For 循环最常见的用法。
返回列表