沈涵飛,劉 正
(蘇州工業(yè)園區(qū)服務(wù)外包職業(yè)學(xué)院 信息工程學(xué)院,江蘇 蘇州 215123)
高職C語言循環(huán)結(jié)構(gòu)單元的教學(xué)設(shè)計(jì)
沈涵飛,劉 正
(蘇州工業(yè)園區(qū)服務(wù)外包職業(yè)學(xué)院 信息工程學(xué)院,江蘇 蘇州 215123)
循環(huán)結(jié)構(gòu)是“C語言程序設(shè)計(jì)”課程的重點(diǎn)和難點(diǎn)?;诙嗄杲虒W(xué)實(shí)踐,該單元的教學(xué)設(shè)計(jì)采用了任務(wù)驅(qū)動(dòng)的方式來展現(xiàn)不同循環(huán)結(jié)構(gòu)的應(yīng)用場景,從簡單任務(wù)開始,圍繞示例,階梯式地引入各種循環(huán)語句,并將難點(diǎn)分散到不同的教學(xué)單元。教學(xué)實(shí)踐表明這種方式取得了較好的教學(xué)效果。
循環(huán)結(jié)構(gòu);階梯式教學(xué);教學(xué)設(shè)計(jì);C語言
“C語言程序設(shè)計(jì)”是信息工程相關(guān)專業(yè)的重要基礎(chǔ)課,通常安排在大一講授。課程開設(shè)的主要目的是使學(xué)生理解計(jì)算思維,建立算法意識(shí),借助C程序的知識(shí)載體,能編寫結(jié)構(gòu)化程序來解決問題。C語言是結(jié)構(gòu)化程序設(shè)計(jì)的代表語言,在順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)這3種基本結(jié)構(gòu)中,循環(huán)結(jié)構(gòu)是最復(fù)雜的,而且和數(shù)組、函數(shù)、結(jié)構(gòu)體等內(nèi)容關(guān)系非常密切。
基于多年的高職C語言課程的教學(xué)實(shí)踐,作者對(duì)循環(huán)結(jié)構(gòu)單元的教學(xué)內(nèi)容和過程進(jìn)行了重構(gòu)和優(yōu)化,在實(shí)踐中取得了很好的成效。
當(dāng)前的C語言教材側(cè)重于知識(shí)傳授的系統(tǒng)性和邏輯性,教師通常按部就班地進(jìn)行講解,先花大量的時(shí)間系統(tǒng)地講授各循環(huán)語句的語法規(guī)則、執(zhí)行過程,然后再舉出相應(yīng)的示例。
這種教學(xué)方法本意是期望學(xué)生能夠掌握基礎(chǔ)理論后,能夠舉一反三,靈活應(yīng)用所學(xué)知識(shí)解決問題。但如果把這種方法用于抽象思維較弱的高職學(xué)生,往往適得其反。理論學(xué)習(xí)能力本就不強(qiáng)的高職學(xué)生由于消化困難,很容易喪失興趣,產(chǎn)生畏難情緒,很多同學(xué)干脆就放棄了課程的學(xué)習(xí)。
根據(jù)高職學(xué)生的認(rèn)知特點(diǎn),在循環(huán)結(jié)構(gòu)的教學(xué)設(shè)計(jì)上,直接采用任務(wù)驅(qū)動(dòng)的方式來展現(xiàn)循環(huán)結(jié)構(gòu)的重要使用場景,強(qiáng)調(diào)for循環(huán)適合表示序列,在學(xué)習(xí)初期學(xué)生采用“依樣畫葫蘆”的方式就能完成程序編寫,完全不需要理解for循環(huán)的執(zhí)行流程。接著從有限序列到無窮序列,很自然的引入break語句來改變循環(huán)的執(zhí)行流程。然后強(qiáng)調(diào) for循環(huán)和 while循環(huán)的等價(jià)性,在沒有序列或者序列并不明顯的情況下使用while循環(huán)和流程圖表示來解決其他循環(huán)結(jié)構(gòu)的問題。
對(duì)于循環(huán)結(jié)構(gòu)中的非重點(diǎn)內(nèi)容如loop語句和continue語句,由于這些內(nèi)容實(shí)際應(yīng)用相對(duì)較少,作教學(xué)中做了弱化處理,避免給學(xué)生太多選擇而使學(xué)生陷入迷茫。把循環(huán)結(jié)構(gòu)中的嵌套循環(huán)放在數(shù)組單元進(jìn)行介紹,給學(xué)生的學(xué)習(xí)提供了適當(dāng)?shù)木彌_,避免難點(diǎn)過于集中而使學(xué)生產(chǎn)生畏難情緒。
同時(shí),在整個(gè)課程的教學(xué)中,課程組使用“C/C++程序設(shè)計(jì)自動(dòng)評(píng)測系統(tǒng)”的練習(xí)平臺(tái),學(xué)生編寫的程序可以由練習(xí)平臺(tái)直接給出評(píng)判結(jié)果。在循環(huán)結(jié)構(gòu)的教學(xué)中,更是布置了大量基礎(chǔ)練習(xí)題來幫助學(xué)生熟練掌握循環(huán)的應(yīng)用。下面是循環(huán)結(jié)構(gòu)教學(xué)設(shè)計(jì)和實(shí)施的具體步驟。
2.1 介紹循環(huán)的最簡單應(yīng)用—簡單重復(fù)
循環(huán)最簡單的應(yīng)用是控制語句塊重復(fù)執(zhí)行的次數(shù),循環(huán)變量在循環(huán)體內(nèi)部并不使用。采用的例題是輸出10行的“good good study,day day up”。建議學(xué)生編寫的循環(huán)代碼為 for(i=1;i≤=10;i=i+1),鼓勵(lì)學(xué)生改變各個(gè)參數(shù)后運(yùn)行程序,通過觀察結(jié)果來幫助理解程序。
2.2 使用for循環(huán)來表示序列
循環(huán)尤其是for循環(huán)最典型的應(yīng)用是表示序列,例如語句 for(i=1;i≤=10;i=i+1)表示的序列是 {1,2,3,…,10},語句 for(c='a';c≤='z';c=c+1)表示字符序列 {a,b,… ,z}。通過分析常用的循環(huán)表達(dá)方式,歸納了常用序列表示,如表1所示。
表1 常用序列和 for循環(huán)的對(duì)應(yīng)關(guān)系
在這個(gè)環(huán)節(jié),采用的案例是計(jì)算 1+2+3+…+100 的值。這個(gè)例子可以寫成最原始也是最容易理解的順序結(jié)構(gòu);通過歸納可改寫成sum=sum+i,其中i依次遍歷序列{1,2,3,…,100},這個(gè)步驟學(xué)生也容易理解;在最后一個(gè)環(huán)節(jié),學(xué)生可以根據(jù)常用序列的for循環(huán)表示寫出對(duì)應(yīng)的for語句,從而完成程序的編寫。這幾個(gè)步驟如圖1所示。
在學(xué)生學(xué)習(xí)循環(huán)的初期,采用這種教學(xué)方式可以避免陷入“必須先理解for循環(huán)的執(zhí)行機(jī)制,再編寫代碼”的困境中,讓學(xué)生相對(duì)容易地寫出程序代碼,增強(qiáng)學(xué)習(xí)C語言的信心。
for循環(huán)for(i=1;;i++)可以表達(dá)無窮序列,在這種情況下,程序會(huì)永遠(yuǎn)運(yùn)行下去嗎?此時(shí)引入改變循環(huán)正常執(zhí)行流程的break語句就顯得非常自然了。對(duì)于改變循環(huán)正常執(zhí)行流程的另一個(gè)語句continue,在初期教學(xué)時(shí)作了弱化處理,因?yàn)閎reak語句是必須的,而continue語句是可有可無的,完全可用 if-else 語句來代替。
2.3 將for循環(huán)改寫成while和do-while循環(huán)(見圖2)
在介紹while循環(huán)時(shí),一開始并沒有引入新的例子,還是使用同一個(gè)例子:計(jì)算 1+2+3+…+100 的值。向?qū)W生特別強(qiáng)調(diào)for循環(huán)和while循環(huán)在使用上是完全等價(jià)的,可以相互改寫,特別設(shè)計(jì)了圖2中的中間過渡環(huán)節(jié)來強(qiáng)調(diào)兩者的語義上的等價(jià)性,并要求學(xué)生把for循環(huán)表達(dá)改寫成while循環(huán)表達(dá),然后再改寫回for循環(huán)表達(dá)。這種教學(xué)方式有利于消除學(xué)生對(duì)于循環(huán)的陌生感,不會(huì)增加心理上的負(fù)擔(dān)。
在學(xué)生掌握了for循環(huán)和while循環(huán)的代碼相互改寫后,再要求學(xué)生完成while循環(huán)和do-while循環(huán)的相互改寫,從而向?qū)W生全面介紹了結(jié)構(gòu)化程序設(shè)計(jì)中最常使用的3種基本循環(huán)結(jié)構(gòu)。
2.4 介紹流程圖、while循環(huán)及其適用場合
循環(huán)結(jié)構(gòu)有for循環(huán)、while循環(huán)和do-while循環(huán)這3種基本表達(dá)方式。for循環(huán)適合表達(dá)序列,并不需要使用流程圖來幫助理解,循環(huán)體至少要執(zhí)行一次的情況采用do-while循環(huán),其他情況建議采用while循環(huán)。
while循環(huán)和do-while循環(huán)用流程圖來表達(dá)是非常直觀的。在介紹流程圖時(shí),采用的例題是3n+1問題:對(duì)于任意大于1的自然數(shù),若n為奇數(shù),則將n變?yōu)?n+1,否則變?yōu)閚的一半,經(jīng)過若干次這樣的變換,一定會(huì)使n變?yōu)?,例如3→10→5→16→8→4→2→1。程序要求的輸入是n,要求程序輸出變換的次數(shù)。
如圖3所示,基本的當(dāng)型流程圖很適合表達(dá)3n+1問題,再把流程圖轉(zhuǎn)化成代碼也很直觀,易于理解。
圖1 累加問題從順序結(jié)構(gòu)遷移到循環(huán)結(jié)構(gòu)
圖2 for循環(huán)轉(zhuǎn)化為while循環(huán)的過程
圖3 3n+1問題的流程圖和對(duì)應(yīng)的while循環(huán)代碼
2.5 結(jié)合二維數(shù)組講解雙重循環(huán)
對(duì)于循環(huán)的嵌套,并沒有放在循環(huán)結(jié)構(gòu)這個(gè)教學(xué)單元中進(jìn)行講解,而是放在了數(shù)組單元。這主要基于兩個(gè)考慮:(1)大多數(shù)高職學(xué)生在短期內(nèi)接受大量概念和變化有困難,等學(xué)生經(jīng)過一段時(shí)間熟練掌握循環(huán)結(jié)構(gòu)最基本的用法后,再引入相對(duì)復(fù)雜的內(nèi)容,學(xué)生的理解效果會(huì)更好。(2)雙重循環(huán)和二維數(shù)組本身的關(guān)系就非常密切,雙重循環(huán)是二維數(shù)組的典型應(yīng)用場景。
2.6 循環(huán)在其他編程語言中的實(shí)現(xiàn)
由于C語言在工業(yè)界的廣泛應(yīng)用,其他主流編程語言如C++,Java和PHP在設(shè)計(jì)時(shí)就充分借鑒了C語言的特性,這些編程語言在控制結(jié)構(gòu)上和C語言非常接近甚至完全一致。Java和PHP在C語言的基礎(chǔ)上提供了增強(qiáng)型的for循環(huán)—foreach,這種結(jié)構(gòu)能更加清晰地用來表達(dá)序列,介紹foreach能加強(qiáng)學(xué)生對(duì)于for循環(huán)表達(dá)序列的理解。
在學(xué)生較好掌握C語言循環(huán)結(jié)構(gòu)的基礎(chǔ)上,適時(shí)向?qū)W生介紹其他編程語言是如何編寫循環(huán)語句的,有助于學(xué)生了解C語言在程序設(shè)計(jì)課程中的基礎(chǔ)地位,增進(jìn)學(xué)生對(duì)其他編程語言的親切感,增強(qiáng)學(xué)生學(xué)好程序設(shè)計(jì)類課程的信心。
循環(huán)結(jié)構(gòu)是“C語言程序設(shè)計(jì)”課程的重點(diǎn)和難點(diǎn)。在該單元的教學(xué)設(shè)計(jì)中,采用了任務(wù)驅(qū)動(dòng)的方式來展現(xiàn)不同循環(huán)結(jié)構(gòu)的應(yīng)用場景,從簡單開始,圍繞示例,階梯式的引入各種循環(huán)語句,并通過相互改寫 for循環(huán)和 while循環(huán)來幫助學(xué)生理解兩者的聯(lián)系和區(qū)別,并將難點(diǎn)分散到不同的教學(xué)單元,消除了學(xué)生的畏難情緒,讓學(xué)生拾級(jí)而上,增強(qiáng)了學(xué)習(xí)的自信心。近兩年的教學(xué)實(shí)踐和學(xué)生程序設(shè)計(jì)競賽的表現(xiàn)表明該方法的教學(xué)效果非常有效。
[1]吳文虎.計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課程改革[J].中國大學(xué)教學(xué),2004(2):14-15.
[2]吳文虎.我怎么講好“程序設(shè)計(jì)基礎(chǔ)”這門課[J].中國大學(xué)教學(xué),2011(12):10-12.
[3]沈涵飛.比較教學(xué)法在 C語言和Java程序設(shè)計(jì)課程中的運(yùn)用[J].軟件導(dǎo)刊,2013(12):171-173.
[4]何欽銘,陸漢權(quán),馮博琴.計(jì)算機(jī)基礎(chǔ)教學(xué)的核心任務(wù)是計(jì)算思維能力的培養(yǎng)—《九校聯(lián)盟(C9)計(jì)算機(jī)基礎(chǔ)教學(xué)發(fā)展戰(zhàn)略聯(lián)合聲明》解讀[J].中國大學(xué)教學(xué),2010(9):7-11.
Teaching design of C language loop structure unit in higher vocational education
Shen Hanfei,Liu Zheng
(Information Engineering College of Suzhou Industrial Park Institute of Services Outsourcing,Suzhou 215123,China)
Loop structure is the key and difficult point in the course of "C language program design".Based on many years of teaching practice,the teaching design of the unit uses task driven approach to show the different application scenarios of loop structures,and then this paper starts from a simple task,around the example,introduced a variety of ladder cycle statement,and difficulties will be distributed to different units.Teaching practice shows that this method has achieved good teaching effect.
loop structure;ladder teaching;instructional design;C language
江蘇省現(xiàn)代教育技術(shù)研究課題;項(xiàng)目名稱:基于智能終端的“數(shù)字化校園”與信息化學(xué)習(xí)環(huán)境建設(shè);項(xiàng)目編號(hào):2016-R-47449。
沈涵飛(1978—),男,江蘇蘇州,碩士,軟件架構(gòu)設(shè)計(jì)師,講師;研究方向:信息化教學(xué),移動(dòng)互聯(lián)網(wǎng),云計(jì)算。