3.4 循环结构 , S8 o1 [+ {- a' y" b. I
1for语句 2 }1 A4 t& E6 \$ H& y* G. A9 q
for语句是C+ +中最常用且功能最强的循环语句,其语法格式如下:
% \9 c# ]2 R) L+ x for(<表达式1>;<表达式2>;<表达式3>) # U5 d, ~' V; ~" k: a h& B& I, v
<语句>
" t5 N& w9 _) V1 h) n# W& m" N 其中,for为关键字;<表达式1>是for循环的初始化部分,它一般用来设置循环控制变量的初始值;<表达式2>是for循环的条件部分,它是用来判定循环是否继续进行的条件;<表达式3>是for循环的增量部分,它一般用于修改循环控制变量的值;<语句>称为for循环的循环体,它是要被重复执行的代码行,for循环体可以是单条语句,也可以是由花括号包围起来的复合语句。 1 H* C& N: g$ B/ ^) h
for语句的执行过程是:
) R8 k" t: s5 Z- t4 j5 y+ x6 y! | (1)计算<表达式1>的值;
! M" Z3 p$ m ^' J3 g (2)计算<表达式2>的值,如果此值不等于0(即循环条件为“真”),则转向步骤(3);如果此值等于0(即循环条件为“假”),则转向步骤(5);
5 V) \8 \% X; E& g% p. ~' Q m( c8 i (3)执行一遍循环体<语句>:
3 ^, N5 [! @1 ^ (4)计算<表达式3>的值,然后转向步骤(2);
) G0 q3 g8 u8 ^$ L( f/ n (5)结束for循环。
2 _( n3 o/ z2 r' _2 K" S C+ +中for语句的书写格式非常灵活,这主要表现为:
+ }) m+ b1 V( U2 F5 Q/ P3 z (1)<表达式1>可以是变量声明语句,即循环控制变量可在其中定义。
# _5 @2 ^ A6 d3 E- x Z: Q! \ (2)<表达式1>可以省略。这时,应在for语句之前给循环控制变量赋初始值。注意:省略<表达式1>时,其后的分号不能省略。 ; Y% t0 r! x- }2 F) u4 t7 C
(3)<表达式2>可以省略。这时,for语句将不再判断循环条件,循环会无限次地执行下去。这种情况通常称为“死循环”。
; Z% c: T6 U0 f8 b) Q9 `8 X$ T (4)<表达式3>可以省略。这时,应在循环中对循环控制变量进行递增或递减操作,以确保循环能够正常结束。 6 p6 u0 `2 A* M# u/ V8 {
(5)三个表达式可同时省略。这时,for语句显然也是一个“死循环”。 ) `' F/ }" Q3 a% v
(6)<表达式1>、<表达式2>和<表达式3>都可以是任何类型的C+ +表达式。
5 b9 p* Z' U' E# j8 a 2while语句
5 k6 o+ K" P" g2 Q0 \, p while语句是一种形式较为简单的循环语句,其语法格式如下: ) l" L9 K r8 x: ?
while(<表达式>)<语句>其中,while为关键字:<表达式>是while循环的条件,它用于控制循环是否继续进行;<语句>称为while循环的循环体,它是要被重复执行的代码行;while循环体可以是单条语句,也可以是由花括号括起来的复合语句。实际上,while语句是for语句省略掉表达式1和表达式3的特殊情况。
/ l. b7 y$ F w" k+ P( P* O while语句的执行过程是:
4 i. z! `% {) f4 j% O% [! H (1)计算<表达式>的值,如果此值不等于0(即循环条件为“真”),则转向步骤(2);如果此值等于0(即循环条件为“假”),则转向步骤(4);
3 ~" g3 n/ C3 { (2)执行一遍循环体<语句>; 0 H( w/ ], |/ D/ f U: ]) E
(3)转向步骤(1);
9 @. N+ u% i8 b6 G2 ]9 r9 K e (4)结束while循环。
% D6 g2 p( {- T- z i 从中可以看出,while语句将在<表达式>成立的情况下重复执行<语句>;如果在第一次进入while循环时<表达式>就不成立,则<语句>一次也不会执行。
. U8 C8 {. G! G( K 注意:
3 h, p5 i7 R) e( |- A (1)由于while语句中缺少对循环控制变量进行初始化的结构,因此在使用while循环之前对循环控制变量进行初始化显得很重要。 # _' `3 b. c6 ^' I* X6 L9 t
(2)在while循环体中不要忘记对循环控制变量的值进行修改,以使循环趋向结束。
; T/ F: O* _$ B7 v 3do…while语句; do…while语句也是一种循环语句,它的功能类似于while语句,只是将循环的判定条件移到了循环体之后,其语法格式如下:
& u* h$ a1 |1 \! C/ ` do<语句>while(<表达式>); 1 W! n4 z9 m9 [6 [2 h( e7 F
其中,do和while为关键字;<语句>称为do…while循环的循环体,它是要被重复执行的代码行,do……while循环体可以是单条语句,也可以是由花括号包围起来的复合语句;<表达式>是do……while循环的条件,它用于控制循环是否继续进行。
& R h1 s2 @' N ~& n 注意:在do…while语句中最后的分号不能丢掉,它用来表示do……while语句的结束。
' ?+ |! n0 `1 @: g/ _ do……while语句的执行过程是:
* |. f- F! u \8 U0 J1 T) o (1)执行一遍循环体<语句>;
" y5 L3 B' B8 A9 Q/ m. p (2)计算<表达式>的值,如果此值不等于0(即循环条件为“真”),则转向步骤(1);如果此值等于0(即循环条件为“假”),则转向步骤(3);
, a+ l n$ D, c5 N3 n (3)结束do…while循环。
* Z) K1 i9 m6 B" I! [ 注意: ; P: e9 C3 Q2 K% n! a* q
(1)在使用do…while循环之前同样需要对循环控制变量进行初始化;在do…while循环中仍然不要忘记对循环控制变量进行修改,以使循环趋向结束,避免死循环的发生。
/ A4 j9 e. J1 u+ ? (2)do…while循环与while循环的不同之处在于:do…while循环的循环体在前,循环条件在后,因此do…while循环体在任何条件下(即使不满足循环条件)都至少被执行一次。而while循环条件在前,循环体在后,当条件不满足时,循环体有可能一次也不会执行。这一点正是在构造循环结构时决定使用while语句还是do…while语句的重要依据。 " r, ~, _) r& e
循环的嵌套 . Y/ Q( {6 ~1 I0 @; Y* ^
在一个循环结构中又完整地包含着另一个循环结构称为循环的嵌套。C+ +中三种类型的循环语句都可以相互嵌套,并且嵌套的层数没有限制。程序设计中有许多问题需要使用循环结构的嵌套来解决。 |