馬秀榮
(呼倫貝爾學院 內蒙古 海拉爾 021008)
目前大多數應用型高校將C語言作為計算機語言入門課程,高校中一般開設《C語言程序設計》這門課程,主要是為了培養學生的應用能力,讓學生能夠養成求解復雜科學問題的計算思維、算法設計、程序編寫及測試分析等方面的能力。2016年,呼倫貝爾學院被自治區教育廳確定為內蒙古自治區整體轉型發展的兩所高校之一,同年成為國家“十三五”應用型本科產教融合發展工程百所試點高校。[1][2]《C語言程序設計”課程作為計算機專業的基礎學科,重在掌握牢固的基礎知識和鍛煉學生的動手操作能力。
在C語言知識的傳授過程中,應始終貫穿于以編程能力訓練提高為目標,在教學內容編排和組織、案例設計過程中注重循序漸進地設計編程算法;在學生學習過程中重視線下教學與線上訓練的有機結合;在課后作業中重視程序設計題目的歸納梳理和測試;在前述的各個教學環節中重視實際應用問題算法的訓練與提高。要想學好數組,必須要多編程、多調試。在教學中要注重程序設計能力的培養,通過在教學過程中不斷地使用多種教學方法,改變學生的學習環境,設計多樣的教學活動以及迭代式學習教學內容等來打破以往的教師滿堂講、學生被動學的局面。以應用型人才培養目標為指導,在教學改革過程中結合學生實際情況不斷去探索,充分調動學生的學習積極性,發揮學生的自主性,培養學生的創新性,對提高教學質量和培養應用型人才具有重要的意義。
《C語言程序設計》課程作為專業基礎課程,開課在第一個學期,學生基本上沒有語言編程基礎,數學基礎薄弱,邏輯分析能力差,缺乏利用計算機解決問題的思維和能力。教師在講授中一般是理論按照章節介紹語法知識,并輔助現場演示、例題講授以及練習編寫代碼。因為課時設置有限和學生操作機會少,學生不能深入思考和領悟課程的內涵。
本課程教學分為理論教學和實驗教學兩部分,理論課安排在教室授課,實驗課在機房調試程序。理論教學中教師按照教學大綱,在課堂上按部就班地講述知識點,學生被動學習。實驗課與理論課安排脫節,由于不能及時檢驗實踐操作,造成了學習的不連續性。有的學生在實驗課上不提前做好準備工作,調試出錯率高,解決問題數量少,實踐操作能力欠缺。要想進一步培養學生的應用能力,需要加強理論學習和實踐操作、課堂學習與課后學習的有效銜接。
學習對象都是大一新生,部分學生沒有學習定位,缺乏學習的動力和興趣。自主學習與創新思維能力較弱,遇到稍微難理解的問題容易放棄。同時,上課聽講地效率不高,課后忙于各種活動,相關知識沒有得到深入理解。學生實踐操作少,動手能力不強,基礎知識薄弱,做不到進一步解決難題。課程理論知識抽象性強,學生難于理解,要想應用理論解決問題,應在實踐環節多操作,讓學生及時看到程序調試效果,調動學生學習的興趣和主動學習意識。
1.混合式教學:調動學生的自主學習能力,讓學生提前觀看視頻,先了解教學內容。課前安排測試檢驗學生自學情況,用成績激勵學生,調動學生學習的積極性。課堂教學中“學中做,做中學”實施教學過程。[3]
2.案例式教學:以案例為載體,引導學生思考解決問題的方法,激發學生的思考,啟發學生的思維風暴,讓課堂教學目的更加明確,重點突出。[4]
3.任務驅動式教學:在實踐教學中,強調學生的練與用。在PTA平臺設置在線測試題目集,學生可以通過平臺驗證代碼的準確性,讓學生以完成任務為目標,激勵學生應用所學知識。
4.討論式教學:實踐調試程序中,容易遇到不可預知的狀況。同樣,同一問題會有不同的解決方案,通過大家的集思廣益,可以找到最佳得解決方案。在討論中,分析算法實現過程,找出論點依據,研究代碼的可實施性。通過討論使學生積極參與到小組合作學習中,從而進一步理解算法內涵。
打破理論和實踐脫節教學模式,學生自帶電腦,并安裝極域電子教室和Dev C++集成開發環境,教師利用極域電子教室演示PPT課件,學生機同步接收,邊講邊練。精心設計課件,通過動畫展示問題的求解過程,調動學生參與積極性,引導學生逐步掌握教學內容。呼倫貝爾學院教學平臺發布教學資源——視頻、單元學習、教學活動等,方便學生課下繼續鞏固加強。PTA平臺建設習題庫,創建題目集,發布課前測試、課堂練習、課后作業等,實時評測學生提交代碼,調動學生學習的興趣。
將立德樹人和全面育人理念有機融入課堂教學,引導學生樹立正確的人生觀和價值觀。結合課程內容,引用政府工作報告、時政要聞、國學古詩詞等展開思政教育,培養學生正確的人生觀和踐行社會主義核心價值觀。通過引用“人心齊,泰山移”“集體是力量的源泉,眾人是智慧的搖籃”等諺語,再次理解數組概念的內涵,即具有相同類型數據的有序集合,擁有單個變量所不具備的強大功能。通過數組引用方法的教學,培養學生要有團隊合作精神。
《C語言程序設計》課程實踐性強,基于應用型院校人才培養的模式,教學中要重點鍛煉學生的實踐能力。課堂教學中以程序設計為主線,迭代式學習教學內容,鞏固算法思想。教學原則是以程序能力為培養目標,精講多練。教學方法是逐步深入、分散難點和案例驅動、循序漸進。為了更好地讓學生掌握教學內容,通過課前測試、課堂教學和課后鞏固三個方面進行教學改革,如圖1所示,具體實施方案是案例引導、漸進訓練和上機隨測,重在加強鍛煉學生的動手操作能力。

圖1 教學過程
1.課前測試
充分利用課余時間,課后及時發布任務單,任務單中包括復習鞏固作業和預習任務。本次的預習任務是通過觀看視頻,學習并理解最小值算法的思想及實現過程。在課前布置了編程測試,檢查學生的自主學習情況和考察學生的動手編程能力。例如,一道計時編程題,測試點有3個,滿分10分。2020級軟件工程本班49人參加測試,有13人得到滿分10分,有10人得到部分分數,還有26人沒有通過測試得到0分。教師不僅要關注學生的得分情況,還要查看學生編寫的代碼,從而了解學生的預習學習效果。重點檢查非滿分學生的提交代碼,原因主要集中在三方面:預習不到位;學生審題不嚴密;編程規范不達標。
2.課堂教學
(1)反饋信息
系統自動評測成績,檢驗了學生自我管理、主動學習的效果。展示部分學生試卷答題情況,如圖2所示。共同分析試卷的錯誤點,第一段代碼說明學生下標和數據元素概念混淆,比較的是元素值,應該修改的是元素的下標,也能看出該學生并沒有理解最小值算法的思想;第二段代碼說明學生未真正理解最小值和下標的對應關系,以至于多引用一個變量n,引用n時未給賦初值,造成得到了局部分數。

圖2 學生代碼
(2)強化算法
針對學生預習不到位情況,在課堂上重新回看視頻,在視頻播放中強化要點,指出學生出錯原因是未能分析下標的變化規律,由于下標和數組元素是一一對應關系,下標出錯,數組元素引用就會出錯。觀看視頻,讓學生掌握最小值算法的思想,著重分析下標的變化規律,改寫課前測試代碼。在學生操作中,再次強調注意編碼規范,學習的嚴謹性。
(3)實踐練習
在上一學期的班級中,教學中直接講述選擇法排序過程,學生答題通過率為63.4%,沒有達到預期效果。思考如何更好提高教學質量,應注重程序能力培養為核心,精講多練;迭代式學習教學內容,在實踐中熟練應用教學內容。在2020級軟件工程本班教學中增加了過渡實踐環節,布置了一道編程題目最小值和第一個數交換。這樣既可以鞏固最小值算法,又為本次課程做了良好銜接,分解了選擇法排序的難度。在實踐環節中,要求學生獨立完成代碼,強調實踐的重要性,重在發揮學生的主體地位,教師只做必要的答疑。同時,在PTA平臺添加了編程題目,如圖3所示。學生編寫代碼后提交到平臺可以檢驗代碼的準確性,教師隨時可以查看學生的代碼和分數,從而了解學生對教學內容的掌握情況。

圖3 課堂測試題目
(4)引出重點、突破難點
在教學過程中,利用幻燈片展示本次課的教學內容——選擇法排序,算法思想是每次排序中用未排序序列的最小值和未排序序列的第一個數交換,共排序n-1次。[5]為了幫助學生理解排序過程,首先播放動畫演示序列的排序變化過程,讓學生理解每次排序時數據分為兩個序列:排序的序列和未排序的序列。每次在未排序的序列中找最小值,所以要重點分析未排序的數據。每次排序時未排序的數據又是變化的,如何找到這些元素并且正確引用。
聲明部分:int a[20];//包含20個整數的數組a,int n;//實際個數n。
步驟1:分析第一組未排序的數據對象a[0],a[1],...,a[n-1]。在這n個數中找最小值,設最小值下標是index,則找到的最小值a[index]和第一個數a[0]交換,這個操作已經在實踐環節完成,學生自己編寫代碼。
步驟2:分析第二組未排序的數據對象a[1],a[2],...,a[n-1]。在這n-1個數中找最小值,找到的最小值a[index]和第一個數a[1]交換,這個操作的編程思想和實踐環節一致,但代碼要有變化,學生在引導下編寫代碼。
步驟3:由點看面,先對比前兩組數據,可以發現,第一次找最小值時,最小值的下標初值為index=0;第二次找最小值時,最小值的下標初值為index=1;index的值是變化的,這個值就是外循環的循環變量i。在這兩次排序中分別是i=0和i=1,所以合并最小值下標初值語句為index=i。同理合并內循環j=i+1;i 步驟4:擴展為n-1次的排序,最終寫出完整的選擇法排序的代碼。 通過動畫演示,讓學生理解選擇法排序的思想;分析出未排序數據對象后,正確引用這些數組元素,突出了本節課的重點;前序的強化最小值算法和實踐練習,循序漸進書寫編程代碼突破難點。 (5)小組討論 布置課堂活動,以小組討論的方式改變傳統的講授法,把課堂留給學生,充分發揮學生的主體地位,同時讓學生完全掌握選擇法排序的思想,并用此思想解決實際問題。小組討論中,為樹立自己觀點的正確性,畫流程圖、觀察存儲空間數值的變化等,多方式找到說服對手的依據,學生更好地理解數組元素的內涵,鍛煉了團隊合作意識。 (6)知識延展 編程不是解決一道題,而是解決一類題。同樣,學生掌握內容的程度也有不同,為學有余力的學生增加擴展題目,在PTA平臺中添加了如圖3所示的3題和4題。第3題是是以選擇法排序為原型,在此基礎上變化了題目要求,讓學生進一步應用選擇法排序思想解決問題。第4題的分析過程和最小值算法有相同之處,也是強化數組元素正確引用的典型算法。此部分由學生自行編寫代碼完成,可以小組討論,教師只負責指導、答疑。同樣,學生編寫地代碼是否正確均要在PTA平臺提交驗證,限時測試和實時排名激勵了學生的競爭意識。 3.課后鞏固 學生要融會貫通地應用課堂所學內容,課后鞏固是不可缺少的。根據教學內容,布置編程題目,重在練習下標和數組元素之間的一一對應關系,從而真正掌握一維數組的定義、初始化和數組元素的引用。針對問題分析算法求解過程,鍛煉學生的知識運用能力和解決問題的分析能力。通過編寫代碼提交驗證,激發學生的求知欲和實踐操作能力。 課堂教學實時評測,在PTA平臺添加了4道題目,學生題目的正答率如圖4所示,它可以直觀地反應學生的課堂學習情況。由統計數據可以看出,第1題和 第2題得分率較高,原因是第1題是過渡題,學生能夠運用已有算法思想進行變化;第2題是課堂重點突破內容,動畫演示分析數據對象,正確引用數組元素,引導學生參與編程,解決雙重循環關聯難題。第3題是擴展題目,得分率略小于60%。第4題得分率最低,原因是測試有時間限制,學生未能在限時時間內提交代碼;學有余力的學生占少數,多數學生的問題分析能力需要加強。對于沒有完全解決的問題,將再次添加到課后鞏固中的題目集中,可以線上師生探討,在充裕的時間內讓學生強化練習。 圖4 課堂測試正答率 經過實踐教學中使用多種教學方法,強調程序設計能力培養和迭代式學習教學內容從而提高教學質量,增強學生的實踐操作能力效果。但同時也發現了一些不足:線上學生自主學習難于控制;機房授課課堂不易組織;學生復習總結能力欠缺等。針對這些不足,還需進一步探究《C語言程序設計》課程的教學改革,從而更好地為競賽輸送選手,為企業培養應用型人才。(三)教學效果

結語