劉暢 諶衛(wèi)軍 鄭莉
摘要:實踐教學在計算機基礎教學中的作用不容忽視,如何在計算機基礎教學過程中更好地發(fā)揮實踐教學應有的作用,使得學生不僅能應用課堂所學知識,還能激發(fā)創(chuàng)新思維,是實踐教學的目的之一。文章通過對c++語言程序設計課程中學生提交的優(yōu)秀大作業(yè)進行介紹與點評,展示學生在應用c++時體現(xiàn)出的創(chuàng)新性和良好的綜合素質;通過分析每個優(yōu)秀作業(yè)的優(yōu)點,指出基礎教育課程中的實踐教學應如何更好地激發(fā)學生興趣和靈感,以鍛煉學生的綜合能力。
關鍵詞:實踐教學;計算機基礎教學;創(chuàng)新思維;c++語言程序設計
0、引言
21世紀已經步入信息時代,國家對于信息人才的需求也越來越強烈。針對國家的特定需求,高校更加注重復合型人才的培養(yǎng)。作為其中的重要一環(huán),計算機教學之路也在逐步地探索和改革中日益完善。對于面向各個專業(yè)的計算機基礎教學,教師在傳授課堂基本知識的基礎上,需要考慮如何更好地啟發(fā)不同專業(yè)學生對于計算機的興趣,使學生能夠將所學知識應用在各自領域中。實踐教學在啟發(fā)學生興趣和鍛煉學生動手能力方面尤為重要。筆者中的第一作者通過擔任c++語言程序設計課程助教一職,對實踐課程中的優(yōu)秀作業(yè)進行點評,總結出計算機基礎教學中實踐教學在啟發(fā)學生自主探索學習方面的一些經驗。
1、實踐教學在計算機基礎教學中的定位
計算機基礎教學是培養(yǎng)大學生綜合素質和創(chuàng)新能力不可或缺的重要環(huán)節(jié),是培養(yǎng)復合型人才的重要組成部分。其中一項重要內容就是要潛移默化地使學生養(yǎng)成一種新的思維方式,即能夠運用計算科學的基礎概念對問題進行求解、系統(tǒng)設計和行為理解,亦即建立計算思維。培養(yǎng)學生的計算思維,使其能夠在各自專業(yè)領域應用該思維系統(tǒng)地分析問題、解決問題是計算機基礎教學的目的之一。
隨著教學方法的進步,計算機基礎教學的理論知識在課堂中可以很好地得到傳授,如多媒體教學等;而在實踐教學方面,側重點更在于對理論知識的實踐與驗證,旨在培養(yǎng)學生應用所學知識解決具體問題的能力,希望能夠啟發(fā)學生的興趣,應用計算思維自主設計問題并探索解決問題的方法。因此,實踐教學不僅僅是簡單地完成教學指導書中的相應內容和對課堂理論教學進行實踐驗證,還要達到啟發(fā)學生思考并提問進而實踐創(chuàng)新的目的。
2、特定風格隨機音樂旋律的生成及計算機變奏編曲
2.1 音樂生成程序創(chuàng)作背景
特定風格隨機音樂旋律生成程序以計算機音樂為背景,旨在通過計算機生成隨機音樂旋律,以此為作曲家提供靈感。該程序針對當前已有隨機音樂生成程序不能對給定旋律進行變奏、編曲的缺陷進行改進,主要目的是生成特定風格的旋律和對給定旋律進行變奏編曲,如中國五聲音階風格、埃及古典音樂風格、西方浪漫派風格等,能夠根據(jù)用戶提供的簡單要求,隨機生成一段音樂旋律并給旋律添加伴奏以構成完整的音樂。
程序基于控制臺應用進行開發(fā),從TXT文本文件讀取給定旋律的基本信息,通過設計的和聲、旋律與伴奏生成算法,最終輸出一組具有指定風格的MIDI格式音樂。
該程序作者是經管學院的學生,其業(yè)余愛好為彈鋼琴和聲樂創(chuàng)作。從該生的大作業(yè)中可以明顯看出興趣是最好的老師。當學生從被動地完成作業(yè)轉變?yōu)橛膳d趣主動驅使時,往往能夠創(chuàng)作出極具想象力與創(chuàng)造力的作品,因此鼓勵學生自主學習,在自己感興趣的領域進行創(chuàng)作,而不僅僅局限于已經成形的、網絡上的大量參考程序很有必要。
2.2 程序主要技術難點及解決方法
該程序中的一個難點在于c++高級開發(fā)的自主學習,即音樂的生成和保存問題。該問題涉及聲音的處理,這在c++語言程序設計課程中沒有講授。該生在經過充分調研的基礎上,最終選擇MIDI作為程序的輸出方式。MIDI是一種二進制文件,主要由頭塊和緊接著的多個音軌塊構成,C++中的fstream類正好可以方便地進行二進制文件的創(chuàng)建和讀寫,因此該生通過上述的MIDIFile類、Chunk類等實現(xiàn)MIDI文件的制作。
第二個難點在于生成音樂過程中的音樂記號表示問題。雖然將隨機的序列按照算法映射到音符上可以產生隨機音樂,但是這種音樂沒有參考價值,也稱不上是音樂,此外如何將音符在計算機中表示也很困難。該生靈活地運用c++中自底向上的設計思想,先構造最簡單的音符類,然后在此基礎上構建和旋類,最后構成和聲類。
最后一個難點是生成音樂過程中隨機音樂和非隨機音樂之間的平衡問題。該生通過查閱聲樂方面的書籍和文獻,確定程序中生成音樂的“非隨機”模塊,進而應用這些“非隨機”模塊作為基本元進行隨機組合,從而平衡了生成音樂過程中的隨機性與非隨機性。
從這個過程可以看出,在興趣的驅使下,學生變得更為主動,能夠自主探索解決問題的方法;同時,教師也應當為學生指明大方向,授之以漁,培養(yǎng)學生獨立思考的能力。
2.3 程序類圖及核心算法設計
特定風格音樂生成器類圖設計邏輯清晰,可以看出該生對于c++類的掌握和應用十分嫻熟,這是設計出良好程序的前提保證。
該程序核心算法可以分為兩部分,其一是音樂部分算法,其二是文件部分算法。前者又分為和聲模塊生成算法及旋律伴奏生成算法,后者又分為事件的處理和文件的操作。由于生成算法中涉及過多的聲樂知識,此處便不再贅述。
2.4 程序點評
首先,從c++語言程序設計課程的教學目的和要求出發(fā),該生完全掌握了所要求的內容,能夠運用C++面向對象設計的思想靈活設計程序;對類的設計邏輯清晰,封裝性良好;運用了課程上所講授的所有內容,展現(xiàn)出良好的c++程序設計能力。
同時,該生能夠結合自己的業(yè)余興趣愛好,從聲樂角度出發(fā)進行創(chuàng)作,利用C++這個有力的工具實現(xiàn)具有指定風格的隨機音樂生成。最終驗收效果良好,每次運行指定風格的生成模式會產生一組MIDI文件,每個都會播放出相似風格但不同的鋼琴演奏曲。由此可見,該程序很好地達到了作者的預期,為作曲者提供靈感。endprint
相比其他守舊的程序,該程序最大的亮點在于學生結合了自己的興趣,能夠將所學知識應用在音樂創(chuàng)作上,學以致用。實踐教學的初期選題階段應該以此種案例作為榜樣,鼓勵學生探索創(chuàng)新,結合自身愛好進行創(chuàng)作,從而拓寬學生思路,激發(fā)創(chuàng)作靈感。
3、基于MFC的上位機軟件設計
3.1 程序背景及功能介紹
基于MFC的上位機軟件設計程序針對全國大學生“飛思卡爾”杯全國智能車競賽,采用C++語言,基于MFC框架,對智能車自主尋線部分所采集回的圖像進行處理。
由于下位機微控制器MCU沒有圖像顯示功能,因此該程序作者萌發(fā)了在上位PC機編寫軟件的想法,以實現(xiàn)數(shù)據(jù)的可視化,方便圖像處理工作的開展,從而進一步檢驗智能車尋線算法的正確性。
該程序能夠完成如下功能:攝像頭原始圖像以及處理之后的圖像顯示;可直接在上位機編寫圖像處理算法,通過代碼移植的方式簡化開發(fā)過程;車模運行過程中其他基本信息的示波器方式動態(tài)顯示;上位機與下位機的交互界面,實現(xiàn)參數(shù)傳遞?;贛FC的上位機軟件設計如圖l所示,軌道灰度圖如圖2所示,圖像直方圖如圖3所示。
與上一個從興趣出發(fā)所設計的程序不同,該生的程序源自實際需求,其在參加競賽培訓時聯(lián)想到所學c++的知識并將其應用在數(shù)據(jù)處理中,達到非常好的實踐效果。教師同樣可以鼓勵學生結合自身專業(yè),從實際需求出發(fā)設計出能夠解決其他課程問題的程序,也能對學生起到很好的鍛煉作用。
3.2 程序主要技術難點及算法設計
該程序是一個綜合性非常強的程序,其整合了上下位機串口通訊、智能車攝像頭圖像獲取及顯示、圖像分析處理、波形顯示等。其中每一部分都具有一定的技術難度。
首先,該生未接觸過MFC,需要自行學習。對于MFC單文檔視圖的整體結構把握、類與類之間的函數(shù)相互調用以及數(shù)據(jù)共享中的許多細節(jié)問題,該生要下很大工夫研究。
其次,對于串口通訊協(xié)議的設計,尤其是虛擬示波器模塊的“通訊協(xié)議”以及相關類設計需要深入考慮,同時,如何接受多條數(shù)據(jù)類型、起始位、數(shù)據(jù)數(shù)目不定的曲線信息,也是程序邏輯設計的難點所在。
最后,由于該程序的應用性很強,需要和底層下位機相互交互,因此需要對動態(tài)鏈接庫的動態(tài)加載以及與單片機端相協(xié)調的函數(shù)接口進行分析與設計。
在程序算法設計方面,圖像的獲取與顯示采用雙緩存技術,實現(xiàn)后臺采集與前臺顯示的獨立,保證數(shù)據(jù)的穩(wěn)定與高效;運用vector容器進行數(shù)據(jù)管理,從而提高數(shù)據(jù)處理的簡便性以及數(shù)據(jù)接受過程中的穩(wěn)定與高效;采用序列化信息存儲方法,將基本信息保存為二進制文件,使得應用程序在下次運行時能夠調用保存的大量配置信息,增加程序復用性。
3.3 程序點評
該程序最大的特點就是綜合性和應用性強。據(jù)了解,該程序已經使用在該生飛思卡爾實驗隊伍里,對智能車所獲取的數(shù)據(jù)進行分析與處理。
這也就是我們最希望看到的結果。c++語言程序設計課程不僅僅是想要學生了解基本概念、運行機制與原理,更希望學生能夠將所學知識應用到實際生活中。與傳統(tǒng)照本宣科的課程不同,c++語言程序設計課程教學最重要的一點就是親自動手實踐,不僅需要完成相應實驗內容,還要求學生發(fā)揮想象力與創(chuàng)造力,設計出優(yōu)秀的工程程序。
4、結語
計算機科學與技術系語言設計類課程中的實驗課旨在鍛煉學生利用課程中學習到的理論知識解決實際問題。實踐教學中大作業(yè)是實現(xiàn)該目標的一種好方法,從初期的選題設計、中期的編碼調試到后期的結題文檔書寫等,都能夠起到很好的應用所學知識的作用。我們期望越來越多的學生能夠結合自身興趣和專業(yè),利用所學知識解決與自身密切相關的問題,切身體會到C-H-語言的實用魅力。因此,教師在教學過程中要注意調動學生的積極性,展現(xiàn)計算機在各個領域中的作用與魅力,從而激發(fā)學生的潛在興趣,使學生得到全方位的鍛煉,實現(xiàn)培養(yǎng)具有計算思維的復合型人才的宗旨。endprint