
3.4 嵌套选择结构
选择结构让你有可能处理许多选择性的问题。例如,如果你正在创建一个商务网站,你就可能要基于几种可能计算运费。如果消费者的购买额超过一定数量或者输入某个优惠代码,那么送货可能是免费的。运费选项可能包括陆运、空运和快递服务。运费也可能取决于包裹的运送距离和包裹的重量。对于这种情况,你需要做出许多判断。一个客户可能购买了价值$150.00的商品而要求免除陆运费,而另外一个客户可能购买相同商品却愿意支付快递费。因此一旦确定了商品的费用,还要做出许多判断。一个住在美国的客户与另一个住在欧洲的客户,尽管购买的商品一样,但运费很可能是不同的。要编写依赖前面判断结果的判断代码,我们可以使用嵌套选择结构。图3-4展示了计算运费例子所需要的一部分判断。
多路选择结构的一般语法如下:
图3-4 嵌套选择结构
可以嵌套任意多的if...结构或者if...else结构,然而嵌套结构太多会令人费解。我们将学习其他有效方法处理需要许多判断的程序。在有些情况下,嵌套结构是有意义的,例3.5就展示了这样一种情形。
例3.5 嵌套选择结构 在这个例子中,询问用户是否对两个数进行加或者减运算。如果用户决定进行加法运算,就将这两个数相加。由于在做加法时不管哪一个数在前其结果都是一样的,所以不需要进一步的判断。但是如果要对两个数进行减法运算,其答案就取决于哪一个数作为减数。因此,第二个选择结构嵌套在第一个选择结构的else子句中。
3.4节检查点
3.16 举出一个可能在程序中使用嵌套选择结构的例子,要求这个例子在本节没有使用过。
3.17 根据需要为下列函数添加一个选择结构:如果用户刚好16岁,就继续问今天是否是他的生日,如果是就将信息“Happy Birthday!”连同关于驾驶学习执照资格的信息一起显示。
3.18 编写一个函数,让用户录入两个数。然后问用户是否想要对这两个数进行相乘或者相除。如果用户选择除法运算,就要包括一个嵌套的if结构提示用户哪一个是除数和被除数。如果用户选择乘法运算,程序就乘这两个数。然后,程序将显示这两个数的商或乘积。注意:在表达式a÷b=c中,a是被除数,b是除数,而c是商。在表达式a×b=c中,c是乘积。
3.19 修改下列代码,使得当用户答错时就显示信息“Your answer is incorrect”。