第3章 判断和循环
本章要点
如何比较数据值
如何基于比较结果来改变程序的执行序列
如何使用逻辑运算符和表达式
如何处理多选情形
如何在程序中编写并使用循环
3.1 比较数据值
如果不希望作出武断的决定,那么我们需要一种比较机制。这种机制涉及一些新的运算符,即关系运算符。因为计算机中的所有信息最终都表示为数值(第2章中已学习过如何用数字代码来表示字符信息),所以数值比较实际上是所有判断的本质。总共有6个用于比较两个值的基本运算符,如表3-1所示。
表 3-1
|
<
|
小于
|
<=
|
小于等于
|
|
>
|
大于
|
>=
|
大于等于
|
|
==
|
等于
|
!=
|
不等于
|
"等于"比较运算符有两个连续的"="号,它与仅由一个"="号组成的赋值运算符不同。以赋值运算符代替"等于"比较运算符是常见的错误,因此务必注意这个潜在的错误根源。
表3-1中的各个运算符都对两个操作数的值进行比较,然后返回一个bool类型值:比较结果为真返回true,为假则返回false。我们看几个简单的比较示例,就能明白这些运算符的工作过程。操作数可以是变量、字面值或表达式。假设已经创建了两个整型变量i和j,二者的值分别是10和-5,那么表达式
- i > j i != j j > -8 i <= j + 15
都将返回true。
再假设已经定义了下面两个变量:
- char first = 'A', last = 'Z';
下面几个比较示例使用了这两个字符变量:
- first == 65 first < last 'E' <= first first != last
上面4个表达式都涉及ASCII码值的比较。第一个表达式返回true,因为first初始化为'A',而'A'的ASCII码值与十进制数65相等。第二个表达式检查first的值'A'是否小于last的值'Z'。如果在附录B中查看这两个字符的ASCII码,就将注意到大写字母是用65~90的数值升序表示的,即65表示'A',90表示'Z',因此第二个比较表达式同样返回true。第三个表达式返回false,因为'E'大于first的值。最后一个表达式返回true,因为'A'肯定不等于'Z'。
考虑几个稍微复杂些的数值比较示例。下列语句定义了4个变量:
- int i = -10, j = 20;
- double x = 1.5, y = -0.25E-10;
观察下面这些表达式:
- -1 < y j < (10 - i) 2.0*x >= (3 + y)
可以看出,在比较时可以用结果为数值的表达式作为操作数。如果与第2章的运算符优先表进行核对,就会发现上面的圆括号都不是必需的,但这些圆括号确实有助于使表达式更清楚。第一个表达式为真,因此返回bool值true。变量y的值是-0.000 000 000 025,因此大于-1。第二个比较返回false,因为表达式10-i的值是20,与j相等。第三个表达式返回true,因为表达式3+y略微小于3。
可以使用关系运算符来比较任何基本类型或枚举类型的数值,因此现在所需的就是切实可行的、用比较结果改变程序行为的办法。