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