原立濤,李鳳玲,邸抗
摘要:選擇語句在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語句嵌套時,幾乎所有的教科書均給出一句經(jīng)典的說明,嵌套關系的if語句之間的配對關系的判斷方法為最里邊的if和它下面的最近的else是一對。這段話,對初學者來說不太容易理解。其實,在研究if-else語句時,最重要的是先解決if語句之間是并列關系還是嵌套關系。如果是并列關系,if語句之間沒有包含關系,但if語句的執(zhí)行順序會影響變量的當前值。如果是嵌套關系,則要找到if和else之間的配對關系[1]。
由于在else語句中可以不斷地嵌套if-else語句,形成多層嵌套,因此可以將嵌套理解為從上到下逐一對if后的表達式進行檢測。當表達式為非0時,執(zhí)行相關語句,階梯部分被越過,如果所有表達式為假,則執(zhí)行最后的else語句。這里需要注意的是,else不能省,因為如果沒有else,情況可能完全不同。
看這樣一個簡單命題:
if (a
if (c= =d)y=0;
else y=1;
這三條語句是含義是什么呢?或許,我們可以得出這樣的結論,只要是滿足a小于b,并且滿足c與d相等條件的,結果y取值為零;不滿足的,y取值為1。看似正確,仔細推敲起來就會發(fā)現(xiàn)問題[2]。首先看一下語句中唯一的else是哪一個if對應的,雖然從書寫格式上看是與第一個if對應,其實不然,讓我們看一看N—S圖,就能很清楚地得到結論。所以,該語句所表達的是一個分段函數(shù),即:
很明顯,這里有關當a大于或等于b的結果是不存在的,亦即程序壓根就沒有對這方面做出說明,因此語句中的elsey=1是針對if (c= =d)y=0;而言,如果沒有弄清關系,則會將其他結果摻雜其中,造成錯誤。
如果再清晰一點,我們可以在程序的后面再加上elsey=1;語句,這樣兩個else對應各自的if就再清楚不過了。因此在嵌套的if-else語句中,如果內嵌的if省略了else部分,可能在語義上產(chǎn)生二義性,在實際的應用中要注意第一個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);
}
本例中出現(xiàn)了多個if 和else,而且它們之間存在包含與被包含關系,即嵌套關系。很明顯第一個格式輸出函數(shù)到第二個格式輸出函數(shù)之間的語句是作為第一個if語句的真實存在的結果。而一旦首個if語句為假,那么只能執(zhí)行最后面的輸出語句。這里,雖說第二個else是與前面的else if離得最近,但由于其前面大括號的存在,也就使它與上面所提及的if沒有了任何的關系,它也只能與最先出現(xiàn)的if配成一對,完成最外圍選擇的需要。這里還要特別注意的是第一個if語句的條件a>b>c判定的結果,往往錯誤的產(chǎn)生,均由該條件沒有判定好而引起[4]。N—S流程如圖2所示。
綜上所述,無論是并列關系,還是嵌套關系,對于純粹的選擇語句,稍加用心是可以區(qū)分好if與else的關系的,而實際的情況是if語句中往往摻雜著關系,或是邏輯表達式,再加上自增減表達式的存在,同時對于else的缺省,以及大括號的使用,都給程序的讀取造成一定的困難。因此需要我們進行經(jīng)常性地練習,這樣才能做到熟能生巧。
參考文獻
[1] 李澤中.C語言程序設計[M].北京:清華大學出版,2008.
[2] 劉玉英.C語言學習指南與解題[M].北京:中國水利水電出版社,2002.
[3] 朝樂門.名師講堂——二級C語言[M].北京:人民郵電出版社,2007.
[4] 郭俊鳳.C程序設計案例教程[M].北京:清華大學出版社,2009.