第5章 循环和关系表达式
本章内容包括:
for 循环。
表达式和语句。
递增运算符和递减运算符:++和−−。
组合赋值运算符。
复合语句(语句块)。
逗号运算符。
关系运算符:>、>=、= =、<=、<和!=。
while 循环。
typedef 工具。
do while 循环。
字符输入方法 get( )。
文件尾条件。
嵌套循环和二维数组。
计算机除了存储数据外,还可以做很多其他的工作。可以对数据进行分析、合并、重组、抽取、修改、推断、合成以及其他操作。有时甚至会歪曲和破坏数据,不过我们应当尽量防止这种行为的发生。为了发
挥其强大的操控能力,程序需要有执行重复的操作和进行决策的工具。当然,C++提供了这样的工具。事
实上,它使用与常规 C 语言相同的 for 循环、while 循环、do while 循环、if 语句和 switch 语句,如果读者
熟悉 C 语言,可粗略地浏览本章和第 6 章;但浏览速度不要过快,否则会错过 cin 如何处理字符输入。这
些程序控制语句通常都使用关系表达式和逻辑表达式来控制其行为。本章将讨论循环和关系表达式,第 6
章将介绍分支语句和逻辑表达式
## for语句
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f1B6JjsL-1678100599716)(2023-03-05-22-42-05.png)]
5.2 while 循环
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YgrP304O-1678100599717)(2023-03-05-22-57-28.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0hKNLPrJ-1678100599718)(2023-03-05-22-57-41.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hMI3plQt-1678100599718)(2023-03-05-22-59-10.png)]
错误的标点符号:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GUyuZRtY-1678100599719)(2023-03-05-22-59-29.png)]
延时循环
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A87MyWjf-1678100599719)(2023-03-05-23-01-04.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iOHGW4hT-1678100599719)(2023-03-05-23-02-22.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HQJoYyXh-1678100599720)(2023-03-05-23-02-40.png)]
5.3 do while 循环
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cF07XH3s-1678100599720)(2023-03-05-23-04-12.png)]
5.6 嵌套循环和二维数组
如本章前面所述,for 循环是一种处理数组的工具。下面进一步讨论如何使用嵌套 for 循环中来处理二
维数组。
首先,介绍一下什么是二维数组。到目前为止,本章使用的数组都是一维数组,因为每个数组都可以看作
是一行数据。二维数组更像是一个表格—既有数据行又有数据列。例如,可以用二维数组来表示 6 个不同地
区每季度的销售额,每一个地区占一行数据。也可以用二维数组来表示 RoboDork 在计算机游戏板上的位置。
C++没有提供二维数组类型,但用户可以创建每个元素本身都是数组的数组。例如,假设要存储 5 个
城市在 4 年间的最高温度。在这种情况下,可以这样声明数组:int maxtemps[4][5]
该声明意味着 maxtemps 是一个包含 4 个元素的数组,其中每个元素都是一个由 5 个整数组成的数组
(参见图 5.5)。可以将 maxtemps 数组看作由 4 行组成,其中每一行有 5 个温度值。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SRzzNezI-1678100599720)(2023-03-05-23-06-47.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jp1OkQW0-1678100599721)(2023-03-05-23-10-12.png)]
5.7 总结
C++提供了 3 种循环:for 循环、while 循环和 do while 循环。
如果循环测试条件为 true 或非零,则循环将重复执行一组指令;如果测试条件为 false 或 0,则结束循环。for 循环和 while 循环都是入口条件循环,
这意味着程序将在执行循环体中的语句之前检查测试条件。do while 循环是出口条件循环,这意味着其将
在执行循环体中的语句之后检查条件。
每种循环的句法都要求循环体由一条语句组成。然而,这条语句可以是复合语句,也可以是语句块(由
花括号括起的多条语句)。
关系表达式对两个值进行比较,常被用作循环测试条件。关系表达式是通过使用 6 种关系运算符之一
构成的:<、<=、= =、>=、>或! =。关系表达式的结果为 bool 类型,值为 true 或 false。
许多程序都逐字节地读取文本输入或文本文件,istream 类提供了多种可完成这种工作的方法。如果 ch
是一个 char 变量,则下面的语句将输入中的下一个字符读入到 ch 中:
然而,它将忽略空格、换行符和制表符。下面的成员函数调用读取输入中的下一个字符(而不管该字
符是什么)并将其存储到 ch 中:
成员函数调用 cin.get( )返回下一个输入字符—包括空格、换行符和制表符,因此,可以这样使用它:
cin.get(char)成员函数调用通过返回转换为 false 的 bool 值来指出已到达 EOF,而 cin.get( )成员函数
第 5 章 循环和关系表达式 163
调用则通过返回 EOF 值来指出已到达 EOF,EOF 是在文件 iostream 中定义的。
嵌套循环是循环中的循环,适合用于处理二维数组。