C语言中if—else语句的嵌套分析

2012-04-29 00:44原立涛,李凤玲,邸抗
软件工程 2012年11期
关键词:嵌套选择分析

原立涛,李凤玲,邸抗

摘要:选择语句在C语言程序设计中广泛使用,本文分析了C语言中选择语句之间的关系,尤其对if-else语句的嵌套关系进行了阐述说明,在分析复杂嵌套关系时,强调else与if的对应关系,从而可以更好地理解程序,得出准确的结果。

关键词:选择;嵌套;分析

Select statement in C language program is widely used in design, this paper analyzes the C language statements in the relationship between the choice, especially for if-else statement nested relationship between explains, on the analysis of the complex nested relations, with emphasis on the corresponding shut if else, so as to better understand the program, draws accurate results.

在谈及if语句嵌套时,几乎所有的教科书均给出一句经典的说明,嵌套关系的if语句之间的配对关系的判断方法为最里边的if和它下面的最近的else是一对。这段话,对初学者来说不太容易理解。其实,在研究if-else语句时,最重要的是先解决if语句之间是并列关系还是嵌套关系。如果是并列关系,if语句之间没有包含关系,但if语句的执行顺序会影响变量的当前值。如果是嵌套关系,则要找到if和else之间的配对关系[1]。

由于在else语句中可以不断地嵌套if-else语句,形成多层嵌套,因此可以将嵌套理解为从上到下逐一对if后的表达式进行检测。当表达式为非0时,执行相关语句,阶梯部分被越过,如果所有表达式为假,则执行最后的else语句。这里需要注意的是,else不能省,因为如果没有else,情况可能完全不同。

看这样一个简单命题:

if (a

if (c= =d)y=0;

else y=1;

这三条语句是含义是什么呢?或许,我们可以得出这样的结论,只要是满足a小于b,并且满足c与d相等条件的,结果y取值为零;不满足的,y取值为1。看似正确,仔细推敲起来就会发现问题[2]。首先看一下语句中唯一的else是哪一个if对应的,虽然从书写格式上看是与第一个if对应,其实不然,让我们看一看N—S图,就能很清楚地得到结论。所以,该语句所表达的是一个分段函数,即:

很明显,这里有关当a大于或等于b的结果是不存在的,亦即程序压根就没有对这方面做出说明,因此语句中的elsey=1是针对if (c= =d)y=0;而言,如果没有弄清关系,则会将其他结果掺杂其中,造成错误。

如果再清晰一点,我们可以在程序的后面再加上elsey=1;语句,这样两个else对应各自的if就再清楚不过了。因此在嵌套的if-else语句中,如果内嵌的if省略了else部分,可能在语义上产生二义性,在实际的应用中要注意第一个else与哪一个if匹配[3]。

再比如嵌套的例子:

main()

{int a=8,b=6,c=4,d=2;

if (a>b>c)

{printf(“%d\n”,d);

else if (c-2>=d)

printf(“%d\n”,d+1);}

else

printf(“%d\n”,d+2);

}

本例中出现了多个if 和else,而且它们之间存在包含与被包含关系,即嵌套关系。很明显第一个格式输出函数到第二个格式输出函数之间的语句是作为第一个if语句的真实存在的结果。而一旦首个if语句为假,那么只能执行最后面的输出语句。这里,虽说第二个else是与前面的else if离得最近,但由于其前面大括号的存在,也就使它与上面所提及的if没有了任何的关系,它也只能与最先出现的if配成一对,完成最外围选择的需要。这里还要特别注意的是第一个if语句的条件a>b>c判定的结果,往往错误的产生,均由该条件没有判定好而引起[4]。N—S流程如图2所示。

综上所述,无论是并列关系,还是嵌套关系,对于纯粹的选择语句,稍加用心是可以区分好if与else的关系的,而实际的情况是if语句中往往掺杂着关系,或是逻辑表达式,再加上自增减表达式的存在,同时对于else的缺省,以及大括号的使用,都给程序的读取造成一定的困难。因此需要我们进行经常性地练习,这样才能做到熟能生巧。

参考文献

[1] 李泽中.C语言程序设计[M].北京:清华大学出版,2008.

[2] 刘玉英.C语言学习指南与解题[M].北京:中国水利水电出版社,2002.

[3] 朝乐门.名师讲堂——二级C语言[M].北京:人民邮电出版社,2007.

[4] 郭俊凤.C程序设计案例教程[M].北京:清华大学出版社,2009.

猜你喜欢
嵌套选择分析
基于嵌套Logit模型的竞争性选址问题研究
隐蔽失效适航要求符合性验证分析
电力系统不平衡分析
电力系统及其自动化发展趋势分析
“互联网+”时代新闻采访教学的困境与出路
飞机燃油系统对多路输入信号源选择的方法
会计计量属性的选择及应用
一种基于区分服务的嵌套队列调度算法
无背景实验到有背景实验的多重嵌套在电气专业应用研究
连续批加工过程中嵌套自相关数据的控制图设计