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