2.4.1 一个简单的分支机制(1)
有时需要让程序根据用户的输入,从两个备选行动中选择一个。例如,假定要设计程序来计算计时员工的周薪。假定公司的薪水制度是:每周工作40小时以内,按正常工资计算;超过40小时则算加班;超出的部分按正常工资的1.5倍计算。只要员工在一周内的工作时数大于或者等于40小时,则工资计算公式如下所示:
- rate * 40 + 1.5 * rate * (hours - 40)
但是,员工的工作时数也可能少于40小时。在这种情况下,上述公式会算出一个负值(要体会这一点,可将10代入hours,将1代入rate,并执行计算。结果表明,倒霉的员工领到的薪水为一个负数)。对于工作时间少于40小时的员工,正确的薪水计算公式其实是非常简单的,如下所示:- rate * hours
要同时支持这两种情况(工作时数大于或等于40小时,或者小于40小时),程序就必须能在这两个公式之间做出选择。为了计算员工的周薪,程序要采取的行动应该如下:- 判断(hours > 40)是否为true
如果是,就执行以下赋值语句:- gross_pay = rate * 40 + 1.5 * rate * (hours - 40);
如果不是,就执行以下赋值语句: - gross_pay = rate * hours;
有一个C++(www.cppentry.com)语句能专门执行这种分支行动。if-else语句会在两个备选行动之间做出选择。例如,前面讨论的周薪计算可用以下C++(www.cppentry.com)语句完成:- if (hours > 40)
- gross_pay = rate * 40 + 1.5 * rate * (hours - 40);
- else
- gross_pay = rate * hours;
图2.7所示的完整程序使用了这一语句。
|
| 图2.7 一个if-else语句 |
示范对话1
- Enter the hourly rate of pay: $20.00
- Enter the number of hours worked,
- rounded to a whole number of hours: 30
- Hours = 30
- Hourly pay rate = $20.00
- Gross pay = $600.00
示范对话2- Enter the hourly rate of pay: $10.00
- Enter the number of hours worked,
- rounded to a whole number of hours: 41
- Hours = 41
- Hourly pay rate = $10.00
- Gross pay = $415.00
图2.8总结了if-else语句的两种形式。第一种是最简单的if-else语句,第二种是2.4.4节将要讨论的主题。在第一种形式中,两个语句可以是任意可执行语句。Boolean_Expression是测试,求值结果要么为true,要么为false。通过检查这个表达式的值,就知道是否满足条件。上述if-else语句的Boolean_Expression是: - hours > 40
程序到达if-else语句时,实际执行的是两个内嵌语句之一。Boolean_Expression为true(满足条件),就执行Yes_Statement。Boolean_Expression为false(不满足条件),就执行No_Statement。注意,Boolean_Expression必须包含在圆括号内(这是C++(www.cppentry.com)的if-else语句的语法规则)。
|
| 图2.8 if-else语句的语法 |
布尔表达式是求值结果为true或false的表达式。if-else语句肯定包含一个Boolean_Expression。最简单的Boolean_Expression由两个表达式(比如数字或变量)构成,它们使用图2.9总结的某个比较操作符进行比较。注意有的操作符由两个符号构成,例如==,!=,<=和>=。注意,必须用双等号==表示相等,用!=表示不等。在两个符号构成的操作符中,两个符号之间不能有空格。编译器中用于将字符识别为C++(www.cppentry.com)名称和符号的那一部分在发现这样的一个操作符(例如!=)之后,会将程序员的真正意图传达给编译器的其他部分(例如!=意味着程序员希望测试"不等性")。执行if-else语句时,首先对要进行比较的两个表达式进行求值,再用操作符进行比较。如果比较结果为true,就执行第一个语句;否则执行第二个语句。
|
| 图2.8 if-else语句的语法 |
可用and(逻辑与)操作符(在C++(www.cppentry.com)中,表示为&&)合并两个比较。例如,假定x大于2,而且小于7,则以下布尔表达式为true(即条件满足):
- (2 < x) && (x < 7)
用&&连接两个比较时,只有两个比较的结果都为true(两个条件都满足),整个表达式才为true;否则,整个表达式为false。
"逻辑与"操作符&&
可用逻辑与(and)操作符&&将两个简单测试合并成一个更复杂的布尔表达式。
语法(针对使用&&的布尔表达式)
- (Comparison_1) && (Comparison_2)
示例(包含在一个if-else语句内) - if ( (score > 0) && (score < 10) )
- cout << "score is between 0 and 10.\n";
- else
- cout << "score is not between 0 and 10.\n";