張國欽++宋偉++馬俊興
摘要:循環(huán)結構是程序設計的三種基本結構之一,在程序設計中具有重要地位。分析了C語言中的循環(huán)語句,指出了各自所屬的循環(huán)結構,并對它們的區(qū)別和適用場合做了分析。
關鍵詞:循環(huán)結構;while語句;do...while語句;for語句
中圖分類號:TP312 文獻標識碼:A 文章編號:1009-3044(2017)04-0063-02
Analysis of Loop Statements in C Language
ZHANG Guo-qin, SONG Wei, MA Jun-xing
(The Center of the Modern Educational Technology, Henan Finance and Banking College, Zhengzhou 450046, China)
Abstract: Loop structure is one of the three basic structures of program design, which has an important position in programming. This paper analyzes the loop statements in C language, and points out their respective loop structures, and analyzes their differences and application occasions.
Key words: loop structure; while statement; do...while statement; for statement
1 背景
1966年,Bohra和Jacopini提出了程序設計的三種基本結構:順序結構、選擇結構和循環(huán)結構。循環(huán)結構將一些指令組合起來構成循環(huán)體,當滿足某種條件時反復執(zhí)行。循環(huán)結構包括當型循環(huán)結構和直到型循環(huán)結構。C語言中實現(xiàn)循環(huán)結構的循環(huán)語句包括if...goto語句、while語句、do...while語句和for語句。if...goto語句因為不符合結構化程序設計的要求現(xiàn)在已經(jīng)很少有人使用,while語句和for語句很好理解,而do...while語句卻讓很多人疑惑,不知道它到底屬于當型循環(huán)結構還是直到型循環(huán)結構。網(wǎng)上也經(jīng)常有人提出這樣的疑問,而很多教材對此解釋得不甚清晰,更增加了C語言初學者的困惑。本文將試圖厘清這些循環(huán)語句及它們所屬的循環(huán)結構,并對它們的區(qū)別和適用場合做一分析。
2 循環(huán)結構的分類
2.1 當型(while型)循環(huán)結構
當型循環(huán)結構如圖1(a)所示。它的執(zhí)行過程為:先判斷條件c1,如果c1成立,則執(zhí)行循環(huán)體A,執(zhí)行完A后,再判斷條件c1,如果c1成立,再執(zhí)行循環(huán)體A,如此反復執(zhí)行循環(huán)體A,直到某一次條件c1不成立為止,此時不執(zhí)行循環(huán)體A,而從b點離開循環(huán)結構。當型循環(huán)結構的主要特點是當循環(huán)條件成立時執(zhí)行循環(huán)體,當循環(huán)條件不成立時離開循環(huán)體。
2.2 直到型(until型)循環(huán)結構
直到型循環(huán)結構如圖1(b)所示。它的執(zhí)行過程為:先執(zhí)行循環(huán)體A,然后判斷條件c2是否成立,如果c2不成立,則繼續(xù)執(zhí)行循環(huán)體A,然后再對條件c2作判斷,如果條件c2仍然不成立,則繼續(xù)執(zhí)行循環(huán)體A,如此反復執(zhí)行A,直到給定的條件c2成立為止,此時不再執(zhí)行循環(huán)體A,從b點離開循環(huán)結構。直到型循環(huán)結構的主要特點是當循環(huán)條件成立時離開循環(huán)體,當循環(huán)條件不成立時執(zhí)行循環(huán)體。
很容易看出,如果當型循環(huán)結構和直到型循環(huán)結構執(zhí)行相同的功能,那么循環(huán)條件c1和c2之間必然存在關系:c2=
3 C語言中的循環(huán)語句
C語言中的循環(huán)語句包括if...goto語句、while語句、do...while語句和for語句。我們用這幾個語句分別來求解一個簡單的問題(記為問題a):求n的階乘n!的值(假定n
3.1 if...goto語句
goto語句為無條件轉移語句,一般格式為goto 語句標號;當goto語句和if語句結合就可以實現(xiàn)有條件的轉移,從而實現(xiàn)循環(huán)結構。用if...goto語句求問題a的代碼為:
當型循環(huán)結構 直到型循環(huán)結構
3.2 while語句
while語句的一般格式為:while(條件表達式)循環(huán)體;。while語句的特點是:
1)當條件表達式為真時,執(zhí)行循環(huán)體;為假時,離開循環(huán)體。因此,while語句屬于當型循環(huán)結構。
2)先判斷條件表達式,后執(zhí)行循環(huán)體。
用while語句求解問題a的代碼為:
do...while語句的特點是先執(zhí)行一次循環(huán)體,然后判斷條件表達式,如果為真,則繼續(xù)執(zhí)行循環(huán)體;如果為假,則離開循環(huán)體。因此,do...while語句屬于當型循環(huán)結構,雖然它從形式上來說很像直到型循環(huán)結構。do...while語句和pascal語言中的repeat...until語句很像,都是先執(zhí)行循環(huán)體,再做條件判斷,但repeat...until語句是條件為真時離開循環(huán)體,屬于直到型循環(huán)結構。
用do...while語句求解問題a的代碼為:
假如do...while語句是直到型循環(huán)結構,那么它的條件表達式和while語句的條件表達式一定是相反的,如果把do...while語句中的條件i<=n改成i>n,則得不到想要的結果。do...while語句和while語句的區(qū)別是當循環(huán)條件一開始就為假時,do...while語句執(zhí)行1次循環(huán)體,while語句執(zhí)行0次。
3.4 for語句
for語句的一般格式為:
for(表達式1;表達式2;表達式3)循環(huán)體;
其中表達式1為初始化語句,一般情況下包含循環(huán)變量的初始化,僅在循環(huán)開始時執(zhí)行一次。表達式2為循環(huán)條件表達式,用來判定是否繼續(xù)循環(huán)。在每次執(zhí)行循環(huán)體前先執(zhí)行此表達式,值為真時繼續(xù)執(zhí)行循環(huán)體,值為假時離開循環(huán)體。因此for語句屬于當型循環(huán)結構。表達式3作為循環(huán)的調整,一般情況下是改變循環(huán)變量的值,使循環(huán)體執(zhí)行若干次之后循環(huán)條件表達式的值為假,從而離開循環(huán)體。
對for語句的說明:
1)表達式1~3都可以省略。省略表達式1以后,表達式1要放到for語句之前以完成對循環(huán)變量的初始化;省略表達式2后,表示循環(huán)條件永遠為真;省略表達式3后,表達式3要放到循環(huán)體內。
2)for語句可以改寫為while語句的形式:
表達式1;
3.5 幾種循環(huán)語句的比較
1)while語句和do...while語句一般用于處理循環(huán)條件已知,循環(huán)次數(shù)不確定的情況。
2)for語句一般用于處理循環(huán)次數(shù)確定的情況,也可以用于循環(huán)次數(shù)不確定而只給出循環(huán)條件的情況,它完全可以代替while語句。因此for語句更為靈活,功能也更為強大。
3)if...goto語句既可以實現(xiàn)當型循環(huán)結構,也可以實現(xiàn)直到型循環(huán)結構,不過現(xiàn)在已經(jīng)不常用。while語句、do...while語句和 for語句均屬于當型循環(huán)結構。
4)這幾種語句可以用來處理同一問題,可以相互替代,沒有實質上的差別。
4 結束語
循環(huán)結構在程序設計中占有重要地位,只有弄清楚基本概念,熟練掌握各種循環(huán)語句的基本用法,才能寫出可讀性更強,執(zhí)行效率更高的程序。
參考文獻:
[1] 譚浩強. C程序設計[M]. 4版.北京: 清華大學出版社, 2010: 26-27.
[2] 李瑞華.C語言循環(huán)語句淺析[J]. 電腦知識與技術, 2011, 7(26): 6423-6424.