馬秀榮
(呼倫貝爾學(xué)院 內(nèi)蒙古 海拉爾 021008)
目前大多數(shù)應(yīng)用型高校將C語言作為計算機語言入門課程,高校中一般開設(shè)《C語言程序設(shè)計》這門課程,主要是為了培養(yǎng)學(xué)生的應(yīng)用能力,讓學(xué)生能夠養(yǎng)成求解復(fù)雜科學(xué)問題的計算思維、算法設(shè)計、程序編寫及測試分析等方面的能力。2016年,呼倫貝爾學(xué)院被自治區(qū)教育廳確定為內(nèi)蒙古自治區(qū)整體轉(zhuǎn)型發(fā)展的兩所高校之一,同年成為國家“十三五”應(yīng)用型本科產(chǎn)教融合發(fā)展工程百所試點高校。[1][2]《C語言程序設(shè)計”課程作為計算機專業(yè)的基礎(chǔ)學(xué)科,重在掌握牢固的基礎(chǔ)知識和鍛煉學(xué)生的動手操作能力。
在C語言知識的傳授過程中,應(yīng)始終貫穿于以編程能力訓(xùn)練提高為目標(biāo),在教學(xué)內(nèi)容編排和組織、案例設(shè)計過程中注重循序漸進地設(shè)計編程算法;在學(xué)生學(xué)習(xí)過程中重視線下教學(xué)與線上訓(xùn)練的有機結(jié)合;在課后作業(yè)中重視程序設(shè)計題目的歸納梳理和測試;在前述的各個教學(xué)環(huán)節(jié)中重視實際應(yīng)用問題算法的訓(xùn)練與提高。要想學(xué)好數(shù)組,必須要多編程、多調(diào)試。在教學(xué)中要注重程序設(shè)計能力的培養(yǎng),通過在教學(xué)過程中不斷地使用多種教學(xué)方法,改變學(xué)生的學(xué)習(xí)環(huán)境,設(shè)計多樣的教學(xué)活動以及迭代式學(xué)習(xí)教學(xué)內(nèi)容等來打破以往的教師滿堂講、學(xué)生被動學(xué)的局面。以應(yīng)用型人才培養(yǎng)目標(biāo)為指導(dǎo),在教學(xué)改革過程中結(jié)合學(xué)生實際情況不斷去探索,充分調(diào)動學(xué)生的學(xué)習(xí)積極性,發(fā)揮學(xué)生的自主性,培養(yǎng)學(xué)生的創(chuàng)新性,對提高教學(xué)質(zhì)量和培養(yǎng)應(yīng)用型人才具有重要的意義。
《C語言程序設(shè)計》課程作為專業(yè)基礎(chǔ)課程,開課在第一個學(xué)期,學(xué)生基本上沒有語言編程基礎(chǔ),數(shù)學(xué)基礎(chǔ)薄弱,邏輯分析能力差,缺乏利用計算機解決問題的思維和能力。教師在講授中一般是理論按照章節(jié)介紹語法知識,并輔助現(xiàn)場演示、例題講授以及練習(xí)編寫代碼。因為課時設(shè)置有限和學(xué)生操作機會少,學(xué)生不能深入思考和領(lǐng)悟課程的內(nèi)涵。
本課程教學(xué)分為理論教學(xué)和實驗教學(xué)兩部分,理論課安排在教室授課,實驗課在機房調(diào)試程序。理論教學(xué)中教師按照教學(xué)大綱,在課堂上按部就班地講述知識點,學(xué)生被動學(xué)習(xí)。實驗課與理論課安排脫節(jié),由于不能及時檢驗實踐操作,造成了學(xué)習(xí)的不連續(xù)性。有的學(xué)生在實驗課上不提前做好準(zhǔn)備工作,調(diào)試出錯率高,解決問題數(shù)量少,實踐操作能力欠缺。要想進一步培養(yǎng)學(xué)生的應(yīng)用能力,需要加強理論學(xué)習(xí)和實踐操作、課堂學(xué)習(xí)與課后學(xué)習(xí)的有效銜接。
學(xué)習(xí)對象都是大一新生,部分學(xué)生沒有學(xué)習(xí)定位,缺乏學(xué)習(xí)的動力和興趣。自主學(xué)習(xí)與創(chuàng)新思維能力較弱,遇到稍微難理解的問題容易放棄。同時,上課聽講地效率不高,課后忙于各種活動,相關(guān)知識沒有得到深入理解。學(xué)生實踐操作少,動手能力不強,基礎(chǔ)知識薄弱,做不到進一步解決難題。課程理論知識抽象性強,學(xué)生難于理解,要想應(yīng)用理論解決問題,應(yīng)在實踐環(huán)節(jié)多操作,讓學(xué)生及時看到程序調(diào)試效果,調(diào)動學(xué)生學(xué)習(xí)的興趣和主動學(xué)習(xí)意識。
1.混合式教學(xué):調(diào)動學(xué)生的自主學(xué)習(xí)能力,讓學(xué)生提前觀看視頻,先了解教學(xué)內(nèi)容。課前安排測試檢驗學(xué)生自學(xué)情況,用成績激勵學(xué)生,調(diào)動學(xué)生學(xué)習(xí)的積極性。課堂教學(xué)中“學(xué)中做,做中學(xué)”實施教學(xué)過程。[3]
2.案例式教學(xué):以案例為載體,引導(dǎo)學(xué)生思考解決問題的方法,激發(fā)學(xué)生的思考,啟發(fā)學(xué)生的思維風(fēng)暴,讓課堂教學(xué)目的更加明確,重點突出。[4]
3.任務(wù)驅(qū)動式教學(xué):在實踐教學(xué)中,強調(diào)學(xué)生的練與用。在PTA平臺設(shè)置在線測試題目集,學(xué)生可以通過平臺驗證代碼的準(zhǔn)確性,讓學(xué)生以完成任務(wù)為目標(biāo),激勵學(xué)生應(yīng)用所學(xué)知識。
4.討論式教學(xué):實踐調(diào)試程序中,容易遇到不可預(yù)知的狀況。同樣,同一問題會有不同的解決方案,通過大家的集思廣益,可以找到最佳得解決方案。在討論中,分析算法實現(xiàn)過程,找出論點依據(jù),研究代碼的可實施性。通過討論使學(xué)生積極參與到小組合作學(xué)習(xí)中,從而進一步理解算法內(nèi)涵。
打破理論和實踐脫節(jié)教學(xué)模式,學(xué)生自帶電腦,并安裝極域電子教室和Dev C++集成開發(fā)環(huán)境,教師利用極域電子教室演示PPT課件,學(xué)生機同步接收,邊講邊練。精心設(shè)計課件,通過動畫展示問題的求解過程,調(diào)動學(xué)生參與積極性,引導(dǎo)學(xué)生逐步掌握教學(xué)內(nèi)容。呼倫貝爾學(xué)院教學(xué)平臺發(fā)布教學(xué)資源——視頻、單元學(xué)習(xí)、教學(xué)活動等,方便學(xué)生課下繼續(xù)鞏固加強。PTA平臺建設(shè)習(xí)題庫,創(chuàng)建題目集,發(fā)布課前測試、課堂練習(xí)、課后作業(yè)等,實時評測學(xué)生提交代碼,調(diào)動學(xué)生學(xué)習(xí)的興趣。
將立德樹人和全面育人理念有機融入課堂教學(xué),引導(dǎo)學(xué)生樹立正確的人生觀和價值觀。結(jié)合課程內(nèi)容,引用政府工作報告、時政要聞、國學(xué)古詩詞等展開思政教育,培養(yǎng)學(xué)生正確的人生觀和踐行社會主義核心價值觀。通過引用“人心齊,泰山移”“集體是力量的源泉,眾人是智慧的搖籃”等諺語,再次理解數(shù)組概念的內(nèi)涵,即具有相同類型數(shù)據(jù)的有序集合,擁有單個變量所不具備的強大功能。通過數(shù)組引用方法的教學(xué),培養(yǎng)學(xué)生要有團隊合作精神。
《C語言程序設(shè)計》課程實踐性強,基于應(yīng)用型院校人才培養(yǎng)的模式,教學(xué)中要重點鍛煉學(xué)生的實踐能力。課堂教學(xué)中以程序設(shè)計為主線,迭代式學(xué)習(xí)教學(xué)內(nèi)容,鞏固算法思想。教學(xué)原則是以程序能力為培養(yǎng)目標(biāo),精講多練。教學(xué)方法是逐步深入、分散難點和案例驅(qū)動、循序漸進。為了更好地讓學(xué)生掌握教學(xué)內(nèi)容,通過課前測試、課堂教學(xué)和課后鞏固三個方面進行教學(xué)改革,如圖1所示,具體實施方案是案例引導(dǎo)、漸進訓(xùn)練和上機隨測,重在加強鍛煉學(xué)生的動手操作能力。
圖1 教學(xué)過程
1.課前測試
充分利用課余時間,課后及時發(fā)布任務(wù)單,任務(wù)單中包括復(fù)習(xí)鞏固作業(yè)和預(yù)習(xí)任務(wù)。本次的預(yù)習(xí)任務(wù)是通過觀看視頻,學(xué)習(xí)并理解最小值算法的思想及實現(xiàn)過程。在課前布置了編程測試,檢查學(xué)生的自主學(xué)習(xí)情況和考察學(xué)生的動手編程能力。例如,一道計時編程題,測試點有3個,滿分10分。2020級軟件工程本班49人參加測試,有13人得到滿分10分,有10人得到部分分?jǐn)?shù),還有26人沒有通過測試得到0分。教師不僅要關(guān)注學(xué)生的得分情況,還要查看學(xué)生編寫的代碼,從而了解學(xué)生的預(yù)習(xí)學(xué)習(xí)效果。重點檢查非滿分學(xué)生的提交代碼,原因主要集中在三方面:預(yù)習(xí)不到位;學(xué)生審題不嚴(yán)密;編程規(guī)范不達(dá)標(biāo)。
2.課堂教學(xué)
(1)反饋信息
系統(tǒng)自動評測成績,檢驗了學(xué)生自我管理、主動學(xué)習(xí)的效果。展示部分學(xué)生試卷答題情況,如圖2所示。共同分析試卷的錯誤點,第一段代碼說明學(xué)生下標(biāo)和數(shù)據(jù)元素概念混淆,比較的是元素值,應(yīng)該修改的是元素的下標(biāo),也能看出該學(xué)生并沒有理解最小值算法的思想;第二段代碼說明學(xué)生未真正理解最小值和下標(biāo)的對應(yīng)關(guān)系,以至于多引用一個變量n,引用n時未給賦初值,造成得到了局部分?jǐn)?shù)。
圖2 學(xué)生代碼
(2)強化算法
針對學(xué)生預(yù)習(xí)不到位情況,在課堂上重新回看視頻,在視頻播放中強化要點,指出學(xué)生出錯原因是未能分析下標(biāo)的變化規(guī)律,由于下標(biāo)和數(shù)組元素是一一對應(yīng)關(guān)系,下標(biāo)出錯,數(shù)組元素引用就會出錯。觀看視頻,讓學(xué)生掌握最小值算法的思想,著重分析下標(biāo)的變化規(guī)律,改寫課前測試代碼。在學(xué)生操作中,再次強調(diào)注意編碼規(guī)范,學(xué)習(xí)的嚴(yán)謹(jǐn)性。
(3)實踐練習(xí)
在上一學(xué)期的班級中,教學(xué)中直接講述選擇法排序過程,學(xué)生答題通過率為63.4%,沒有達(dá)到預(yù)期效果。思考如何更好提高教學(xué)質(zhì)量,應(yīng)注重程序能力培養(yǎng)為核心,精講多練;迭代式學(xué)習(xí)教學(xué)內(nèi)容,在實踐中熟練應(yīng)用教學(xué)內(nèi)容。在2020級軟件工程本班教學(xué)中增加了過渡實踐環(huán)節(jié),布置了一道編程題目最小值和第一個數(shù)交換。這樣既可以鞏固最小值算法,又為本次課程做了良好銜接,分解了選擇法排序的難度。在實踐環(huán)節(jié)中,要求學(xué)生獨立完成代碼,強調(diào)實踐的重要性,重在發(fā)揮學(xué)生的主體地位,教師只做必要的答疑。同時,在PTA平臺添加了編程題目,如圖3所示。學(xué)生編寫代碼后提交到平臺可以檢驗代碼的準(zhǔn)確性,教師隨時可以查看學(xué)生的代碼和分?jǐn)?shù),從而了解學(xué)生對教學(xué)內(nèi)容的掌握情況。
圖3 課堂測試題目
(4)引出重點、突破難點
在教學(xué)過程中,利用幻燈片展示本次課的教學(xué)內(nèi)容——選擇法排序,算法思想是每次排序中用未排序序列的最小值和未排序序列的第一個數(shù)交換,共排序n-1次。[5]為了幫助學(xué)生理解排序過程,首先播放動畫演示序列的排序變化過程,讓學(xué)生理解每次排序時數(shù)據(jù)分為兩個序列:排序的序列和未排序的序列。每次在未排序的序列中找最小值,所以要重點分析未排序的數(shù)據(jù)。每次排序時未排序的數(shù)據(jù)又是變化的,如何找到這些元素并且正確引用。
聲明部分:int a[20];//包含20個整數(shù)的數(shù)組a,int n;//實際個數(shù)n。
步驟1:分析第一組未排序的數(shù)據(jù)對象a[0],a[1],...,a[n-1]。在這n個數(shù)中找最小值,設(shè)最小值下標(biāo)是index,則找到的最小值a[index]和第一個數(shù)a[0]交換,這個操作已經(jīng)在實踐環(huán)節(jié)完成,學(xué)生自己編寫代碼。
步驟2:分析第二組未排序的數(shù)據(jù)對象a[1],a[2],...,a[n-1]。在這n-1個數(shù)中找最小值,找到的最小值a[index]和第一個數(shù)a[1]交換,這個操作的編程思想和實踐環(huán)節(jié)一致,但代碼要有變化,學(xué)生在引導(dǎo)下編寫代碼。
步驟3:由點看面,先對比前兩組數(shù)據(jù),可以發(fā)現(xiàn),第一次找最小值時,最小值的下標(biāo)初值為index=0;第二次找最小值時,最小值的下標(biāo)初值為index=1;index的值是變化的,這個值就是外循環(huán)的循環(huán)變量i。在這兩次排序中分別是i=0和i=1,所以合并最小值下標(biāo)初值語句為index=i。同理合并內(nèi)循環(huán)j=i+1;i 步驟4:擴展為n-1次的排序,最終寫出完整的選擇法排序的代碼。 通過動畫演示,讓學(xué)生理解選擇法排序的思想;分析出未排序數(shù)據(jù)對象后,正確引用這些數(shù)組元素,突出了本節(jié)課的重點;前序的強化最小值算法和實踐練習(xí),循序漸進書寫編程代碼突破難點。 (5)小組討論 布置課堂活動,以小組討論的方式改變傳統(tǒng)的講授法,把課堂留給學(xué)生,充分發(fā)揮學(xué)生的主體地位,同時讓學(xué)生完全掌握選擇法排序的思想,并用此思想解決實際問題。小組討論中,為樹立自己觀點的正確性,畫流程圖、觀察存儲空間數(shù)值的變化等,多方式找到說服對手的依據(jù),學(xué)生更好地理解數(shù)組元素的內(nèi)涵,鍛煉了團隊合作意識。 (6)知識延展 編程不是解決一道題,而是解決一類題。同樣,學(xué)生掌握內(nèi)容的程度也有不同,為學(xué)有余力的學(xué)生增加擴展題目,在PTA平臺中添加了如圖3所示的3題和4題。第3題是是以選擇法排序為原型,在此基礎(chǔ)上變化了題目要求,讓學(xué)生進一步應(yīng)用選擇法排序思想解決問題。第4題的分析過程和最小值算法有相同之處,也是強化數(shù)組元素正確引用的典型算法。此部分由學(xué)生自行編寫代碼完成,可以小組討論,教師只負(fù)責(zé)指導(dǎo)、答疑。同樣,學(xué)生編寫地代碼是否正確均要在PTA平臺提交驗證,限時測試和實時排名激勵了學(xué)生的競爭意識。 3.課后鞏固 學(xué)生要融會貫通地應(yīng)用課堂所學(xué)內(nèi)容,課后鞏固是不可缺少的。根據(jù)教學(xué)內(nèi)容,布置編程題目,重在練習(xí)下標(biāo)和數(shù)組元素之間的一一對應(yīng)關(guān)系,從而真正掌握一維數(shù)組的定義、初始化和數(shù)組元素的引用。針對問題分析算法求解過程,鍛煉學(xué)生的知識運用能力和解決問題的分析能力。通過編寫代碼提交驗證,激發(fā)學(xué)生的求知欲和實踐操作能力。 課堂教學(xué)實時評測,在PTA平臺添加了4道題目,學(xué)生題目的正答率如圖4所示,它可以直觀地反應(yīng)學(xué)生的課堂學(xué)習(xí)情況。由統(tǒng)計數(shù)據(jù)可以看出,第1題和 第2題得分率較高,原因是第1題是過渡題,學(xué)生能夠運用已有算法思想進行變化;第2題是課堂重點突破內(nèi)容,動畫演示分析數(shù)據(jù)對象,正確引用數(shù)組元素,引導(dǎo)學(xué)生參與編程,解決雙重循環(huán)關(guān)聯(lián)難題。第3題是擴展題目,得分率略小于60%。第4題得分率最低,原因是測試有時間限制,學(xué)生未能在限時時間內(nèi)提交代碼;學(xué)有余力的學(xué)生占少數(shù),多數(shù)學(xué)生的問題分析能力需要加強。對于沒有完全解決的問題,將再次添加到課后鞏固中的題目集中,可以線上師生探討,在充裕的時間內(nèi)讓學(xué)生強化練習(xí)。 圖4 課堂測試正答率 經(jīng)過實踐教學(xué)中使用多種教學(xué)方法,強調(diào)程序設(shè)計能力培養(yǎng)和迭代式學(xué)習(xí)教學(xué)內(nèi)容從而提高教學(xué)質(zhì)量,增強學(xué)生的實踐操作能力效果。但同時也發(fā)現(xiàn)了一些不足:線上學(xué)生自主學(xué)習(xí)難于控制;機房授課課堂不易組織;學(xué)生復(fù)習(xí)總結(jié)能力欠缺等。針對這些不足,還需進一步探究《C語言程序設(shè)計》課程的教學(xué)改革,從而更好地為競賽輸送選手,為企業(yè)培養(yǎng)應(yīng)用型人才。(三)教學(xué)效果
結(jié)語