例如,有这么一个银行程序,需要确定银行客户是否有资格获得特别低利率的贷款。要符合资格,必须存在以下两个条件:
- 客户必须有工作。
- 客户必须刚从大学毕业(过去两年)。
图 1 显示了可用于此类程序的算法的流程图。
图 1 贷款资格审查流程图
如果在图 1 中遵循执行流程,则可以看到第一个被测试的表达式为 employed = 'Y'
。如果此表达式为 false,说明客户没有工作,则不需要执行任何其他测试,因为已经知道客户不符合特殊利率资格了,于是显示"You must be employed to qualify."(您必须有工作才能获得资格)。
但是,如果表达式为 true,则还需要测试第二个条件,也就是通过一个嵌套的决策结构来测试表达式 recentGrad = 'Y'
。如果第二个表达式为 false,则客户仍不符合条件。 于是显示"You must have graduated from college in the past two years to qualify."(您必须在过去两年内刚从大学毕业才能获得资格);如果第二个表达式为 true,则客户有资格获得特别低利率的贷款,显示结果为"You qualify for the special interest rate."(您有资格获得特别低利率贷款)。
下面的程序显示了与流程图的逻辑对应的代码。它在一个 if-else 语句中嵌套了另外一个 if-else 语句。
//This program determines whether a loan applicant qualifies for //a special loan interest rate. It uses nested if-else statements. #include <iostream> using namespace std; int main() { char employed,recentGrad; cout << "Are you employed?(Y/N) "; cin >> employed; cout << "Have you graduated from college in the past two years?(Y/N) "; cin >> recentGrad; //Determine the applicant1s loan qualifications if (employed == 'Y') { if (recentGrad == 'Y') // Employed and a recent grad { cout << "You qualify for the special interest rate./n"; } else // Employed but not a recent grad { cout << "You must have graduated from college in the past two years to qualify for the special interest rate./n"; } } else // Not employed { cout << "You must be employed to qualify for the "<<"special interest rate. /n"; } return 0; }
程序运行结果:
Are you employed?(Y/N) N
Have you graduated from college in the past two years?(Y/N) Y
You must be employed to qualify for the special interest rate.
仔细研究一下该程序。从第14 行开始的 if 语句测试了表达式 employed == 'Y'
。如果该表达式为 true,则执行从第 16 行开始的内部if语句。但是,如果该表达式的值为 false,则程序跳转到第 25 行,执行外部 else 块中的语句。
在调试使用嵌套 if-else 语句的程序时,重要的是要知道哪个 if 语句与 else 语句一起使用。正确匹配每个 else 与 if 的规则是这样的:一个 else 匹配与其最近的上一个 if 语句,并且该 if 语句没有自己的 else。当语句正确缩进时,这更容易看出来。
图 2 快速识别嵌套 if-else 语句中 if 和 else 的匹配
图 2 显示了类似于此程序第 14〜28 行的代码。它说明了每个 else 如何找到匹配的 if。这些视觉线索很重要,因为嵌套 if 语句可能非常长而复杂。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/22047.html