
4.5 循环结构
循环结构存在于我们生活的每一个角落,小到钟表的走动,大到星辰转换。C++语言为了高效处理代码,也会使用大量的循环结构。C++语言提供的循环结构包括for循环语句、while循环语句及do-while循环语句。本节将详细讲解相关内容。
4.5.1 for循环语句
for循环语句也称for语句。for语句由初始条件、判断条件、迭代条件及循环体四部分组成,其语法形式如下。

❑ 初始条件:用于确定循环的起始数据的值。例如,从1数到5,起始条件就是值为1。
❑ 判断条件:用于确定结束循环的条件。例如,从1数到5,如果已经数到5,则结束数数字游戏。
❑ 迭代条件:用于改变循环条件的值,该条件会不断变化,推动循环进行。例如,数了1以后加1,这样就能数2。迭代条件规定每次数值的增加量。
❑ 循环体:用于指定具体的循环内容。例如,每天去上课学习是一个循环结构,学习的具体内容就是循环体。
for循环语句中的三个条件都可以由一个或多个表达式组成。如果使用多个表达式,则需要使用逗号运算符进行分隔,形式如下。

for循环语句从初始条件开始,根据判断条件的值进行选择。如果判断条件的值为真,进入循环体,执行循环体中的语句,然后进入迭代条件进行迭代,此时循环完成1次。紧接着进入第2次循环,重复第一次循环的逻辑顺序。如果判断条件的值为假,则停止循环,直接跳出整个for语句范围。for语句流程图如图4.10所示。

图4.10 for语句流程图
【示例4-9】下面使用for语句输出4行星号。

程序运行结果如下。

从运行结果中可以看出,循环体被重复执行了4次。
for循环语句中的初始条件与迭代条件可以省略,使用空语句替代,只保留判断条件,其语法形式如下。

这里的省略并不是真正的省略,而是将这两个条件放在其他地方进行编写。
【示例4-10】在for语句中省略初始条件与迭代条件。

程序运行结果如下。


从运行结果中可以看出,当初始条件与迭代条件放在其他位置时并不会影响运行结果。
4.5.2 while循环语句
while循环语句是指当条件成立时,执行指定语句,简单理解为先判断后执行。其语法形式如下。

while循环语句的判断条件可以为关系表达式或逻辑表达式,其作用是控制循环的次数。
注意:while循环语句和for循环语句的简化写法十分类似。
while循环语句在每一次循环时都需要做一次判断,如果结果为假,则跳出循环;如果结果为真,则进入循环,流程图如图4.11所示。

图4.11 while循环语句流程图
【示例4-11】下面计算10以内所有数的和。

程序运行结果如下。

从运行结果中可以看出,表达式i〈=10用于控制循环次数。i的值在每次循环后都会加1,当大于10之后跳出循环。
4.5.3 do-while循环语句
do-while循环语句是指先执行后判断,只要条件为真就一直重复执行循环体,直到条件为假。do-while循环语句是while循环语句的一种变化形式,其语法形式如下。

判断条件可以是关系表达式(隐式关系表达式)或逻辑表达式,判断条件不可以省略。一定要注意while判断条件后的分号,这个分号代表do-while循环语句的结束。do-while循环语句流程图如图4.12所示。

图4.12 do-while循环语句流程图
注意:do-while循环语句与while循环语句的主要区别是,do-while循环语句的循环体至少被执行一次,而while循环语句先判断条件,有可能一次也不执行。
【示例4-12】下面使用do-while循环语句输出10以内的数字。


程序运行结果如下。

代码while (i 〈 10);中,i是小于10而不是小于等于10。这是因为如果是小于等于10,则会循环11次而不是10次。
4.5.4 多重循环嵌套使用
多重循环嵌套使用是指将多种循环结构嵌套使用,最常见的就是九九乘法表的输出。
【示例4-13】输出九九乘法表。

程序运行结果如下。


在代码中内层的for循环用于输出每行的内容,外层for循环用于控制换行和每行输出几个等式。通过内、外层的for循环搭配,实现了九九乘法表的输出。