蔡敏?汪世義
摘要:“數(shù)據(jù)結(jié)構(gòu)”是計(jì)算機(jī)專業(yè)的一門核心課程,但實(shí)際教學(xué)效果卻往往難以令人滿意。結(jié)合應(yīng)用型高校學(xué)生的實(shí)際情況,在教學(xué)過程中進(jìn)行了多方面探索和改革,對(duì)培養(yǎng)和保持學(xué)生的學(xué)習(xí)興趣、提高學(xué)生的分析和解決問題的能力方面起到很好的效果。
關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);現(xiàn)場(chǎng)編程;聯(lián)動(dòng)教學(xué)改革;C語(yǔ)言
作者簡(jiǎn)介:蔡敏(1975-),男,安徽巢湖人,巢湖學(xué)院計(jì)算機(jī)與信息工程學(xué)院,講師;汪世義(1974-),男,安徽桐城人,巢湖學(xué)院計(jì)算機(jī)與信息工程學(xué)院,副教授。(安徽 合肥 238000)
基金項(xiàng)目:本文系巢湖學(xué)院教研項(xiàng)目(項(xiàng)目編號(hào):Jyxm201102)、安徽省省級(jí)質(zhì)量工程項(xiàng)目(項(xiàng)目編號(hào):20100970)的研究成果。
中圖分類號(hào):G642.0 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-0079(2013)07-0103-02
“數(shù)據(jù)結(jié)構(gòu)”課程對(duì)于培養(yǎng)應(yīng)用型計(jì)算機(jī)專業(yè)人才至關(guān)重要。但因其理論抽象、邏輯性強(qiáng)、對(duì)程序設(shè)計(jì)基礎(chǔ)要求比較高,學(xué)生普遍感覺這門課程難以理解,上機(jī)實(shí)踐也不知從何著手,對(duì)該課程缺乏應(yīng)有的興趣。王曉東教授指出:學(xué)生的學(xué)習(xí)興趣受專業(yè)基礎(chǔ)課程成績(jī)和對(duì)課程學(xué)習(xí)重要性認(rèn)識(shí)的影響,增加實(shí)踐性教學(xué)和以案例為先導(dǎo)的理論課教學(xué)方式更有利于提高學(xué)生的學(xué)習(xí)興趣。[1]本文以此為指導(dǎo)思想,開展了一系列教學(xué)改革探索。
一、與C編程語(yǔ)言聯(lián)動(dòng)改革
學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)離不開編程。所學(xué)的理論只有落實(shí)到程序?qū)崿F(xiàn)上,學(xué)生才會(huì)真正感到“數(shù)據(jù)結(jié)構(gòu)”課程的用處。以前教師只試圖通過一些有趣或?qū)嵱玫睦觼?lái)激發(fā)學(xué)生學(xué)習(xí)興趣,如猴子選大王、24點(diǎn)游戲等問題,但這種興趣并不能成為學(xué)生嘗試編程實(shí)現(xiàn)的動(dòng)力,其根本原因不是學(xué)生偷懶,而是他們的編程基礎(chǔ)比較差。在這種情形下,要求學(xué)生運(yùn)用理論去解決實(shí)際問題是不切實(shí)際的。因此,如果只是單純對(duì)“數(shù)據(jù)結(jié)構(gòu)”教學(xué)進(jìn)行改革,不解決學(xué)生編程基礎(chǔ)差的問題,改革必定難以取得成功。我校開設(shè)的“數(shù)據(jù)結(jié)構(gòu)”以C語(yǔ)言為描述工具的,因此對(duì)“數(shù)據(jù)結(jié)構(gòu)”與“C語(yǔ)言”兩門課程進(jìn)行了聯(lián)動(dòng)教學(xué)改革。
有的教師課堂駕馭能力較好,教學(xué)也非常負(fù)責(zé),但在C語(yǔ)言教學(xué)過程中,有意或無(wú)意把公共C語(yǔ)言等級(jí)考試的大綱當(dāng)作計(jì)算機(jī)專業(yè)C語(yǔ)言教學(xué)大綱來(lái)開展教學(xué)。他們?cè)诮虒W(xué)中比較注重語(yǔ)法細(xì)節(jié)的教學(xué),沒有將教學(xué)重點(diǎn)放在算法上。這種教學(xué)對(duì)提高非計(jì)算機(jī)上專業(yè)學(xué)生等級(jí)考試通過率效果非常顯著,但對(duì)于計(jì)算機(jī)專業(yè)學(xué)生卻效果不好。
C語(yǔ)言本身概念復(fù)雜、規(guī)則繁多、靈活而易錯(cuò),在教學(xué)過程中要“淡化語(yǔ)法規(guī)則,注重算法,以練代記”。提高編程能力的唯一途徑就是不斷編程,只有在反復(fù)實(shí)踐中才能掌握并靈活使用諸多繁雜的規(guī)則。把語(yǔ)法知識(shí)分為三類,第一類是教師須重點(diǎn)講解的語(yǔ)法,比如for語(yǔ)句,應(yīng)重點(diǎn)講解其結(jié)構(gòu)以及嵌套方法,并輔以足夠的練習(xí);第二類是非重點(diǎn)語(yǔ)法,這類語(yǔ)法不應(yīng)占用課堂時(shí)間,比如for語(yǔ)句的各種省略形式,如果實(shí)踐中遇到需使用這類語(yǔ)法的情況,可引導(dǎo)學(xué)生自主學(xué)習(xí);第三類是盡量不用的語(yǔ)法,主張?jiān)诰幊虝r(shí)使用簡(jiǎn)單明了的語(yǔ)句,比如在表達(dá)式里要求不用(i++)+(++i)+(i++)形式。
過度地強(qiáng)調(diào)語(yǔ)法一方面偏離了計(jì)算機(jī)專業(yè)教學(xué)目標(biāo),另一方面占據(jù)了過多課時(shí),使得后面的指針、結(jié)構(gòu)體等內(nèi)容得不到充分學(xué)習(xí),而這些內(nèi)容恰恰是C語(yǔ)言的難點(diǎn)和精華,也是數(shù)據(jù)結(jié)構(gòu)的重要基礎(chǔ)。缺乏這些知識(shí),將很難理解數(shù)據(jù)結(jié)構(gòu)。
二、數(shù)據(jù)結(jié)構(gòu)教學(xué)改革
1.一題多解、一題多變、一題多用
教師在講解課本算法時(shí)要廣開思路,不能就題論題,應(yīng)適當(dāng)加以擴(kuò)展、發(fā)散,盡量做到一題多解、一題多變、一題多用。這既有利于學(xué)生更透徹地理解課本算法,又能開闊學(xué)生思維,激發(fā)學(xué)生積極思考。實(shí)踐表明,這種方法課堂氣氛熱烈,學(xué)生參與度高。
例如課本例題:有兩個(gè)順序表LA和LB,其元素均為非遞減有序排列,試編寫一個(gè)算法,將它們合并成一個(gè)順序表LC,要求LC也是非遞減有序排列。[2]
課本算法思路是:首先根據(jù)LA和LB中數(shù)據(jù)元素個(gè)數(shù)之和,為L(zhǎng)C分配空間;其次依次從表頭到表尾掃描LA和LB中元素,比較它們當(dāng)前元素的值,將值較小者插入LC中,直到其中一個(gè)順序表掃描完畢;最后將另一順序表中剩余元素逐個(gè)插入LC中。
對(duì)此例題準(zhǔn)備了兩個(gè)發(fā)散點(diǎn)。發(fā)散點(diǎn)一:如果希望LC合并后的結(jié)果是非遞增有序排列,經(jīng)討論得到可得到兩種辦法,一種是掃描方向不變,而把插入方向反過來(lái),即從表尾往表頭方向插入;另一種是插入方向不變,把掃描方向反過來(lái),但每次將值較大者插入到LC。如果把掃描和插入方向都反過來(lái),每次比較時(shí)將值較大者插入LC,就可以得到原題另一解法。發(fā)散點(diǎn)二:課本算法使用了3個(gè)循環(huán),其中后兩個(gè)循環(huán)只會(huì)執(zhí)行其中一個(gè),那么可不可以只要一個(gè)循環(huán)就能達(dá)到目的呢?[3]首先帶學(xué)生分析為什么課本算法要三個(gè)循環(huán)。這是因?yàn)榈谝粋€(gè)循環(huán)后必有一個(gè)順序表中會(huì)有剩余元素。要想在一個(gè)循環(huán)就能實(shí)現(xiàn),必須在這個(gè)循環(huán)內(nèi)讓所有元素都能插入到LC中。方法是在兩個(gè)順序表尾各加一個(gè)無(wú)窮大。注意控制循環(huán)條件,不要把無(wú)窮大也插入到LC中了。
可以發(fā)散的例子很多,比如再講二分查找時(shí),可以發(fā)散到三分查找,也會(huì)引發(fā)有趣的討論。再比如折半查找還可以用來(lái)迅速找到第k小的元素,等等。
2. 適當(dāng)采用現(xiàn)場(chǎng)編程示范
很多學(xué)生反映上課算法思路能聽懂,許多問題他們心里知道如何去解決問題,但就是不知道如何用編程語(yǔ)言或算法表達(dá)出來(lái)。教師可利用多媒體教室,在課堂上可適當(dāng)采用現(xiàn)場(chǎng)編程方式。[4]這種方法可以讓學(xué)生見習(xí)教師把自己的思路轉(zhuǎn)變成代碼的全過程。程序從無(wú)到有,到最終運(yùn)行通過,對(duì)學(xué)生編寫和調(diào)試程序起到很好的示范作用。C語(yǔ)言教學(xué)中涉及的程序通常較短,最好能讓學(xué)生主寫,而數(shù)據(jù)結(jié)構(gòu)程序通常比較長(zhǎng),也更復(fù)雜一些,可由教師來(lái)主寫,邊寫邊講解。教師也可故意制造一些問題,由學(xué)生積極獻(xiàn)計(jì)獻(xiàn)策加以解決?,F(xiàn)場(chǎng)編序雖然比較耗費(fèi)課時(shí),但適當(dāng)示范還是必要的。
例如猴子選大王問題,教師先帶著學(xué)生先把算法總體思想寫出來(lái),這個(gè)算法不依賴于具體的存儲(chǔ)結(jié)構(gòu)。接下來(lái)分別用順序結(jié)構(gòu)和鏈?zhǔn)浇Y(jié)構(gòu)加以實(shí)現(xiàn)。這對(duì)學(xué)生深刻理解緒論中“算法的設(shè)計(jì)只取決于邏輯結(jié)構(gòu),而算法的實(shí)現(xiàn)則依賴于具體的存儲(chǔ)結(jié)構(gòu)”這句話很有幫助。也能讓學(xué)生體會(huì)到用類C語(yǔ)言表示的算法與用C語(yǔ)言實(shí)現(xiàn)的程序的區(qū)別。同時(shí),學(xué)生也能認(rèn)識(shí)到,算法并非只是抽象的理論,而是可以運(yùn)用到實(shí)踐中的。
經(jīng)過這次課的講解,直接把課本算法照抄到電腦上運(yùn)行的學(xué)生大大減少,不少學(xué)生課后按自己的思路,寫出了程序,極大地增強(qiáng)了學(xué)生編程的自信心。
3.培養(yǎng)學(xué)生編程意志和自信心
意志與興趣并不矛盾,有興趣固然是好,但沒有產(chǎn)生興趣之前,意志就顯得特別重要了。當(dāng)學(xué)生能解決很多問題時(shí),往往就有興趣了,至少不覺得痛苦。學(xué)習(xí)編程也一樣不可能一帆風(fēng)順,雖然教師布置任務(wù)時(shí)總希望由易到難,循序漸進(jìn),但實(shí)踐中總會(huì)遇到一些相對(duì)復(fù)雜的問題,需要花費(fèi)較多時(shí)間和精力。如果學(xué)生沒有堅(jiān)強(qiáng)的編程意志,知難而退,最終也難以成為高質(zhì)量的應(yīng)用型人才。比如24點(diǎn)游戲,因?yàn)閾?dān)心學(xué)生意志力不夠會(huì)中途放棄,所以采用逐次增加任務(wù)的方法。首先讓學(xué)生實(shí)現(xiàn)課本表達(dá)式求值算法,然后要求他們修改程序和結(jié)構(gòu),隨機(jī)產(chǎn)生1至13的整數(shù),當(dāng)輸入一個(gè)表達(dá)式后,能判斷是否正確,最后再要求如果用戶輸入“?”應(yīng)能給出一種解,或提示無(wú)解。等全部實(shí)現(xiàn)完之后,學(xué)生發(fā)現(xiàn)已經(jīng)寫了幾百行程序,特別有成就感。學(xué)生在完成該課程設(shè)計(jì)題的過程中,經(jīng)歷了反復(fù)認(rèn)真的思考,耐心的調(diào)試,對(duì)培養(yǎng)學(xué)生編程意志和編程自信心起到很好的效果。
三、其他輔助措施
1.及時(shí)給學(xué)生提供幫助
由于每次上機(jī)實(shí)驗(yàn)的學(xué)生數(shù)較多,有些學(xué)生的問題不能得到及時(shí)解決,如果學(xué)生問題積壓多了,也會(huì)逐漸失去興趣。教師可通過電子郵件、QQ等方式給他們提供及時(shí)幫助,還可以開展編程興趣小組,讓編程能力強(qiáng)的同學(xué)幫助編程基礎(chǔ)差的同學(xué),也為他們相互交流編程心得提供了方便。
2.嚴(yán)格考核方式
在教學(xué)過程中發(fā)現(xiàn),一些學(xué)生不愿獨(dú)立思考,把同學(xué)做好的作業(yè)直接拷貝過來(lái)。因?yàn)閷W(xué)生數(shù)較多,難以逐個(gè)甄別,為此教師采取了隨機(jī)抽查答辯的方式。每次抽取一半學(xué)生當(dāng)面給教師解釋所提交的程序的部分代碼,如果不能正確解答,則本次作業(yè)被視為不合格。這種方式至少能鞭策學(xué)生設(shè)法弄懂拷貝來(lái)的程序,這也是一種收獲,而大部分學(xué)生都能獨(dú)立地或經(jīng)過與同學(xué)討論完成作業(yè)。
四、結(jié)束語(yǔ)
興趣是學(xué)習(xí)的內(nèi)在動(dòng)力。只有讓學(xué)生對(duì)編程產(chǎn)生興趣,學(xué)生才有可能主動(dòng)把理論應(yīng)用于實(shí)踐,主動(dòng)去提高自己解決問題的能力,以后的教學(xué)才能事半功倍,應(yīng)用型計(jì)算機(jī)專業(yè)人才培養(yǎng)目標(biāo)才能最終得以實(shí)現(xiàn)。好的編程基礎(chǔ)是學(xué)習(xí)興趣的前提條件,如何使學(xué)生產(chǎn)生和保持編程興趣,值得進(jìn)一步深入研究。
參考文獻(xiàn):
[1].王曉東,吳英杰,等.算法與數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)興趣影響因素分析[J].計(jì)算機(jī)教育,2010,(12):73-76.
[2]嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)[M].北京:清華大學(xué)出版社,2007,
4:26.
[3]T.Cormen,C.Leiserson,R.Rivest,等.算法導(dǎo)論[M].潘金貴,等,譯.
北京:機(jī)械工業(yè)出版社,2006.
[4] 董洪偉.數(shù)據(jù)結(jié)構(gòu)課程的教學(xué)改革初探[J].無(wú)錫教育學(xué)院學(xué)報(bào),
2005,(1):56.
(責(zé)任編輯:宋秀麗)