嚴(yán)貴林
(湖南省常德市湘北職業(yè)中專學(xué)校 湖南常德 415300)
循環(huán)就是在一定條件下重復(fù)某操作。中職C語言的循環(huán)語法比較復(fù)雜,學(xué)生不易理解和把握。要想保證C語言教學(xué)的效果,教師就需要讓學(xué)生牢牢把握C語言的三種循環(huán)結(jié)構(gòu),突破學(xué)習(xí)的重點與難點。
第一種是while循環(huán)結(jié)構(gòu):while(表達(dá)式){語句序列}。
第二種是do…while循環(huán)結(jié)構(gòu):do{語句序列} while(表達(dá)式)。
第三種是for循環(huán)結(jié)構(gòu):for(表達(dá)式1;表達(dá)式2;表達(dá)式3){語句序列}。
第一,while循環(huán)結(jié)構(gòu)。如果表達(dá)式值為“真”(非零即為真),程序會執(zhí)行后面語句序列內(nèi)容;然后,第二次判斷該表達(dá)式的值,如果表達(dá)式的值為“真”,程序會繼續(xù)執(zhí)行此執(zhí)行語句塊里面的內(nèi)容。如此一直重復(fù)(循環(huán)),直到條件表達(dá)式的值為“假”(零),循環(huán)結(jié)束,然后,執(zhí)行程序中的下一條語句。
第二,do…while循環(huán)結(jié)構(gòu)。在此種循環(huán)結(jié)構(gòu)當(dāng)中,while的后面必須使用分號,無論while(表達(dá)式)的表達(dá)式值是否為“真”,程序都會執(zhí)行一次語句序列當(dāng)中的內(nèi)容。當(dāng)?shù)谝淮螆?zhí)行結(jié)束之后,程序會判斷該表達(dá)式的值是“真”還是“假”。若為“真”,則執(zhí)行第二次語句序列;若值為“假”,便會執(zhí)行程序中的下一條語句。
第三,for循環(huán)結(jié)構(gòu)。在這個循環(huán)過程中,先執(zhí)行表達(dá)式1(通常是初始化語句),之后,執(zhí)行表達(dá)式2(通常是條件的判斷語句),判斷表達(dá)式2的值是否為“真”,若為“真”,便執(zhí)行語言序列,最后,執(zhí)行表達(dá)式3。在下次的循環(huán)中,先執(zhí)行第二個表達(dá)式,判斷表達(dá)式2的值是否為“真”,若為“真”,便第二次執(zhí)行語言序列,若為“假”,結(jié)束循環(huán)。
從整體分析上來說,while屬于先判斷再執(zhí)行,do…while屬于先執(zhí)行再判斷。與前兩種循環(huán)結(jié)構(gòu)相比,for循環(huán)的語句表達(dá)更加緊湊。此種循環(huán)結(jié)構(gòu)適宜應(yīng)用在循環(huán)次數(shù)較為明確的條件下;while循環(huán)和do…while循環(huán)適合應(yīng)用在明確循環(huán)結(jié)束的條件、循環(huán)次數(shù)很難判斷的情況下。
通過分析C語言的循環(huán)環(huán)節(jié),我們可以發(fā)現(xiàn),while屬于先判斷再執(zhí)行,如果第1次的條件為假,那么,執(zhí)行的次數(shù)便是0,也就是至少執(zhí)行0次。同理,for循環(huán)結(jié)構(gòu)的最少執(zhí)行次數(shù)也為0。但是,do…while循環(huán)結(jié)構(gòu)比較特殊,屬于先執(zhí)行后判斷,因此,不論條件是真是假,都需要執(zhí)行1次。因此,do…while循環(huán)結(jié)構(gòu)的執(zhí)行次數(shù)最少為1次[2]。
雖然while循環(huán)結(jié)構(gòu)、do…while循環(huán)結(jié)構(gòu)和for循環(huán)結(jié)構(gòu)的格式不一樣,但是,三種循環(huán)結(jié)構(gòu)也存在一些相同的特點,都可以用來設(shè)計循環(huán)結(jié)構(gòu)程序。設(shè)計循環(huán)程序主要涉及以下3個關(guān)鍵因素:1.循環(huán)變量的賦初值;2.循環(huán)的條件;3.循環(huán)變量值的調(diào)整。循環(huán)語句能不能正確地執(zhí)行,主要受循環(huán)條件的影響。而循環(huán)條件主要與循環(huán)入口的初始化工作有關(guān),環(huán)環(huán)相扣。循環(huán)體當(dāng)中設(shè)置哪幾種語句,應(yīng)當(dāng)具體問題具體分析,確保前后呼應(yīng),符合邏輯,還需要保證循環(huán)可以終止,結(jié)論的準(zhǔn)確性有保障。在循環(huán)體的語句當(dāng)中,我們必須設(shè)置能夠調(diào)整循環(huán)結(jié)束的語句,保證循環(huán)不會無休無止地進(jìn)行下去,避免“死循環(huán)”。這是程序設(shè)計人員必須注意的問題。因此,為了確保循環(huán)的合理開展,我們必須要落實好循環(huán)的準(zhǔn)備工作,在執(zhí)行循環(huán)語句之前,合理設(shè)計循環(huán)的初始賦值[3]。
教師在課堂上可以對學(xué)生說:在正式上課之前,我們先來玩一個小游戲,看哪名同學(xué)可以在最短的時間里準(zhǔn)確計算出1×2×3×……×10等于多少。因為這道題目涉及的數(shù)字比較多,計算的結(jié)果比較大,如果一步、一步地相乘計算,很容易出錯,所以,教師可以引導(dǎo)學(xué)生使用計算機(jī)解決這個問題,讓學(xué)生思考計算機(jī)在計算這道復(fù)雜的數(shù)學(xué)題時究竟是如何工作的,然后,順利引出t循環(huán)語句。這樣的教學(xué)活動把數(shù)學(xué)問題當(dāng)作出發(fā)點,可以培養(yǎng)中職學(xué)生的數(shù)學(xué)計算思維,營造符合學(xué)生生活經(jīng)驗的教學(xué)情境,提升他們利用計算機(jī)技術(shù)處理實際生活問題的能力與水平,增強他們的信息意識。
教師可以問學(xué)生:在計算1+2+3+4+……+100時,是否存在一些比較巧妙的計算公式呢?如果只能按順序一步、一步地計算這些數(shù)字之和,那么,每次相加的數(shù)是否存在規(guī)律呢?為了便于學(xué)生理解,教師可以定義這樣的循環(huán)條件,從1到100遍歷,然后累加,輸出結(jié)果。這道題比較簡單,學(xué)生很容易上手寫出循環(huán):
教師可以對學(xué)生說:通過這道題目,我們不難發(fā)現(xiàn)for循環(huán)結(jié)構(gòu)的使用方法。當(dāng)然,我們還可以試著對該程序進(jìn)行改寫,使用while循環(huán)達(dá)到計算的目的。誰能夠理解和循環(huán)相關(guān)的實例呢?學(xué)生以小組為單位展開互相討論和交流,紛紛闡述自己的觀點[4]。
學(xué)生可以參照教材上while語句的基本使用方法,利用while語句改寫程序,同時,結(jié)合自身的知識積累,積極地合作交流、探討,列舉循環(huán)的實例,如統(tǒng)計班里所有學(xué)生的平均成績等。
在上述教學(xué)活動中,教師通過向?qū)W生演示實例,歸納并總結(jié)循環(huán)結(jié)構(gòu)的基本規(guī)律,帶領(lǐng)學(xué)生分析具體的問題。在自主探究環(huán)節(jié),學(xué)生可以結(jié)合所學(xué)的內(nèi)容展開自主創(chuàng)作,發(fā)揮他們的創(chuàng)意,列舉有關(guān)實例,深化自身對循環(huán)的理解和認(rèn)識。
教師可以為學(xué)生設(shè)計如下3個例題:1.應(yīng)用while循環(huán)輸出1到100之內(nèi)的全部整數(shù);2.使用do…while循環(huán)輸出1到100之內(nèi)的全部奇數(shù);3.應(yīng)用for循環(huán)輸出1到100之內(nèi)的全部偶數(shù)。教師可以利用數(shù)字化的資源,讓學(xué)生比較while循環(huán)、do…while循環(huán)及for循環(huán)結(jié)構(gòu),分析它們的表達(dá)式及執(zhí)行環(huán)節(jié)的相同和不同點,幫助學(xué)生明晰三種循環(huán)結(jié)構(gòu)的適用條件。教師還可以讓學(xué)生嘗試使用不同的方法解決相同類型的題目,發(fā)散思維,增強創(chuàng)新意識,促進(jìn)學(xué)生綜合能力的發(fā)展[5]。
教師可以對學(xué)生說:若想在計算機(jī)當(dāng)中輸出一個行數(shù)和列數(shù)均為3的正三角形,該怎樣實現(xiàn)?其實,這需要應(yīng)用循環(huán)的嵌套,即在一個循環(huán)當(dāng)中嵌套另一個完整的循環(huán)結(jié)構(gòu)。然后,教師讓學(xué)生自主預(yù)習(xí)教材上的內(nèi)容,了解嵌套的格式,再組織學(xué)生進(jìn)行小組討論,引導(dǎo)他們動手實踐,最終在計算機(jī)屏幕上輸出一個行數(shù)和列數(shù)相同的正三角形。在學(xué)生討論期間,教師可以讓學(xué)生思考下列問題:1.程序應(yīng)當(dāng)設(shè)置多少個循環(huán)變量?各個循環(huán)變量之間存在哪些關(guān)系?2.闡述算法的基本步驟,用流程圖的形式呈現(xiàn)出來,然后轉(zhuǎn)變?yōu)樗惴āV?,教師可以安排學(xué)生在小組內(nèi)展開交流和討論,分析問題,實際操作,探尋問題的解決方法。
教師的設(shè)疑與適度點撥引發(fā)了中職學(xué)生的高效思考,通過分組討論和合作學(xué)習(xí),突破了比較復(fù)雜的問題。這樣的實踐活動可以讓學(xué)生從原本的感性認(rèn)知上升為理性認(rèn)知,可以深化他們對循環(huán)結(jié)構(gòu)的認(rèn)識和理解。
首先,深入探究。通過以上步驟,學(xué)生已經(jīng)了解了循環(huán)結(jié)構(gòu)的特點及實現(xiàn)方法,也已經(jīng)有了一定的編寫循環(huán)語言的能力。因此,教師可以為學(xué)生設(shè)計幾個難度稍高的例子,引導(dǎo)學(xué)生展開深入探究。比如,輸入一個比3大的數(shù)n(n為整數(shù)),判斷n是不是素數(shù),或列出1到100以內(nèi)所有的素數(shù)。此種教學(xué)方式基于學(xué)生的認(rèn)知水平,提高了練習(xí)的難度,既可以幫助學(xué)生鞏固課堂所學(xué),又可以鍛煉他們的思維能力,加深他們對知識的印象[6]。
其次,總結(jié)和拓展。在中職計算機(jī)C語言教學(xué)中,循環(huán)結(jié)構(gòu)是教學(xué)的重點與難點。在實際的教學(xué)活動中,教師可以借助游戲?qū)崿F(xiàn)循環(huán)這一主題的導(dǎo)入,采取案例教學(xué)的方法,組織新課的教學(xué)活動,通過為學(xué)生展示比較簡單的實例,幫助學(xué)生理解while循環(huán)、do…while循環(huán)及for循環(huán)的基本內(nèi)容,之后,將項目教學(xué)法與合作學(xué)習(xí)法結(jié)合,討論C語言學(xué)習(xí)的難點(循環(huán)嵌套),實現(xiàn)知識的鞏固,同時起到拔高的作用,提高學(xué)生對新知識的掌握程度,提高中職生的計算思維。最后,教師引導(dǎo)中職學(xué)生展開深入探究,并積極地總結(jié)、拓展,合理處理生活中的一些常見問題,發(fā)散學(xué)生的思維,確保學(xué)生對各個知識點能夠融會貫通,真正達(dá)到學(xué)以致用的目標(biāo)[7]。
理論知識的學(xué)習(xí)效果必須要由具體的題目來檢驗。不同類型的題目有最適宜的循環(huán)結(jié)構(gòu)。這需要學(xué)生仔細(xì)判斷(如以下兩道題目)。
題目1 在計算機(jī)中隨意輸入15個數(shù),計算他們的和是多少?
通過分析,我們可以了解到這道題目的循環(huán)次數(shù)較為明確,因此,優(yōu)先選用for循環(huán)結(jié)構(gòu)。具體編程內(nèi)容如下:
題目2 在計算機(jī)中隨意輸入幾個數(shù),直至遇到2為止,求這幾個數(shù)的和是多少?
因為該循環(huán)的次數(shù)無法確定,所以,排除for循環(huán)。while循環(huán)屬于先判斷后執(zhí)行,do…while循環(huán)屬于先執(zhí)行后判斷。如果使用do…while循環(huán),且第一個數(shù)是2,那么,這個2會被計算到里面,不符合題意。因此,此道題適宜采取while循環(huán)[8]。編程內(nèi)容如下:
綜上所述,中職計算機(jī)C語言教學(xué)中的循環(huán)結(jié)構(gòu)是學(xué)生必須掌握的內(nèi)容。教師可以充分參考上述優(yōu)化教學(xué)的方法,提升學(xué)習(xí)的趣味性,降低學(xué)習(xí)難度,循序漸進(jìn)地提升學(xué)生的學(xué)習(xí)能力,確保C語言教學(xué)的有效性。