趙君喆,鐘良驥,盧社階,聞 彬,戴文華
(湖北科技學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,湖北 咸寧 437100)
C語(yǔ)言作為一門公共基礎(chǔ)課以及部分專業(yè)的專業(yè)基礎(chǔ)課,其重要性不言而喻。站在行業(yè)角度,C語(yǔ)言所包含的知識(shí)點(diǎn)分別屬于科學(xué)、技能和藝術(shù)這三個(gè)范疇。
從科學(xué)層面上看,C語(yǔ)言作為形式語(yǔ)言的典范,其語(yǔ)法、語(yǔ)義、編譯等相關(guān)知識(shí)為《編譯原理》、《人工智能》等專業(yè)課提供了基礎(chǔ)的理論引導(dǎo)。而C語(yǔ)言課程中對(duì)“程序”的詮釋和理解,是《數(shù)據(jù)結(jié)構(gòu)》、《算法設(shè)計(jì)與分析》等課程的理論基礎(chǔ)。
從技能層面上看,在學(xué)習(xí)C語(yǔ)言的過(guò)程中,會(huì)掌握多項(xiàng)編程技能,其中包括:基本的邏輯設(shè)計(jì)能力、自上而下的思維方法、代碼調(diào)試測(cè)試能力、庫(kù)的使用能力、幫助文檔的閱讀能力等等。這些編程技能對(duì)學(xué)生將來(lái)在匯編、Java、C#等各種低級(jí)或高級(jí)語(yǔ)言的學(xué)習(xí)過(guò)程中能起到重要幫助。
從藝術(shù)層面上看,C語(yǔ)言學(xué)習(xí)到一定境界后,會(huì)讓學(xué)習(xí)者沉迷于精巧的實(shí)現(xiàn)方式、陶醉于高效的算法、追求高擴(kuò)展性的架構(gòu)、無(wú)止境地重構(gòu)高重用性的模塊、不斷使用嚴(yán)苛的規(guī)范提高C代碼的可維護(hù)性。當(dāng)學(xué)習(xí)者開(kāi)始用藝術(shù)的眼光來(lái)看待C語(yǔ)言程序設(shè)計(jì)時(shí),他就具備一些基本的軟件開(kāi)發(fā)工程師的素質(zhì)了。
傳統(tǒng)的C語(yǔ)言教學(xué)方法遵循“培養(yǎng)目標(biāo)”→“知識(shí)能力”→“教學(xué)大綱”→“教案”的脈絡(luò)體系,以知識(shí)點(diǎn)為中心進(jìn)行課堂講授和實(shí)踐教學(xué)[1]。高校中,絕大多數(shù)C語(yǔ)言的課程都是從語(yǔ)法開(kāi)始,由淺及深地講授語(yǔ)言特性,一般按照?qǐng)D1所示的順序安排教學(xué)內(nèi)容[2]。
圖1 傳統(tǒng)C語(yǔ)言教學(xué)內(nèi)容講授順序
作為學(xué)習(xí)計(jì)算機(jī)語(yǔ)言的啟蒙教程,C語(yǔ)言課程往往被安排在第一學(xué)期或第二學(xué)期。所以即便是計(jì)算機(jī)類專業(yè)的本科生在學(xué)習(xí)C語(yǔ)言時(shí),對(duì)計(jì)算機(jī)的理解也僅僅停留在普通大眾的層面。作者對(duì)普通人在計(jì)算機(jī)上的興趣來(lái)源,歸納為三個(gè)方面:功能體驗(yàn)、感官體驗(yàn)和信息體驗(yàn)。從C語(yǔ)言的特性來(lái)看,用C語(yǔ)言進(jìn)行程序設(shè)計(jì)可以給人非常良好的功能體驗(yàn)。因此從功能的層面著手,C語(yǔ)言可能讓普通人產(chǎn)生濃厚的興趣。
圖1所示的教學(xué)流程從抽象的理論開(kāi)始,對(duì)絕大多數(shù)學(xué)生而言是枯燥無(wú)味的。傳統(tǒng)的C語(yǔ)言教學(xué)中,在學(xué)習(xí)I/O操作之前,學(xué)生們幾乎無(wú)法通過(guò)實(shí)踐行為獲得任何積極的功能體驗(yàn)和感官體驗(yàn)。這樣的教學(xué)流程,使得很多學(xué)生對(duì)C語(yǔ)言的學(xué)習(xí)興趣大幅降低,甚至開(kāi)始反感該門課程。
傳統(tǒng)C語(yǔ)言教學(xué)中,實(shí)踐項(xiàng)目與時(shí)代追求的不符也是導(dǎo)致學(xué)生對(duì)C語(yǔ)言學(xué)習(xí)興趣打折的一個(gè)重要因素。在蘋果公司利用極致的感官體驗(yàn)吸引龐大的年輕人群的今天,一些C語(yǔ)言教學(xué)文獻(xiàn)還將“雞兔同籠”、“韓信點(diǎn)兵”、“猴子分桃”等實(shí)踐項(xiàng)目作為激發(fā)學(xué)習(xí)興趣的典范[3],這說(shuō)明當(dāng)前的C語(yǔ)言教學(xué)理念與時(shí)代嚴(yán)重脫節(jié)是一種普遍現(xiàn)象。分析和了解當(dāng)代學(xué)生的興趣追求也是對(duì)一名教育工作者的基本要求。
興趣是最好的老師,如何在C語(yǔ)言教學(xué)的初期就以興趣對(duì)學(xué)生進(jìn)行引導(dǎo),并能在整個(gè)教學(xué)過(guò)程中保持學(xué)生濃厚的學(xué)習(xí)興趣,這是該課程教學(xué)成功與否的關(guān)鍵。作者在實(shí)際教學(xué)中,通過(guò)調(diào)整學(xué)習(xí)內(nèi)容并設(shè)置一些趣味性較強(qiáng)的實(shí)踐案例,在提高學(xué)生對(duì)C語(yǔ)言的學(xué)習(xí)興趣上取得了較好的教學(xué)效果。
自Windows 95廣泛流行以來(lái),帶有GUI(圖形用戶接口)的操作系統(tǒng)在PC機(jī)上開(kāi)始占據(jù)絕對(duì)的統(tǒng)治地位。而GUI的發(fā)展日新月異,逐漸成為桌面操作系統(tǒng)的核心競(jìng)爭(zhēng)力。隨著GUI的發(fā)展,命令行操作方式在桌面操作系統(tǒng)上逐步走向消亡。
當(dāng)代的學(xué)生已基本習(xí)慣了界面友好的GUI,鮮有命令行操作系統(tǒng)(如MS-DOS)的使用經(jīng)歷。而C語(yǔ)言的入門難以在GUI的環(huán)境中開(kāi)展,這為C語(yǔ)言的教學(xué)帶來(lái)了巨大挑戰(zhàn)。如何在簡(jiǎn)陋的命令行操作環(huán)境下為學(xué)生帶來(lái)興趣刺激,一直以來(lái)都是C語(yǔ)言教學(xué)中難以解決的重要課題。
因此,我們要分析研究現(xiàn)代計(jì)算機(jī)應(yīng)用給人們帶來(lái)興趣的關(guān)鍵點(diǎn)是什么,而這些關(guān)鍵點(diǎn)正是引導(dǎo)學(xué)生學(xué)習(xí)興趣的重要因素。作者通過(guò)問(wèn)卷調(diào)查的方式,針對(duì)在校學(xué)生統(tǒng)計(jì)他們對(duì)一款應(yīng)用軟件最關(guān)注的特性,其調(diào)查結(jié)果如圖2所示。
圖2 對(duì)應(yīng)用軟件最關(guān)注的特性的調(diào)查結(jié)果
作者認(rèn)為,對(duì)一款應(yīng)用軟件的主要關(guān)注點(diǎn)可以從側(cè)面反映出學(xué)生對(duì)程序設(shè)計(jì)的興趣點(diǎn)。因此可以先從實(shí)用性入手,改進(jìn)C語(yǔ)言的教學(xué)案例,保持學(xué)生較高的學(xué)習(xí)積極性。一個(gè)具有實(shí)用性的程序必然有輸入數(shù)據(jù)和輸出結(jié)果,而實(shí)現(xiàn)這樣的程序就要求學(xué)生掌握基本的I/O操作。將I/O操作提前到C語(yǔ)言教學(xué)的第一章可以保證學(xué)生在C語(yǔ)言學(xué)習(xí)的一開(kāi)始就能接觸到具體的程序,避免傳統(tǒng)教學(xué)進(jìn)程中一開(kāi)始學(xué)習(xí)抽象概念而影響學(xué)習(xí)興趣。將I/O操作提到起始章節(jié)特別要注意培養(yǎng)學(xué)生對(duì)程序的理解,尤其是在講解輸入語(yǔ)句的同時(shí),要將變量、常量的知識(shí)穿插其中,要求學(xué)生在理解的基礎(chǔ)上掌握I/O庫(kù)函數(shù)的應(yīng)用。
掌握基本的I/O操作還不足以保持學(xué)生的學(xué)習(xí)興趣,一定要將學(xué)習(xí)內(nèi)容和學(xué)生的日常接觸關(guān)聯(lián)起來(lái)。當(dāng)代絕大多數(shù)大學(xué)生都有一定的計(jì)算機(jī)及操作系統(tǒng)使用基礎(chǔ),因此對(duì)操作系統(tǒng)的文件處理比較熟悉。如果C語(yǔ)言教學(xué)程序能與學(xué)生日常接觸的文件相關(guān)聯(lián),則可有效地激發(fā)學(xué)習(xí)興趣。事實(shí)上,和學(xué)生關(guān)系最緊密的文件操作也屬于I/O操作的一部分,但文件操作章節(jié)在傳統(tǒng)的教學(xué)安排上一般放在課程的最后,不被師生們重視。作者嘗試將基本的文件操作提前到I/O操作章節(jié)一同學(xué)習(xí),這樣就可以構(gòu)造很多操作文件的案例,給學(xué)生熟悉的感觀,從而取得良好的教學(xué)效果。
在前移的I/O操作和文件操作的實(shí)際教學(xué)中,特別要注意屏蔽字符串等后續(xù)知識(shí),構(gòu)造的教學(xué)案例也不應(yīng)涉及字符串。原因是在這個(gè)階段,學(xué)生基本上無(wú)法理解字符串的本質(zhì),若是教學(xué)中不慎提及此方面的內(nèi)容,會(huì)讓學(xué)生產(chǎn)生迷惑,影響教學(xué)質(zhì)量。因此I/O操作和文件操作中與字符串相關(guān)的知識(shí)應(yīng)放在字符串章節(jié)講解。
僅通過(guò)前移I/O操作和文件操作來(lái)改善教學(xué)程序的實(shí)用性還不夠,還應(yīng)針對(duì)學(xué)生其他的興趣點(diǎn)優(yōu)化教學(xué)方案。盡管命令行操作環(huán)境很難在圖形和色彩方面給學(xué)習(xí)者帶來(lái)感官上的刺激,但還是可以采用一些方法提升這種環(huán)境的動(dòng)態(tài)感、可操作性和實(shí)用性。
學(xué)生在通過(guò)I/O和文件操作的學(xué)習(xí)過(guò)程中,掌握了C語(yǔ)言庫(kù)函數(shù)的使用。在此基礎(chǔ)上,讓學(xué)生掌握一些強(qiáng)大而有趣的庫(kù)函數(shù),可以讓某些教學(xué)程序產(chǎn)生動(dòng)態(tài)感。庫(kù)函數(shù)system和Sleep是實(shí)現(xiàn)命令行程序動(dòng)態(tài)感的關(guān)鍵,函數(shù)system要求包含頭文件stdlib.h,而函數(shù)Sleep要求包含頭文件Windows.h。單線程環(huán)境下,用system函數(shù)調(diào)用Windows的清屏命令,結(jié)合標(biāo)準(zhǔn)輸出函數(shù)以及Sleep睡眠函數(shù)可以實(shí)現(xiàn)控制臺(tái)窗口內(nèi)容的實(shí)時(shí)刷新效果。學(xué)生通過(guò)打印字符在控制臺(tái)窗口上構(gòu)造圖案,然后不斷刷新窗口內(nèi)容以實(shí)現(xiàn)動(dòng)畫效果。
掌握了C語(yǔ)言動(dòng)態(tài)刷屏的方法之后,就可以將一些生活中有趣的小游戲或小軟件改造為C語(yǔ)言的教學(xué)案例,極大地激發(fā)學(xué)生的學(xué)習(xí)興趣。例如《植物大戰(zhàn)僵尸》是近年來(lái)一款風(fēng)靡全球的益智策略類單機(jī)游戲,玩家通過(guò)武裝多種植物切換不同的功能,快速有效地把僵尸阻擋在入侵的道路上。在學(xué)習(xí)了二維數(shù)組之后,學(xué)生完全可以在控制臺(tái)環(huán)境中簡(jiǎn)單模擬《植物大戰(zhàn)僵尸》的游戲場(chǎng)景,下面給出該程序案例的實(shí)現(xiàn)思路。
用一個(gè)循環(huán)和固定休眠時(shí)間來(lái)衡量一個(gè)基本時(shí)間周期,屏幕刷新間隔、僵尸行進(jìn)速度、子彈移動(dòng)速度通過(guò)設(shè)定不同的時(shí)間周期來(lái)實(shí)現(xiàn)。邏輯代碼如下:
用不同的數(shù)值代表不同的植物、僵尸和子彈,如用正的生命值表示僵尸,不同的僵尸有不同的生命值,用負(fù)值表示子彈,代表中彈后僵尸減少的生命值,植物則用一系列超大值表示。這樣就可以在一個(gè)二維數(shù)組上模擬出游戲場(chǎng)景的邏輯狀態(tài),隨著時(shí)間周期的流逝,表示僵尸、子彈的數(shù)值在二維數(shù)組上不斷移動(dòng),最后用不同的字符將這樣角色打印出來(lái)即可。以下是部分定義語(yǔ)句。
定義待出場(chǎng)僵尸列表
正常情況下游戲自動(dòng)進(jìn)行,僵尸不斷出現(xiàn)并行進(jìn),每隔一定的時(shí)鐘周期允許用戶進(jìn)入一次操作界面來(lái)購(gòu)買、種植或升級(jí)攻擊僵尸的植物,如圖3所示。
圖3 進(jìn)入操作界面
用戶輸入操作之后恢復(fù)游戲自動(dòng)運(yùn)行周期,如圖4所示。如果消滅所有的僵尸則游戲勝利,如果有任何僵尸最后走出場(chǎng)景則游戲失敗。
以上案例覆蓋了I/O操作、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、數(shù)組、庫(kù)函數(shù)應(yīng)用等各種知識(shí)。程序還可以根據(jù)功能逐步擴(kuò)展,融入后續(xù)的函數(shù)、指針、結(jié)構(gòu)體等知識(shí)。類似的案例覆蓋知識(shí)面廣、貼近學(xué)生生活同時(shí)具有很強(qiáng)的趣味性,因此在教學(xué)中引入類似的案例作為學(xué)生的綜合實(shí)踐性項(xiàng)目,可以長(zhǎng)期保持學(xué)生的學(xué)習(xí)興趣。
圖4 游戲運(yùn)行過(guò)程
興趣是最好的老師,C語(yǔ)言教學(xué)中一定要牢牢把握學(xué)生的學(xué)習(xí)興趣。保持學(xué)生學(xué)習(xí)興趣的關(guān)鍵在于教學(xué)內(nèi)容,通過(guò)提前學(xué)習(xí)I/O操作、文件操作以及部分庫(kù)函數(shù),可以讓學(xué)生在課程初期就能接觸到實(shí)用、有趣的程序案例。從生活中尋找一些讓學(xué)生感興趣的案例,將這些案例設(shè)計(jì)成C語(yǔ)言的實(shí)踐項(xiàng)目,這樣才能使C語(yǔ)言教學(xué)與當(dāng)代學(xué)生的思想不脫節(jié),才能讓學(xué)生保持學(xué)習(xí)的動(dòng)力。
[1]馮運(yùn)仿.《C語(yǔ)言程序設(shè)計(jì)》課程教學(xué)模式的研究與實(shí)踐[J].福建電腦,2012,28(4):203~205.
[2]譚浩強(qiáng).C程序設(shè)計(jì)[M].(第4版).北京:清華大學(xué)出版社,2010.17~22.
[3]侯宏霞.提高“C語(yǔ)言程序設(shè)計(jì)”課程教學(xué)質(zhì)量的探索與實(shí)踐[J].內(nèi)蒙古師范大學(xué)學(xué)報(bào)(教育科學(xué)版),2012,25(1):125 ~127.