沈涵飛,劉 正
(蘇州工業園區服務外包職業學院 信息工程學院,江蘇 蘇州 215123)
高職C語言循環結構單元的教學設計
沈涵飛,劉 正
(蘇州工業園區服務外包職業學院 信息工程學院,江蘇 蘇州 215123)
循環結構是“C語言程序設計”課程的重點和難點。基于多年教學實踐,該單元的教學設計采用了任務驅動的方式來展現不同循環結構的應用場景,從簡單任務開始,圍繞示例,階梯式地引入各種循環語句,并將難點分散到不同的教學單元。教學實踐表明這種方式取得了較好的教學效果。
循環結構;階梯式教學;教學設計;C語言
“C語言程序設計”是信息工程相關專業的重要基礎課,通常安排在大一講授。課程開設的主要目的是使學生理解計算思維,建立算法意識,借助C程序的知識載體,能編寫結構化程序來解決問題。C語言是結構化程序設計的代表語言,在順序結構、分支結構和循環結構這3種基本結構中,循環結構是最復雜的,而且和數組、函數、結構體等內容關系非常密切。
基于多年的高職C語言課程的教學實踐,作者對循環結構單元的教學內容和過程進行了重構和優化,在實踐中取得了很好的成效。
當前的C語言教材側重于知識傳授的系統性和邏輯性,教師通常按部就班地進行講解,先花大量的時間系統地講授各循環語句的語法規則、執行過程,然后再舉出相應的示例。
這種教學方法本意是期望學生能夠掌握基礎理論后,能夠舉一反三,靈活應用所學知識解決問題。但如果把這種方法用于抽象思維較弱的高職學生,往往適得其反。理論學習能力本就不強的高職學生由于消化困難,很容易喪失興趣,產生畏難情緒,很多同學干脆就放棄了課程的學習。
根據高職學生的認知特點,在循環結構的教學設計上,直接采用任務驅動的方式來展現循環結構的重要使用場景,強調for循環適合表示序列,在學習初期學生采用“依樣畫葫蘆”的方式就能完成程序編寫,完全不需要理解for循環的執行流程。接著從有限序列到無窮序列,很自然的引入break語句來改變循環的執行流程。然后強調 for循環和 while循環的等價性,在沒有序列或者序列并不明顯的情況下使用while循環和流程圖表示來解決其他循環結構的問題。
對于循環結構中的非重點內容如loop語句和continue語句,由于這些內容實際應用相對較少,作教學中做了弱化處理,避免給學生太多選擇而使學生陷入迷茫。把循環結構中的嵌套循環放在數組單元進行介紹,給學生的學習提供了適當的緩沖,避免難點過于集中而使學生產生畏難情緒。
同時,在整個課程的教學中,課程組使用“C/C++程序設計自動評測系統”的練習平臺,學生編寫的程序可以由練習平臺直接給出評判結果。在循環結構的教學中,更是布置了大量基礎練習題來幫助學生熟練掌握循環的應用。下面是循環結構教學設計和實施的具體步驟。
2.1 介紹循環的最簡單應用—簡單重復
循環最簡單的應用是控制語句塊重復執行的次數,循環變量在循環體內部并不使用。采用的例題是輸出10行的“good good study,day day up”。建議學生編寫的循環代碼為 for(i=1;i≤=10;i=i+1),鼓勵學生改變各個參數后運行程序,通過觀察結果來幫助理解程序。
2.2 使用for循環來表示序列
循環尤其是for循環最典型的應用是表示序列,例如語句 for(i=1;i≤=10;i=i+1)表示的序列是 {1,2,3,…,10},語句 for(c='a';c≤='z';c=c+1)表示字符序列 {a,b,… ,z}。通過分析常用的循環表達方式,歸納了常用序列表示,如表1所示。

表1 常用序列和 for循環的對應關系
在這個環節,采用的案例是計算 1+2+3+…+100 的值。這個例子可以寫成最原始也是最容易理解的順序結構;通過歸納可改寫成sum=sum+i,其中i依次遍歷序列{1,2,3,…,100},這個步驟學生也容易理解;在最后一個環節,學生可以根據常用序列的for循環表示寫出對應的for語句,從而完成程序的編寫。這幾個步驟如圖1所示。
在學生學習循環的初期,采用這種教學方式可以避免陷入“必須先理解for循環的執行機制,再編寫代碼”的困境中,讓學生相對容易地寫出程序代碼,增強學習C語言的信心。
for循環for(i=1;;i++)可以表達無窮序列,在這種情況下,程序會永遠運行下去嗎?此時引入改變循環正常執行流程的break語句就顯得非常自然了。對于改變循環正常執行流程的另一個語句continue,在初期教學時作了弱化處理,因為break語句是必須的,而continue語句是可有可無的,完全可用 if-else 語句來代替。
2.3 將for循環改寫成while和do-while循環(見圖2)
在介紹while循環時,一開始并沒有引入新的例子,還是使用同一個例子:計算 1+2+3+…+100 的值。向學生特別強調for循環和while循環在使用上是完全等價的,可以相互改寫,特別設計了圖2中的中間過渡環節來強調兩者的語義上的等價性,并要求學生把for循環表達改寫成while循環表達,然后再改寫回for循環表達。這種教學方式有利于消除學生對于循環的陌生感,不會增加心理上的負擔。
在學生掌握了for循環和while循環的代碼相互改寫后,再要求學生完成while循環和do-while循環的相互改寫,從而向學生全面介紹了結構化程序設計中最常使用的3種基本循環結構。
2.4 介紹流程圖、while循環及其適用場合
循環結構有for循環、while循環和do-while循環這3種基本表達方式。for循環適合表達序列,并不需要使用流程圖來幫助理解,循環體至少要執行一次的情況采用do-while循環,其他情況建議采用while循環。
while循環和do-while循環用流程圖來表達是非常直觀的。在介紹流程圖時,采用的例題是3n+1問題:對于任意大于1的自然數,若n為奇數,則將n變為3n+1,否則變為n的一半,經過若干次這樣的變換,一定會使n變為1,例如3→10→5→16→8→4→2→1。程序要求的輸入是n,要求程序輸出變換的次數。
如圖3所示,基本的當型流程圖很適合表達3n+1問題,再把流程圖轉化成代碼也很直觀,易于理解。

圖1 累加問題從順序結構遷移到循環結構

圖2 for循環轉化為while循環的過程

圖3 3n+1問題的流程圖和對應的while循環代碼
2.5 結合二維數組講解雙重循環
對于循環的嵌套,并沒有放在循環結構這個教學單元中進行講解,而是放在了數組單元。這主要基于兩個考慮:(1)大多數高職學生在短期內接受大量概念和變化有困難,等學生經過一段時間熟練掌握循環結構最基本的用法后,再引入相對復雜的內容,學生的理解效果會更好。(2)雙重循環和二維數組本身的關系就非常密切,雙重循環是二維數組的典型應用場景。
2.6 循環在其他編程語言中的實現
由于C語言在工業界的廣泛應用,其他主流編程語言如C++,Java和PHP在設計時就充分借鑒了C語言的特性,這些編程語言在控制結構上和C語言非常接近甚至完全一致。Java和PHP在C語言的基礎上提供了增強型的for循環—foreach,這種結構能更加清晰地用來表達序列,介紹foreach能加強學生對于for循環表達序列的理解。
在學生較好掌握C語言循環結構的基礎上,適時向學生介紹其他編程語言是如何編寫循環語句的,有助于學生了解C語言在程序設計課程中的基礎地位,增進學生對其他編程語言的親切感,增強學生學好程序設計類課程的信心。
循環結構是“C語言程序設計”課程的重點和難點。在該單元的教學設計中,采用了任務驅動的方式來展現不同循環結構的應用場景,從簡單開始,圍繞示例,階梯式的引入各種循環語句,并通過相互改寫 for循環和 while循環來幫助學生理解兩者的聯系和區別,并將難點分散到不同的教學單元,消除了學生的畏難情緒,讓學生拾級而上,增強了學習的自信心。近兩年的教學實踐和學生程序設計競賽的表現表明該方法的教學效果非常有效。
[1]吳文虎.計算機程序設計基礎課程改革[J].中國大學教學,2004(2):14-15.
[2]吳文虎.我怎么講好“程序設計基礎”這門課[J].中國大學教學,2011(12):10-12.
[3]沈涵飛.比較教學法在 C語言和Java程序設計課程中的運用[J].軟件導刊,2013(12):171-173.
[4]何欽銘,陸漢權,馮博琴.計算機基礎教學的核心任務是計算思維能力的培養—《九校聯盟(C9)計算機基礎教學發展戰略聯合聲明》解讀[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
江蘇省現代教育技術研究課題;項目名稱:基于智能終端的“數字化校園”與信息化學習環境建設;項目編號:2016-R-47449。
沈涵飛(1978—),男,江蘇蘇州,碩士,軟件架構設計師,講師;研究方向:信息化教學,移動互聯網,云計算。