6.2 while 语句
while 语句是一个入口条件循环,其一般形式为:
while(epression)
statement
在 expression 变为假之前重复执行 statement。statement 可以是一个简单语句或一个复合语句。
6.2.1 终止 while 循环
当构造一个 while 循环时,循环中必须包含能改变判断表达式的值来使表达式的值最终变为假。
6.2.2 循环何时终止
只有在计算判断条件的值时才决定是终止循环还是继续执行。
6.2.3 while:入口条件循环
while 循环是使用入口条件的有条件循环,“有条件”是指:程序进入循环体之前必须满足入口条件。
6.2.4 语法要点
只有位于判断条件之后的单个语句(简单语句或复合语句)才是循环的部分。缩进不代表任何东西。
6.3 比较大小:使用关系运算符和表达式
关系运算符(ralational operator)被用来构成关系表达式(ralational expression)。
关系运算符(ralational operator) | |
运算符 | 含义 |
< | 小于 |
<= | 小于或等于 |
== | 等于 |
>= | 大于或等于 |
> | 大于 |
!= | 不等于 |
6.3.1 什么是真
对 C 来说,一个真表达式的值为1,一个假表达式的值为0。
6.3.2 还有什么是真
更一般地,所有的非零值都被认为是真,只有0被认为是假。
6.3.3 真值的问题
总而言之:关系表达式为真时值为1,关系表达式为假时值为0。通常使用关系表达式作为判断条件的语句可以使用任何表达式作为判断,非零值被认为是“真”,零值被认为是“假”。
6.3.4 新的 _Bool 类型
一个 _Bool 变量只可以具有值1(真)或0(假),如果将一个 _Bool 变量赋为一个非零的数值,变量就被设置为1。
6.3.5 关系运算符的优先级
关系运算符的优先级低于算术运算符,高于赋值运算符。其本身也分为两组不同的优先级。(关系运算符从左到右进行结合)
高优先级的组 | < <= > >= |
低优先级的组 | == != |
6.5 for 循环
for 循环将三个动作(初始化、测试、更新)都放在一起。它是一个入口条件循环,其一般形式为:
for(initialize;test;update)
statement
关键字 for 之后的圆括号内包含了由两个分号隔开的三个表达式。第一个表达式进行初始化(initialize),在 for 循环开始时执行一次。第二个表达式是判断条件(test),在每次执行循环前都要对它进行求值,当表达式为假时循环就结束了。第三个表达式(update)进行更新,在每次循环结束时进行计算。 用户拥有选择 for 循环的控制表达式的自由。
6.6 更多赋值运算符:+=、-=、*=、/= 和 %=
赋值运算符(assignment operator) | ||
运算符 | 实例 | 含义 |
= | gold = 20; | 将值20赋给变量 gold |
+= | apple += 5; | apple = apple + 5; |
-= | pen -= 5; | pen = pen - 5; |
*= | pineapple -= 5; | pineapple = pineapple - 5; |
/= | scores /= 5; | scores = scores / 5; |
%= | miles %= 5; | miles = miles % 5; |
6.7 逗号运算符
逗号运算符把两个表达式链接成一个表达式,并保证最左边的表达式最先计算,整个表达式的值是最右边表达式的值。逗号运算符拓展了 for 循环的灵活性,使用户可以在一个 for 循环中使用多个初始化或更新表达式。
6.8 退出条件循环:do while
do while 循环是一个退出条件循环,其一般形式为:
do
statement
while(expression);
因为 do while 语句是在执行循环之后才对判断条件进行检查,因此循环体中的语句至少被执行一次。在 expression 为假之前重复执行 statement。do while 循环本身是一个语句,它需要一个结束的分号。
6.9 选择哪种循环
通常选择入口条件循环更好一些,而入口条件循环是选择 for 循环还是 while 循环呢?
要使 for 循环看起来像 while 循环,可去掉它的第一个和第三个表达式。例如,下面两种写法是相同的:
for(;test;)
while(test)
要使 while 循环看起来像 for 循环,可以在它前面使用初始化并包含更新语句。例如,下面这两种写法相同:
for(initialize; test; update)
body;
/***********分隔符***********/
initialize;
while(test)
{
body;
update;
}
当循环涉及到初始化和更新变量时,使用 for 循环较为适当;而在其他条件下使用 while 循环更好一些。
6.10 嵌套循环
嵌套循环(nested loop)是指一个循环内的另一循环。嵌套循环中,内部循环在外部循环的每次单独循环中都执行其所有循环。
6.11 数组
一个数组就是线性存储的一系列相同类型的值。整个数组有一个单一的名字,单独的项或元素可以用一个整数索引来进行访问。用于标识数组元素的数字称为下标(subscript)、索引(index)或偏移量(offset)。数组元素是从0开始编号的,最后一个元素的下标比元素的个数小1。
6.12 定义具有返回值的函数
使用具有返回值的函数需要完成三个单独的步骤:
- 声明函数
- 调用函数
- 定义函数(需说明返回类型,并使用关键字 return 指示要返回的值)
6.13 关键概念
循环是一个强大的编程工具。在建立一个循环时应特别注意三个方面:
- 明确定义结束循环的条件
- 确保在循环判断中使用的值在第一次使用之前已经初始化
- 确保循环在每个周期中更新了判断值