4.1 while 语句、for 语句和 do while 语句
4.1.1 while 语句
- 格式:while (表达式) 语句
- 执行过程:当表达式为非 0 值时,执行 while 语句中的内嵌语句。
- 特点:先判断表达式,后执行语句。
注意:
- 循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。
- 在循环体中应有使循环趋向于结束的语句。如果无此语句,则i的值始终不改变,循环永不结束。
4.1.2 do-while 语句
-
格式:do 循环体语句 while (表达式);
-
执行过程:先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零(真) 时,返回重新执行循环体语句,如此反复,直到表达式的值等于 0 为止,此时循环结束。
-
特点:先执行循环体,然后判断循环条件是否成立。
![](http://qcdn.itcharge.cn/images/20210317154422.png]
4.1.3 for 语句
-
格式:for (表达式 1; 表达式 2; 表达式 3) 语句
-
执行过程:
-
先求解表达式 1。
-
求解表达式 2,若其值为真(值为非 0),则执 行for语句中指定的内嵌语句,然后执行下面第 3 步。若为假(值为 0),则结束循环,转到第(5)步。
-
求解表达式 3。
-
转回上面第 2 步骤继续执行。
-
循环结束,执行 for 语句下面的一个语句。
-
注意:
- for 语句的一般形式中的 "表达式 1" 可以省略,此时应在 for 语句之前给循环变量赋初值。注意省略表达式 1 时,其后的分号不能省略。如
for( ; i <= 100; i++) sum = sum + i;
执行时,跳过"求解表达式 1" 这一步,其他不变。- 如果表达式 2 省略,即不判断循环条件,循环无终止地进行下去。也就是认为表达式 2 始终为真。例如:
for( i = 1; ; i++) sum = sum + i;
表达式 1 是一个赋值表达式,表达式 2 空缺。它相当于:i = 1; while(1) { sum = sum + 1; i++; }
- 表达式 3 也可以省略,但此时程序设计者应另外设法保证循环能正常结束。如:
for( i = 1; i <= 100; ) {sum = sum + i; i++; }
在上面的 for 语句中只有表达式 1 和表达式 2,而没有表达式 3。i++ 的操作不放在 for 语句的表达式 3 的位置处,而作为循环体的一部分,效果是一样的,都能使循环正常结束。- 可以省略表达式 1 和表达式 3,只有表达式 2,即只给循环条件。如:
for( ; i <= 100; ) { sum = sum + i; i++; }
相当于while( i <= 100) { sum = sum + i; i++; }
在这种情况下,完全等同于 while 语句。可见 for 语句比 while 语句功能强,除了可以给出循环条件外,还可以赋初值,使循环变量自动增值等。- 3 个表达式都可省略,如:
for( ; ; ) 语句
相当于while(1) 语句
。即不设初值,不判断条件(认为表达式 2 为真值),循环变量不增值。无终止地执行循环体。- 表达式 1 可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式。如:
for ( sum = 0; i <= 100; i++) sum = sum + i;
表达式 3 也可以是与循环控制无关的任意表达式。
表达式 1 和表达式 3 可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。如:for( sum = 0, i = 1; i <= 100; i++) sum = sum+i;
或for( i = 0, j = 100; i <= j; i++, j--) k = i+j;
表达式 1 和表达式 3 都是逗号表达式,各包含两个赋值表达式,即同时设两个初值,使两个变量增值。
在逗号表达式内按自左至右顺序求解,整个逗号表达式的值为其中最右边的表达式的值。如:for( i = 1; i <= 100; i++, i++) sum = sum + i;
相当于for( i = 1; i <= 100; i = i+2) sum=sum+i;
。- 表达式一般是关系表达式(如 i <= 100)或逻辑表达式(如 a < b && x < y),但也可以是数值表达式或字符表达式,只要其值为非零,就执行循环体。
4.2 循环语句的选择和使用
- 四种循环(包括 goto型循环)都可以用来处理同一问题,一般情况下它们可以互相代替。但一般不提倡用 goto 型循环。
- 在 while 循环和 do...while 循环中,只在 while 后面的括号内指定循环条件,因此为了使循环能正常结束,应在循环体中包含使循环趋于结束的语句(如 i++,或 i = i+1 等)。
- for 循环可以在表达式 3 中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式 3 中。因此 for 语句的功能更强,凡用 while 循环能完成的,用 for 循环都能实现。
- 用 while 和 do…while 循环时,循环变量初始化的操作应在 while 和 do...while 语句之前完成。而 for 语句可以在表达式 1 中实现循环变量的初始化。
- while 循环、do..while 循环和 for 循环,都可以用 break 语句跳出循环,用 continue 语句结束本次循环。
- while 语句和用 do-while 语句的比较:
- 在一般情况下,用 while 语句和用 do-while 语句处理同一问题时,若二者的循环体部分是一样的,它们的结果也一样。但是如果 while 后面的表达式一开始就为假(0 值)时,两种循环的结果是不同的。
4.3 逗号表达式
4.4 循环语句的嵌套
- 一个循环体内又包含另一个完整的循环结构称为循环的嵌套。内嵌的循环中还可以嵌套
循环,这就是多层循环。 - 三种循环(while 循环、do-while 循环和 for 循环)可以互相嵌套。
4.5 循环中的非常规控制(break 和 contiunue)、goto 语句
4.5.1 break 语句
- 格式:
break;
- 用处:break 语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。
注意:
break 语句不能用于循环语句和 switch 语句之外的任何其他语句中。
4.5.2 continue 语句
- 格式:
continue;
- 用处:作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。
continue 语句和 break 语句的区别:
- continue 语句只结束本次循环,而不是终止整个循环的执行。
- break 语句则是结束整个循环过程,不再判断执行循环的条件是否成立。
4.5.3 goto 语句
- 格式:
goto 语句标号;
。语句标号用标识符表示,它的定名规则与变量名相同,即由字母、数字和下划线组成,其第一个字符必须为字母或下划线。
结构化程序设计方法主张限制使用 goto 语句,因为滥用 goto 语句将使程序流程无规律、可读性差。
一般来说,可以有两种用途:
- 与 if 语句一起构成循环结构;
- 从循环体中跳转到循环体外。
但是这种用法不符合结构化原则,一般不宜采用,只有在不得已时(例如能大大提高效率)才使用。
评论(没有评论)