- 相關(guān)推薦
淺談C語(yǔ)言中循環(huán)結構的教學(xué)方法
摘 要 循環(huán)結構是結構化程序設計中的三種基本結構之一,也是程序設計的基礎。但是,對于初學(xué)者來(lái)說(shuō),循環(huán)結構與人類(lèi)日常的思維習慣不同,較難掌握。本文用幾個(gè)例子闡述了在《C語(yǔ)言程序設計》課程中循環(huán)結構的教學(xué)方法,這些方法在日常授課中取得了較好的效果。 關(guān)鍵詞 C語(yǔ)言;結構化程序設計;循環(huán)結構;效率1 引言 順序、分支、循環(huán)是結構化程序設計的三種基本結構,所以在高級語(yǔ)言程序設計課程中,掌握這三種結構是學(xué)好程序設計的基礎。而循環(huán)結構是這三者中最復雜的一種結構,幾乎所有的程序都離不開(kāi)循環(huán)結構。在C語(yǔ)言中,循環(huán)結構主要是由for和while、do-while語(yǔ)句實(shí)現的,其中for語(yǔ)句的應用更為普遍一些。for語(yǔ)句的用法對于有程序設計經(jīng)驗的學(xué)生來(lái)說(shuō)輕而易舉,但是對于那些沒(méi)有經(jīng)驗的初學(xué)者來(lái)說(shuō),難度卻不小。本文從初學(xué)者的角度,闡述了C語(yǔ)言中循環(huán)結構幾種典型應用的實(shí)現方法。2 用循環(huán)結構輸出幾何圖形 輸出簡(jiǎn)單的幾何圖形(如圖1),是循環(huán)結構的典型應用之一。對于這一類(lèi)型的題目,初學(xué)者往往直接采用一條或若干條輸出語(yǔ)句printf完成,這樣雖然可以完成題目要求,但是很顯然缺乏靈活性,不符合程序設計的思想。按照正常的程序設計思想,應該先分析圖形的構成,找出其中的規律:如圖1(a)中的實(shí)心三角形,每一行由若干個(gè)空格、星號和一個(gè)回車(chē)換行符構成,將行號、空格數和星號數分別設為i、m和n,則可以形成下表:
表1 實(shí)心三角形的構成表
行號i 空格數m 星號數n 1 4 1 2 3 3 3 2 5 4 1 7 5 0 9 分析表1,可以得出行號i與空格數m、星號數n如下的數學(xué)關(guān)系:m=5-i,n=2×i-1 則實(shí)心三角形的構成規律可以描述為:第i行由(5-i)個(gè)空格和(2×i-1)個(gè)星號和一個(gè)回車(chē)符構成。把行號i作為for語(yǔ)句的循環(huán)變量,輸出圖形程序的主要部分見(jiàn)程序段1。采用上面的方法,可以使學(xué)生很容易編寫(xiě)出類(lèi)似的程序,其中的關(guān)鍵在于讓學(xué)生找出圖形中行號與每一行的空格數以及星號數的關(guān)系(對于圖1(b)、(c)需要把圖形分成幾個(gè)部分,再分析其中的構成規律),這需要學(xué)生數學(xué)方面的知識,非編程本身的范疇了。for(i=1;i<=5;i++) { /*輸出(5-i)個(gè)空格;*/ for(m=1;m<=5-i;m++) printf(“ ”); /*輸出(2*i-1)個(gè)星號;*/ for(n=1;n<=2*i-1;n++) printf(“*”); /*輸出回車(chē)符;*/ printf(“\n”); } 程序段1 實(shí)心三角形的主要程序
3 數組中循環(huán)結構的應用
在C語(yǔ)言中,for語(yǔ)句經(jīng)常與數組相結合,用于實(shí)現數組元素的賦值、輸入與輸出。對于初學(xué)者來(lái)說(shuō),更習慣于用順序結構的語(yǔ)句來(lái)實(shí)現(如圖2左)。我們將圖2左的幾條語(yǔ)句作比較,可以看出在這5條語(yǔ)句中,不同的只有數組下標,那么就可以將這5條語(yǔ)句合并成一條for語(yǔ)句,將數組下標換成for語(yǔ)句的循環(huán)變量i,而i的值從0增加到 4。按照f(shuō)or語(yǔ)句的基本語(yǔ)法規則可以很容易的寫(xiě)出圖2右的for語(yǔ)句。
同樣,對于下面這個(gè)輸出二維數組元素的例子,也可以用上述辦法實(shí)現,不過(guò)轉換過(guò)程比上例要復雜一些:經(jīng)過(guò)對比圖3左側方框中順序結構的12條語(yǔ)句,可以發(fā)現也是只有數組下標在變化,但是由于是二維數組,行下標和列下標同時(shí)都在變化,很顯然不能直接用一條簡(jiǎn)單的for語(yǔ)句來(lái)實(shí)現(不是絕對不可以實(shí)現,后面將會(huì )看到)。但是我們可以把這12條語(yǔ)句細分一下,3條語(yǔ)句為一組,而在同一組中的語(yǔ)句只有列下標在變化,這時(shí)可以采用上例中的方法,將列下標都用循環(huán)變量j來(lái)代替,得到圖3右上的形式。再次對比圖3右上的4條for語(yǔ)句,不同的是行下標,同樣用新的循環(huán)變量i來(lái)代替,合并后得到圖3右下最終二重for循環(huán)的語(yǔ)句。
在上例中,常規的思路都采用二重for循環(huán)與二維數組相結合來(lái)實(shí)現對數組元素的訪(fǎng)問(wèn),實(shí)際上也可以使用一重for循環(huán)來(lái)實(shí)現:無(wú)論如何變化,我們可以先確定的是,輸出語(yǔ)句printf肯定要執行12次,如果用一重for循環(huán),那么循環(huán)變量i的值就要從0遞增到11。再分析數組行下標m和列下標n與循環(huán)變量i之間的關(guān)系,很顯然:i=m*3+n,按照整數除法的思想,行下標m恰好是循環(huán)變量i整除3后的商,而列下標n恰好是循環(huán)變量i整除3后的余數,即:
m=i/3,n=i%3從而可以寫(xiě)出下面的for語(yǔ)句:for(i=0;i<12;i++)printf(“%d”,a[i/3][i%3]);4 循環(huán)結構中的效率問(wèn)題 對于程序設計的初學(xué)者來(lái)說(shuō),往往以完成題目要求的功能為目的,程序的執行效率是最容易忽略的一個(gè)問(wèn)題。在循環(huán)結構中,具體表現為循環(huán)體的執行次數。例如,一個(gè)經(jīng)典的素數判定問(wèn)題。在數學(xué)中素數如下定義:素數即指那些大于1,且除了1和它本身外,不能被其它任何數整除的數。根據這一定義,初學(xué)者很容易編寫(xiě)出如下程序段2的程序:int isprime(int n) { int i; for(i=2;i<n;i++) if(n%i==0) return 0; return 1; } 程序段2 判斷素數的程序段 上面的程序,完全可以實(shí)現題目要求的功能,初學(xué)者往往滿(mǎn)足于此。但是當對for循環(huán)的執行次數進(jìn)行分析時(shí),我們發(fā)現:當n不是素數時(shí),沒(méi)有任何問(wèn)題;而當 n是素數時(shí),循環(huán)體就要執行(n-2)次,而實(shí)際上是不需要這么多次的。根據數學(xué)的知識,可以將次數降為n/2或n的算術(shù)平方根,這樣可以大大減少循環(huán)體的執行次數,提高程序的效率。
程序的執行效率是編程中時(shí)刻需要考慮的問(wèn)題,也是程序設計中的基本要求。這需要許多算法方面的知識,對于初學(xué)者來(lái)說(shuō),要求可能過(guò)高,但是我們在講授過(guò)程中要注意向學(xué)生灌輸這種思想,從學(xué)習之初就要打下良好的基礎,尤其是類(lèi)似上面例子中這樣顯而易見(jiàn)的情況,可以提醒學(xué)生在編制完一道程序以后,檢驗一下,是否還有可優(yōu)化的地方,這對以后進(jìn)一步高級編程的學(xué)習都是必要的。5 結束語(yǔ) 以上這些,都是本人在授課過(guò)程中的一些體會(huì ),可能比較膚淺,但是從初學(xué)者的角度來(lái)看,卻是必要的。如何讓一名初學(xué)者盡快擺脫日常的思維定式,更加透徹地理解和掌握程序設計中的基本思想,領(lǐng)會(huì )程序設計的精髓,是高級語(yǔ)言程序設計這門(mén)課程在講授過(guò)程中,應該時(shí)刻注意的問(wèn)題。希望本文能在這方面起到一點(diǎn)作用,同時(shí)望廣大同仁多多指教。參考文獻[1] 譚浩強. C 語(yǔ)言程序設計(第二版)[M]. 北京:清華大學(xué)出版社,1999[2] 蘇運霖譯. 計算機程序設計藝術(shù)第1 卷 基本算法[M]. 北京:國防工業(yè)出版社,2002【淺談C語(yǔ)言中循環(huán)結構的教學(xué)方法】相關(guān)文章:
淺談結構素描教學(xué)11-29
循環(huán)結構的程序設計方法(一)03-07
淺談?dòng)h句子結構差異03-11
淺談混凝土結構的耐久性03-16
淺談結構轉換層的應用及施工03-06
淺談藥學(xué)論文的結構及存在的問(wèn)題03-18
淺談生態(tài)價(jià)值論視野下的循環(huán)經(jīng)濟03-19
淺談跨國公司組織結構06-07
淺談材料的結構和邏輯聯(lián)系12-10