房琛琛,謝 濤,齊 琪
(西安交通大學 計算機教學實驗中心, 陜西 西安 710049)
計算機程序設計課程是許多高校理工科類的公共基礎課程之一。實驗教學是其教學過程中的一個重要環節。然而傳統的實驗教學方式是:教師先講授實驗相關的理論知識,然后布置實驗任務;學生上機編程實踐,實驗課結束后,學生提交一份電子或紙質版實驗報告;教師根據實驗報告給出學生此次實驗成績。這種傳統的實驗教學方式普遍存在一些問題:①先教師講授再上機實踐,學生基本就是按部就班完成實驗指導書或者講義上內容,無法培養動手能力和思考能力[1];②實驗內容與實際問題聯系較弱,導致學生學習目的性不強,不能達到學以致用[2-3];③實驗報告的內容設計不能真實反映學生對知識的掌握情況,不能反映學生的實際操作能力。這些不足導致無法培養學生的動手編程能力和創新能力。
隨著Flash技術的發展,Flash動畫已經進入到教育領域,傳統的教學往往受到實驗場所,實驗設備的局限,不能達到理想的教學效果。通過Flash技術可以把一些難于表述清楚的知識點或難點制作成動畫案例,讓學生更好地理解知識內容,調動其學習的積極性。為了達到更好的學習效果,可以設計具有互動性的動畫案例,使學生參與教學,提高教學效果。
在制作Flash動畫時可以采取兩種方式:①順序播放式用于演示操作或者順序流程之類的案例;②交互式是通過鍵盤或者鼠標響應實現交互的效果。教師可以針對不同的實驗案例,根據其內容特點選擇不同方式的動畫。
在計算機程序設計課程中,以程序代碼的講解為例,可以設計程序的單步執行動畫案例,當程序運行到某一行時,變量的值是多少,或表達式的值是多少,都可以通過動畫形式一步一步演示,使學生對程序的每行代碼都有深入的了解。
還可以通過Flash動畫制作出一些類似于教具的軟件,這里簡稱電子教具,如生成一個畫板工具,實現流程圖的制作等。這些教具并不是一個完整的案例,但是能給老師提供一個虛擬的演示工具。
總之,Flash動畫在幫助學生理解掌握知識點上起到了催化劑的作用。Flash以可視化和多媒體化的形式展示內容,容易聚集學生的注意力,與傳統的教學模式相比,學生會覺得更生動形象,更容易理解知識內容,并且因其互動性好,提高學生的學習參與感[4]。
實驗案例的設計應該將不同層次的知識點貫穿起來,將現階段實驗逐步遷移到下一知識層次[5]。所以,在進行案例設計時,應考慮此次實驗的知識點層次,并考慮如何將這些知識點根據層次的深入而貫穿起來。
例如,在學習排序算法的過程中,學生經常遇到的問題是:為什么出現多種排序算法?某一特定的問題需要使用哪種排序算法?所以,在設計“排序算法比較”實驗案例時,實驗目的就是讓學生自主探索、思考、發現排序算法的優缺點及其適用性,能編程實驗解決實際問題,并能歸納、總結、演示。
排序是計算機內經常進行的一種操作,在程序設計中應用廣泛。其目的就是將一組無序的記錄序列調整為有序的記錄序列。排序的算法有很多種,本次實驗選取了經典的3種排序算法。
學生通過老師的講授以及用電子教具操作實踐,加深對3種排序算法的理解。學生在上機實踐中,用C語言編程實現冒泡排序、選擇排序、快速排序3種算法,并對比多種實驗數據,針對給定的3種實際應用案例選擇合適的算法實現并總結證明。具體實現方案如圖1所示。

圖1 案例實現方案
1)知識講解。
排序算法在程序設計中應用廣泛,但是教學中學生不容易接受。為了便于學生理解排序算法的思想,本案例采用Flash動畫展示排序的過程,生動形象的展現手段改進了傳統的教學方式,便于學生理解和掌握排序的相關概念,進行編程應用。圖2展示了冒泡排序的Flash動畫畫面。

圖2 用Flash演示冒泡排序算法
2)方法引導。
為了讓學生對算法有更深刻的了解,本案例通過撲克牌電子教具,讓學生手動模擬3種排序算法的過程,理解編程實現的思路。電子教具是用Flash制作的模擬真實撲克牌的交互式動畫,學生可以手動拖動卡片,模擬不同算法的排序過程。
3)上機實踐指導。
針對學生在上機編程實現過程中遇到問題,教師有針對性地進行指導,鼓勵他們相互討論。在實驗過程中,啟發學生思考對比實驗的分類目的,引導學生得出正確的實驗結論。
4)對比實驗。
用4種實驗數據來運行3種排序算法,完成對比實驗分析表。包括:基于3種不同樣本大小的完全隨機數據的3種排序算法對比分析表(表1);基于3類不同數據特征數據的3種排序算法對比分析表(表2)。其中,完全隨機數據要求學生使用隨機函數產生;接近正序數據/接近反序數據/較多重復數據,學生可以自己生成,也可使用教師提供的數據做實驗。

表1 3種排序算法實驗統計(完全隨機數據)

表2 3種排序算法實驗統計(非隨機數據,樣本大小N=100)
5)實際應用。
選擇合適的算法應用到實際案例中,詳細地描述解決問題的思路,并對通過運行程序得出的結果進行論證。3個實際案例如下。
實際案例1:統計學生信息。某班班長有一份學生基本信息表(已按照學號從小到大排序)。現要求按照年齡從小到大的順序重新排序。要求:年齡相同的學生,學號按照小的在前,大的在后。請你只做一遍排序,就能幫班長把統計表整理好。
實際案例2:換座位。某班團支部組織全班30名同學觀看愛國主義教育電影。座位選擇了某區的一排。30名同學持票入場后并未對號入座。電影開場后工作人員要求必須按照票號就坐。為了不影響其他觀影人員,工作人員每次只能調整2名同學的座位。請問:最少調整多少次才能使30名同學坐到自己的座位上(工作人員已記錄了30名同學的目前的座位號和票號)?
實際案例3:統計期末考試成績。某學生幫助院教務老師統計某一級全院學生公共科目“高數”的期末考試成績。上報的統計表格包含3列信息(姓名、學號、成績)。要求:成績從高到低排名,成績相同的按照學號從小到大排序。請問:如果需要你來完成此工作,請給出排序的設計思路。
(1)程序驗收:程序是否能編譯通過。若能通過,查看結果的正確性。
(2)實驗質量:總分100。上機實現3種排序算法占60%,運行程序完成對比實驗分析表占20%,選擇合適的算法應用到實際案例中并論證占20%。
(3)自主獨立:自主思考與獨立實踐能力。能夠獨立完成對比實驗分析表,并能給出正確的結論。自主分析實際應用案例問題,給出解決思路,并通過運行程序論證答案的正確性。
(4)實驗報告:實驗報告的規范性與完整性,要求有對比實驗表(時間、交換次數、穩定性),并給出結論、實際案例的分析總結等。
以“排序算法的比較”內容為例,從學習研究、對比分析、實現調試、總結、驗收過程進行案例設計,將講解、思考、動手、實踐于一體。通過對排序算法的對比實驗和分析,加深學生對3種不同排序算法原理的理解,重點了解它們的優缺點和適用性。同時,讓學生上機實踐,對比實驗結果,針對特定場景案例選擇合適的算法并論證。從分析到論證,比較容易激發學生對算法學習的興趣,提升他們的成就感。與以往學生上機實驗的區別還在于,在上機實踐前先讓他們自己通過電子教具手動排序,加深理解理論,為他們上機編程提供思路。基本落實以學生遇到問題為出發點,以實際需求為歸宿[6],加強基本編程思維和方法的訓練。
計算機程序設計課程的實驗教學的關鍵是加強學生對知識的理解,提高學生的動手能力,能夠使用所學的知識解決實際問題。采用Flash動畫加深學生對知識的理解,調動學生學習的興趣,為其進一步學習打下基礎。兩年來,以該方法設計的實驗案例,學生反饋學習效果良好。下一步計劃就是制作一系列實驗案例所需要的Flash動畫,將實驗過程設計得更細致、更完善。
參考文獻:
[1]丁海燕. 計算機程序設計課程中計算思維的培養[J]. 實驗技術與管理, 2015(12): 16-18.
[2]王麗娜, 呂紅, 張杰, 等. 計算機程序設計實驗課程的教學改革與實踐[J]. 計算機工程與科學, 2014, 36(增刊1): 226-229.
[3]葉冬芬, 范偉, 楊明霞, 等. 計算機程序設計類課程實驗教學改革的研究[J]. 福建電腦, 2010(11): 32-33.
[4]喬亞男, 李波, 謝濤. 基于電子教具的大學計算機基礎混合式教學研究[J]. 工業和信息化教育, 2016(11): 32-36.
[5]李雪飛, 李晶, 余琍, 等. 面向對象程序設計類課程實踐教學改革[J]. 計算機教育, 2017(7): 118-121.
[6]李瑞生, 王秋云, 安德智, 等. 計算機程序設計類課程實踐教學的改革與創新[J]. 實驗技術與管理, 2012(4): 183-198.