商新娜,張寶森,孫連英,楊繼萍
(1.北京聯(lián)合大學(xué) 信息學(xué)院,北京 100101;2.北京林業(yè)大學(xué) 信息學(xué)院,北京 100083;3.北京聯(lián)合大學(xué) 北京市信息服務(wù)工程重點實驗室,北京 100101)
程序設(shè)計基礎(chǔ)課程是計算機科學(xué)與技術(shù)、軟件工程、通信工程、電子信息工程等相關(guān)專業(yè)學(xué)生的專業(yè)基礎(chǔ)課程,是學(xué)生在大學(xué)階段接觸的第一門程序設(shè)計課程。
程序設(shè)計基礎(chǔ)課程的目標,從狹義上來講,是讓學(xué)生掌握一門編程語言,能夠運用該語言解決簡單的問題,但更深層的目標應(yīng)當(dāng)是培養(yǎng)學(xué)生程序設(shè)計的思想、描述客觀事物的方法、確定解決問題的方案,并用正確的程序設(shè)計語言表達,最終調(diào)試出正確的程序。
很多文獻都指出程序設(shè)計基礎(chǔ)課程教學(xué)有很多困難,并進行了多方面的改革。在教學(xué)計劃方面,采用明確教學(xué)目標、精選教材[1-2]、進行分層教學(xué)、采用甲乙類教學(xué)方案等[3];在教授方面,采用案例驅(qū)動[4]、項目驅(qū)動[5];在實驗方面,精選實驗題目、增加答辯環(huán)節(jié)等[6];在考核方面,采用上機考試、網(wǎng)絡(luò)考試平臺[7]等。
程序設(shè)計課程難度大的深層的原因有兩個:
(1) 學(xué)生計算機基礎(chǔ)知識薄弱。雖然學(xué)生能夠上網(wǎng),擁有手機、平板電腦,但學(xué)生對信息的存儲與表達一無所知,幾乎仍然是計算機盲。在《高等學(xué)校計算機科學(xué)與技術(shù)專業(yè)核心課程教學(xué)實施方案》[12]中關(guān)于程序設(shè)計課程有明確的建議:學(xué)生應(yīng)該先修過或已經(jīng)掌握計算機導(dǎo)論或計算機基礎(chǔ)主要內(nèi)容,了解計算機的發(fā)展過程,理解信息的存儲與表達方法,理解計算機的基本構(gòu)成和工作原理,并能夠熟練地操作計算機。這個要求與學(xué)生的現(xiàn)狀有明顯差距。
(2) 與其他課程相比,程序設(shè)計課程有它獨特的鮮明特色。在學(xué)習(xí)過程中,學(xué)生的角色已經(jīng)發(fā)生了變化,不再是被動的知識接受者,而是運用知識進行富于創(chuàng)造性工作的人。學(xué)生就應(yīng)該像一個電影導(dǎo)演,要自己選擇演員(選擇變量)、設(shè)計演員的動作和戲劇情節(jié)場景(過程與算法),還要實地拍攝(調(diào)試修改)。學(xué)生從慣性的被動接受知識,轉(zhuǎn)變?yōu)檫M行能動的創(chuàng)造勞動。角色的轉(zhuǎn)變,是程序設(shè)計課程面臨很多困難的重要因素。
教改的目標是為了在有限的學(xué)時內(nèi)完成程序設(shè)計基礎(chǔ)課程的教學(xué)目標,激發(fā)學(xué)生的學(xué)習(xí)熱情,讓學(xué)生主動學(xué)習(xí)程序設(shè)計知識。結(jié)合近年來社會上對于軟硬件結(jié)合開發(fā)旺盛的發(fā)展和需求,課題組自主研發(fā)了硬件設(shè)備CCX-M256點陣顯示器,通過對硬件設(shè)備的控制編程,讓學(xué)生了解軟硬件結(jié)合開發(fā)的思路,體會C語言的應(yīng)用情況,也為后續(xù)的操作系統(tǒng)、硬件控制、移動應(yīng)用開發(fā)等課程的學(xué)習(xí)打下基礎(chǔ)。
教學(xué)實施中,仍然以傳統(tǒng)的知識點貫穿整個教學(xué)過程。將實踐環(huán)節(jié)分為2個部分,前半部分為基礎(chǔ)知識點練習(xí)和應(yīng)用,通過減少驗證性實驗、增加設(shè)計性實驗來增強學(xué)生運用知識的能力。后半部分為軟硬件結(jié)合實驗,經(jīng)過精心設(shè)計實驗過程和內(nèi)容,由淺入深,綜合應(yīng)用前面學(xué)到的知識點,在硬件設(shè)備上調(diào)試應(yīng)用。
自主設(shè)計硬件編程設(shè)備CCX-M256點陣顯示器(見圖1),由USB接口芯片、列寄存器、行譯碼和點陣顯示模塊組成。其硬件結(jié)構(gòu)如圖2所示。運行原理是將某一行的列數(shù)據(jù)(16位)發(fā)送給列寄存器,將行的序數(shù)發(fā)給行序寄存器以選擇控制某行。采用逐行掃描的方式,控制點陣進行工作,即顯示文字、圖案和動畫。CCX-M256點陣顯示器簡單小巧,與計算機連接只需USB口,可以在多種編程環(huán)境下工作,如Visual C++等。
圖1 CCX—M256點陣顯示器外觀
圖2 CCX-M256點陣顯示器硬件框圖
為了屏蔽復(fù)雜的硬件知識和電路原理,讓學(xué)生把注意力集中在軟硬件結(jié)合開發(fā)的應(yīng)用上,自研設(shè)備提供了很多API接口函數(shù),學(xué)生了解函數(shù)功能和調(diào)用方式后,就可以進行編程控制硬件設(shè)備。
3.2.1 單行顯示原理
控制一行中一個或某幾個LED亮,需要將相應(yīng)的編碼一次性輸出。例如,如果要點亮顯示器第3行的第5個LED,則行數(shù)據(jù)應(yīng)當(dāng)為2,該行各列的編碼為00001000 00000000,表示為16進制為0x08和0x00。定義數(shù)組msg存儲行數(shù)據(jù),輸出代碼應(yīng)當(dāng)是:
unsigned char msg[4];
msg[0]=0x08;
msg[1]=0x00;
msg[2]=2;
msg[3]=0; // 附加一個無符號數(shù)據(jù),為電路需要
然后調(diào)用API函數(shù)將數(shù)組msg發(fā)給目標設(shè)備。
3.2.2 漢字或畫面顯示原理
針對顯示器的硬件特點,漢字與圖形的編碼都有16行。每行的16位點陣碼對應(yīng)個2字節(jié),可用2個無符號字符型數(shù)據(jù)存儲。若每行的字節(jié)數(shù)據(jù)中用0表示LED不亮,用1表示LED亮,則需2個無符號字符型數(shù)據(jù),可以用C語言的16進制數(shù)據(jù)存儲。例如漢字的“計”字,通過點陣換算,形成16×2的二維無符號數(shù)組,unsigned char data[32] ={0×00,0×40,0×40,0×40,0×20,0×40,0×20,0×40,0×00,0×40,0×00,0×44,0×F7,0×FE,0×10,0×40,0×10,0×40,0×10,0×40,0×10,0×40,0×12,0×40,0×14,0×40,0×18,0×40,0×10,0×40,0×00,0×40}將這個數(shù)組利用循環(huán)逐行發(fā)送給硬件設(shè)備,就可顯示漢字,如圖3所示。
圖3 漢字顯示效果
實際上,可以借助EXCEL和WORD快速實現(xiàn)字符編碼。例如對于漢字的“王”字,編碼過程見圖4所示。
圖4 漢字編碼
3.2.3 循環(huán)穩(wěn)定與速度控制
良好的循環(huán)可以對軟件的穩(wěn)定性和速度進行控制,也可以結(jié)合定時器完成速度控制,關(guān)于定時器的使用,可以參考有關(guān)著作[13]。CCX—M256點陣顯示器采用三重循環(huán)進行穩(wěn)定性和速度控制,其原理為:內(nèi)層循環(huán)完成漢字或一幅畫面的16行點陣輸出,中間層循環(huán)的循環(huán)次數(shù)完成畫面穩(wěn)定性或速度控制,循環(huán)次數(shù)越少速度越快。外層循環(huán)用于切換不同漢字或畫面的點陣數(shù)據(jù)。
3.3.1 字符滾動和切換
通過循環(huán)結(jié)構(gòu),控制多個字符和漢字的切換和滾動顯示,如顯示“北京歡迎你”這5個漢字,切換顯示的效果為5個字逐個顯示,中間有一定的時間間隔。滾動顯示分為垂直滾動和水平滾動,垂直滾動通過循環(huán)控制點陣數(shù)組按行滾動、送到緩沖區(qū)的次序不變實現(xiàn),而水平滾動通過循環(huán)控制全部16行數(shù)據(jù)按位循環(huán)移動一次移動1位的方法實現(xiàn)。
3.3.2 簡單動畫
通過設(shè)計2—n幅“畫面”的輪流顯示,實現(xiàn)簡單動畫顯示,如顯示一個海鷗飛翔的畫面,可以設(shè)計4幅圖畫,程序控制輪流顯示出來如圖5所示。
圖5 簡單動畫設(shè)計過程
3.3.3 圖形旋轉(zhuǎn)
通過循環(huán)控制數(shù)據(jù)矩陣,實現(xiàn)圖形的按“環(huán)”旋轉(zhuǎn),如圖6所示。
圖6 圖形旋轉(zhuǎn)
3.3.4 貪吃蛇
這是一個綜合應(yīng)用的案例,通過程序控制,實現(xiàn)貪吃蛇的運動、食物的隨機出現(xiàn)、計分、蛇身長度變化等控制,如圖7所示。
通過對硬件設(shè)備編程,強化了學(xué)生的編程基礎(chǔ),主要體現(xiàn)在以下幾個方面:
(1) 對數(shù)據(jù)類型的強化。通過對漢字和圖形的編碼輸出,學(xué)生自然地理解了無符號數(shù)據(jù)類型,并由此理解了其他類型數(shù)據(jù)。
圖7 貪吃蛇游戲設(shè)計及效果
(2) 對循環(huán)的強化。通過對漢字穩(wěn)定控制和動畫控制,學(xué)生掌握了三層循環(huán)結(jié)構(gòu),理解了循環(huán)的作用及循環(huán)要素對程序的控制。
(3) 對數(shù)組變換的強化。通過對16×16到16×2矩陣的轉(zhuǎn)換,學(xué)生理解了不同維度數(shù)據(jù)之間的關(guān)系,并對使用二進制表示事物的方法有所了解。
(4) 對函數(shù)的強化。采用模塊編程方法,學(xué)生體會函數(shù)的設(shè)計和使用,并對團隊協(xié)作開發(fā)過程有所了解。
(5) 對指針的強化。通過數(shù)組的變換和指針的移動,理解指針的奇妙和強大作用。在傳統(tǒng)教學(xué)中,這一直是難度很大的一個知識點。
(6) 對文件使用的強化。通過對漢字點陣庫的使用,使學(xué)生理解了二進制文件的操作及其便利。
該教學(xué)改革分別在2010級和2011級本科生的程序設(shè)計基礎(chǔ)課程中實施,取得了較好的教學(xué)反饋和效果。所有學(xué)生都在完成傳統(tǒng)實驗要求的基礎(chǔ)上參與軟硬件結(jié)合實驗。學(xué)生對于能通過C語言編程,在點陣顯示器上顯示出自己的名字并使它們動起來很有成就感。超過60%的學(xué)生完成了中等難度的軟硬件結(jié)合實驗,20%的學(xué)生對硬件編程產(chǎn)生了濃厚的興趣,根據(jù)自己的想法試探更高難度、更為復(fù)雜的軟硬件編程。
我院根據(jù)學(xué)生的學(xué)習(xí)和反饋情況,舉辦程序設(shè)計基礎(chǔ)大賽,以點陣顯示器為硬件載體,以軟硬件結(jié)合開發(fā)為主題,學(xué)生參與踴躍,作品形式和內(nèi)容都非常豐富,提高了程序設(shè)計基礎(chǔ)課程的影響力,激發(fā)了學(xué)生的學(xué)習(xí)興趣,活躍了學(xué)生的業(yè)余生活。
實踐教學(xué)是程序設(shè)計基礎(chǔ)課程的重要環(huán)節(jié),通過軟硬件結(jié)合開發(fā)的教學(xué)改革,提高了該課程的趣味性和實用性,對于提高學(xué)生的學(xué)習(xí)興趣、動手能力以及學(xué)習(xí)的自主性和創(chuàng)新性都發(fā)揮了積極的促進作用,是一項有益的教學(xué)改革。
[1] 李龍淼.《C 語言程序設(shè)計》教學(xué)改革實踐與探索[J].海南廣播電視大學(xué)學(xué)報,2012(2):138-142.
[2] 何雪芳.獨立學(xué)院計算機專業(yè)C 語言程序設(shè)計實踐教學(xué)的探索[J].科教文匯,2012(4):59-61.
[3] 章品正.“程序設(shè)計實踐環(huán)節(jié)”課程的教學(xué)改革[J].電氣電子教學(xué)學(xué)報,2012,34(3):66-68.
[4] 王繼東,趙瑞斌,陳桂林.計算機專業(yè)C語言程序設(shè)計課程教學(xué)改革探索[J].計算機時代,2012(2):54-57.
[5] 朱旻如,郭劍,朱立華.程序設(shè)計實踐課程教學(xué)改革探索[J].計算機教育,2010(22):109-115.
[6] 林勇.C語言課程設(shè)計的實踐教學(xué)探討[J].電腦知識與技術(shù),2010(29):8274-8276.
[7] 林震.高校C 語言程序設(shè)計實驗教學(xué)的改革與探索[J].科技信息,2011(27):581-582.
[8] 孫慧然,劉剛,孫靜波.“程序設(shè)計基礎(chǔ)課”理論與實驗教學(xué)的改革與實踐[J].實驗技術(shù)與管理,2012,29(4):299-230.
[9] 彭海云,馬占欣.基于PBL+競爭機制的“程序設(shè)計基礎(chǔ)”課程教學(xué)模式探究[J].實驗技術(shù)與管理,2012,29(6):174-177.
[10] 楊鋒英.程序設(shè)計基礎(chǔ)課程教學(xué)探索[J].計算機教育,2013(4):25-29.
[11] 耿國華.程序設(shè)計能力培養(yǎng)模式的探索與實踐[J].中國大學(xué)教學(xué),2009(3):30-32.
[12] 教育部高等學(xué)校計算機科學(xué)與技術(shù)教學(xué)指導(dǎo)委員會.高等學(xué)校計算機科學(xué)與技術(shù)專業(yè)核心課程教學(xué)實施方案[M].北京:高等教育出版社,2009.
[13] 張寶森.C語言程序設(shè)計習(xí)題解答和實訓(xùn)指導(dǎo)[M].北京:機械工業(yè)出版社,2010.