摘要:循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計中的三種基本結(jié)構(gòu)之一,在程序設(shè)計中占有重要地位。但是,對于初學(xué)者來說,循環(huán)結(jié)構(gòu)的學(xué)習(xí)難度也是三大結(jié)構(gòu)之最,較難掌握。該文從初學(xué)者的角度,闡述了C語言中循環(huán)結(jié)構(gòu)幾種典型應(yīng)用的實現(xiàn)方法,這些方法在日常授課中取得了較好的效果。
關(guān)鍵詞:C語言;結(jié)構(gòu)化程序設(shè)計;循環(huán)結(jié)構(gòu);效率
中圖分類號:TP312 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2009)05-1146-02
On the C Language Cycle of the Structure Teaching Methods Research
PANG Yan-fang
(Jincheng Vocational and Technical College, Jincheng 048026,China)
Abstract: Cycle structure is a structured program design in one of three basic structures, in the program design occupies an important position. However, for beginners, the cycle structure of the three structures is the difficulty of studying the most difficult to master. This article from the beginner's point of view, expounded the C language in the cycle structure of several typical applications implementation methods that have made the medium of instruction in day-to-day good results.
Key words:C language; Structured Programming; Cycle structure; Efficiency
1 引言
順序、分支、循環(huán)是結(jié)構(gòu)化程序設(shè)計的三種基本結(jié)構(gòu),所以在高級語言程序設(shè)計課程中,掌握這三種結(jié)構(gòu)是學(xué)好程序設(shè)計的基礎(chǔ)。而循環(huán)結(jié)構(gòu)是這三者中最復(fù)雜的一種結(jié)構(gòu),幾乎所有的程序都離不開循環(huán)結(jié)構(gòu)。正因為這種原因,循環(huán)結(jié)構(gòu)已經(jīng)成為學(xué)習(xí)語言課的較大障礙。如何將循環(huán)結(jié)構(gòu)學(xué)會掌握牢?已成為廣大語言學(xué)習(xí)者所面臨的共同問題。針對這個問題,該文從初學(xué)者的角度,闡述了C語言中循環(huán)結(jié)構(gòu)幾種典型應(yīng)用的實現(xiàn)方法。
在C語言中,循環(huán)結(jié)構(gòu)主要是由for和while、do-while語句實現(xiàn)的,其中for語句的應(yīng)用更為普遍一些。for語句的用法對于有程序設(shè)計經(jīng)驗的學(xué)生來說輕而易舉,但是對于那些沒有經(jīng)驗的初學(xué)者來說,難度卻不小。
2 用循環(huán)結(jié)構(gòu)輸出乘法“九九表”
輸出簡單圖形是循環(huán)結(jié)構(gòu)的典型應(yīng)用之一。對于這一類型的題目,初學(xué)者往往直接采用一條或若干條輸出語句printf完成,這樣雖然可以完成題目要求,但是很顯然缺乏靈活性,不符合程序設(shè)計的思想。按照正常的程序設(shè)計思想,應(yīng)該先分析圖形的構(gòu)成,找出其中的規(guī)律:如圖1中的乘法“九九表”,每一行由若干個數(shù)字和一個回車換行符構(gòu)成,將行號和每行所對應(yīng)的數(shù)的個數(shù)分別設(shè)為i和j,則可以形成表1。
分析表1,可以得出行號i與每行對應(yīng)的數(shù)的個數(shù)j如下的數(shù)學(xué)關(guān)系:每行數(shù)的個數(shù)j就是所對應(yīng)的行數(shù)i
則乘法“九九表”的構(gòu)成規(guī)律可以描述為:第i行由i個數(shù),且數(shù)的規(guī)律是1*Ii 2*i 3*i 、、、i*i,行尾有一個一個回車符構(gòu)成。把行號i作為for語句的循環(huán)變量,輸出圖形程序段。
main( )
{ int i,j;
for(i=1;i<=9;i++)
{for(j=1;j<=i;j++)
printf(\"%4d\",i*j); }
printf(\"\\");
}
3 數(shù)組中循環(huán)結(jié)構(gòu)的應(yīng)用
3.1 一維數(shù)組中的應(yīng)用
在C語言中,for語句經(jīng)常與數(shù)組相結(jié)合,用于實現(xiàn)數(shù)組元素的賦值、輸入與輸出。對于初學(xué)者來說,更習(xí)慣于用順序結(jié)構(gòu)的語句來實現(xiàn)(如圖2左)。我們將圖2左的幾條語句作比較,可以看出在這5條語句中,不同的只有數(shù)組下標(biāo),那么就可以將這5條語句合并成一條for語句,將數(shù)組下標(biāo)換成for語句的循環(huán)變量i,而i的值從0增加到4。按照for語句的基本語法規(guī)則可以很容易的寫出圖2右的for語句。
3.2 二維數(shù)組中的應(yīng)用
對于輸出一個4*3列數(shù)組元素的值,也可以使用上述辦法實現(xiàn),不過轉(zhuǎn)換過程比上例要復(fù)雜一些:經(jīng)過對比圖3左側(cè)方框中順序結(jié)構(gòu)的12條語句,可以發(fā)現(xiàn)也是只有數(shù)組下標(biāo)在變化,但是由于是二維數(shù)組,行下標(biāo)和列下標(biāo)同時都在變化。我們可以把這12條語句細(xì)分一下,3條語句為一組,而在同一組中的語句只有列下標(biāo)在變化,這時可以采用上例中的方法,將列下標(biāo)都用循環(huán)變量j來代替,得到圖3右上的形式。再次對比圖3右上的4條for語句,不同的是行下標(biāo),同樣用新的循環(huán)變量i來代替,合并后得到圖3右下最終二重for循環(huán)的語句。
4 循環(huán)結(jié)構(gòu)中的效率問題
在數(shù)學(xué)中素數(shù)如下定義:素數(shù)即指那些大于1,且除了1和它本身外,不能被其它任何數(shù)整除的數(shù)。根據(jù)這一定義,我們很容易的編寫出如下程序:
int isprime(int n)
{int i;
for(i=2;i if(n%i==0) return 0; return 1; } 當(dāng)對FOR循環(huán)的執(zhí)行次數(shù)進(jìn)行分析時,我們發(fā)現(xiàn):當(dāng)n不是素數(shù)時,沒有任何問題;而當(dāng)n是素數(shù)時,循環(huán)體就要執(zhí)行(n-2)次,而實際上是不需要這么多次的。根據(jù)數(shù)學(xué)的知識,可以將次數(shù)降為n/2或n的算術(shù)平方根,這樣可以大大減少循環(huán)體的執(zhí)行次數(shù),提高程序的效率。 程序的執(zhí)行效率是編程中時刻需要考慮的問題,在循環(huán)結(jié)構(gòu)中,具體表現(xiàn)為循環(huán)體的執(zhí)行次數(shù)。我們在講授過程中要注意向?qū)W生灌輸這種思想,從學(xué)習(xí)之初就要打下良好的基礎(chǔ)。 5 結(jié)束語 學(xué)以致用,是我們學(xué)習(xí)知識的目的。C語言中循環(huán)結(jié)構(gòu)的運用往往是很多初學(xué)者所困惑的,他們往往不知道在什么情況下要使用循環(huán)結(jié)構(gòu)和為什么要使用循環(huán)結(jié)構(gòu)。更加透徹地理解和掌握程序設(shè)計中的基本思想,領(lǐng)會程序設(shè)計的精髓,是我們在講授高級語言程序設(shè)計這門課程中,應(yīng)該時刻注意的問題。以上這些,都是本人在教學(xué)過程中的一些體會,可能比較膚淺,但是從初學(xué)者的角度來看,卻是必要的。希望該文能在這方面起到一點作用,同時希望廣大同仁多多指教。 參考文獻(xiàn): [1] 譚浩強. C 語言程序設(shè)計(第二版)[M].北京:清華大學(xué)出版社,1999. [2] 蘇運霖,譯. 計算機程序設(shè)計藝術(shù)第1卷:基本算法[M].北京:國防工業(yè)出版社,2002.