吳元斌
(重慶三峽學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院,萬州 404000)
提高C語言初學(xué)者編程能力的幾點(diǎn)措施
吳元斌
(重慶三峽學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院,萬州 404000)
如何提高C語言初學(xué)者的編程能力,是從事C語言教學(xué)的教師普遍重視且實(shí)現(xiàn)難度較大的教學(xué)目標(biāo)。對如何提高C語言初學(xué)者編程能力進(jìn)行探索,分析C語言初學(xué)者編程能力差的主要原因,提出提高初學(xué)者編程能力的四點(diǎn)具體方法與步驟,并進(jìn)行詳細(xì)分析,這些方法能有效地提高學(xué)生編程能力。
C語言;初學(xué)者;編程能力;計(jì)算思維
C語言現(xiàn)在是許多高校新生的程序設(shè)計(jì)入門課程,面對程序設(shè)計(jì)及C語言的初學(xué)者,教師和學(xué)生雙方往往都付出了不少的精力,教師有心教,學(xué)生辛苦學(xué),但往往教學(xué)效果并不令人滿意。比較突出的問題是學(xué)生的編程能力普遍較差,即使是平時(shí)學(xué)習(xí)很好的學(xué)生,遇到編寫程序,特別是規(guī)模較大的程序,往往無從下手。一部分學(xué)生看不懂教材中的示例程序,特別是復(fù)雜的程序,更不知道如何寫程序。
分析造成這種現(xiàn)狀的原因,包括:重視語法的學(xué)習(xí),陷入學(xué)習(xí)C語言的語法及其細(xì)節(jié)的泥潭,閱讀分析程序少,缺少編程訓(xùn)練,上機(jī)調(diào)試程序太少,等等。這些原因固然存在,可能還比較嚴(yán)重,筆者認(rèn)為,學(xué)生不會(huì)編寫程序最重要的原因是缺乏程序設(shè)計(jì)的思維方式、方法,缺乏計(jì)算思維能力的培養(yǎng)。
因此,為了從根本上解決不會(huì)編程的問題,應(yīng)加強(qiáng)計(jì)算思維能力的培養(yǎng),讓學(xué)生學(xué)會(huì)程序設(shè)計(jì)的思維方式、方法,從而實(shí)現(xiàn)課程的教學(xué)目的。下文通過四個(gè)方面介紹了具體方法和步驟。
1.1 閱讀分析示例程序是基礎(chǔ)
教材中的示例程序(如:文獻(xiàn)[1])是面向問題的,不僅僅用來學(xué)習(xí)C語言的語法基礎(chǔ),更重要的是用來教學(xué)生如何寫程序,用來介紹編程方法與思想。通過閱讀分析這些示例程序,應(yīng)能夠起到舉一反三、觸類旁通的作用。
面對這樣的典型示例程序,最重要的是思考。不僅是學(xué)習(xí)變量定義、語句結(jié)構(gòu)、函數(shù)組成等字面上的內(nèi)容,更要分析程序的功能、編程方法,從“what to do”到“how to do”,分析其中的數(shù)據(jù)結(jié)構(gòu)與算法,還要進(jìn)一步分析其背后的計(jì)算思維方法。
程序最基本的任務(wù)是進(jìn)行數(shù)據(jù)加工,基本結(jié)構(gòu)為IPO。其中I代表Input,即數(shù)據(jù)輸入;P代表Process,即數(shù)據(jù)處理;O代表Output,即輸出計(jì)算結(jié)果。對于較復(fù)雜的任務(wù),應(yīng)強(qiáng)調(diào)任務(wù)抽象與分解的思想,即較大規(guī)模的計(jì)算任務(wù)分解成若干個(gè)規(guī)模較小且相對獨(dú)立的子任務(wù),分別用單獨(dú)的函數(shù)實(shí)現(xiàn),即模塊化。在函數(shù)實(shí)現(xiàn)中,采用結(jié)構(gòu)化的程序設(shè)計(jì)思想,還包括遞歸函數(shù)的思想等。還要分析數(shù)據(jù)組織方法,如:數(shù)組、結(jié)構(gòu)、共用體等。然后就是算法思想,如:遞歸、搜索、排序等。
1.2 大量編程實(shí)踐是根本
我們知道,學(xué)習(xí)一門新程序設(shè)計(jì)語言的唯一途徑就是使用它編寫程序[1]?!皫煾殿I(lǐng)進(jìn)門,學(xué)藝靠自身”[2],應(yīng)鼓勵(lì)學(xué)生自己寫程序,從最簡單的程序開始,循序漸進(jìn),一步一個(gè)腳印,積少成多,積小勝為大勝,不斷取得新的進(jìn)步。使學(xué)生學(xué)會(huì)基本的編程方法,具有基本的編程能力。
編寫程序的一個(gè)最基本方法是“臨摹”示例程序,課后作業(yè)應(yīng)盡量與示例程序相關(guān)聯(lián),不斷對示例程序的增強(qiáng)和完善。這樣完成編程練習(xí)時(shí),就會(huì)去復(fù)習(xí)相關(guān)的示例程序,學(xué)習(xí)其中的編程方法,并用于自己的編程練習(xí)。
編程練習(xí)除了注意與示例程序的相關(guān)性外,還要注意其典型的、趣味性、實(shí)用性,學(xué)生往往對趣味程序、游戲程序感興趣,可以加強(qiáng)這方面的練習(xí),如:九九乘法表、楊輝三角形、約瑟夫問題、Hanoi塔問題、哥德巴赫猜想等。
可以用多種方法實(shí)現(xiàn)同一個(gè)問題,如:用不同的語句實(shí)現(xiàn),用if或switch,用do while、while或for;用不同的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),如:數(shù)組或指針;用不同的算法實(shí)現(xiàn)等。通過一個(gè)問題多種實(shí)現(xiàn),使學(xué)生感受到編程有很大的靈活性,不是死板硬套,激發(fā)了學(xué)生的計(jì)算思維能力和創(chuàng)新能力。
對于編程練習(xí),開始可以是大量簡單問題,學(xué)生力所能及,經(jīng)過努力可以完成;然后是一定量的較大規(guī)模問題??傊?,編程練習(xí)一定要有量的積累,才能夠?qū)W會(huì)編程方法,功到自然成。
1.3 在調(diào)試程序中不斷進(jìn)步
自己編寫的程序是否正確,最重要的方法是在C語言開發(fā)平臺上進(jìn)行編輯、編譯、鏈接、運(yùn)行和調(diào)試。對于初學(xué)者來說,一個(gè)友好的開發(fā)平臺是非常重要的,我們在教學(xué)中采用的是Eclipse+MinGW GCC。Eclipse環(huán)境能有效地提醒初學(xué)者在編輯過程中出現(xiàn)的語法錯(cuò)誤,避免在編譯時(shí)才能發(fā)現(xiàn)的錯(cuò)誤(有時(shí)編譯時(shí)錯(cuò)誤多達(dá)數(shù)百個(gè),讓初學(xué)者措手不及,失去調(diào)試成功的信心)。還可以通過快捷鍵Ctrl+Shift+F(或菜單Source-〉Format)格式化源程序,使源程序清晰易讀。另外,E-clipse環(huán)境Project Explorer列出了多個(gè)項(xiàng)目,在項(xiàng)目間切換方便,這對初學(xué)者帶來不少方便。
在Eclipse環(huán)境中,通過工具欄上的按鈕或“F11”便進(jìn)行調(diào)試程序過程。調(diào)試程序時(shí)可以使用斷點(diǎn)、單步執(zhí)行、Watch等工具來查看程序的運(yùn)行狀態(tài)。通過調(diào)試程序,可以發(fā)現(xiàn)并糾正程序中的各種邏輯錯(cuò)誤,培養(yǎng)學(xué)生嚴(yán)密的邏輯思維能力。
通過調(diào)試程序,會(huì)感受到模塊化、結(jié)構(gòu)化編程的重要性,當(dāng)一個(gè)程序所有的功能實(shí)現(xiàn)都放在main函數(shù)中,以至于main函數(shù)包括數(shù)百行時(shí),調(diào)試起來是多么的困難。另外,較大規(guī)模的程序在一個(gè)源程序文件中實(shí)現(xiàn)也是不好的方式。
通常調(diào)試過程并不是一帆風(fēng)順的,有時(shí)甚至很痛苦,但要耐心,應(yīng)記錄出現(xiàn)的各種問題及其解決方法,不斷分析研究出現(xiàn)的各種問題,并解決問題,及時(shí)總結(jié)取得成功的經(jīng)驗(yàn)與失敗的教訓(xùn),才會(huì)感受到“山窮水復(fù)疑無路,柳暗花明又一村”,并堅(jiān)持到調(diào)試成功,才能感受成功的喜悅,才會(huì)有暢快淋漓的感覺。
1.4 完成課程設(shè)計(jì)項(xiàng)目贏得自信
通過課程設(shè)計(jì),可以提高學(xué)生問題分析能力、規(guī)劃設(shè)計(jì)能力和團(tuán)隊(duì)合作精神等綜合能力,并進(jìn)一步提升C語言的編程能力和程序調(diào)試能力,學(xué)習(xí)軟件工程的基本方法[3],實(shí)踐軟件工程過程。
課程設(shè)計(jì)項(xiàng)目最好選擇自己感興趣的問題,也可以由教師指定,如:打字練習(xí)程序、萬年歷程序、學(xué)生成績統(tǒng)計(jì)分析、迷宮問題、文件分類管理等。課程設(shè)計(jì)項(xiàng)目要按照軟件工程方法,學(xué)會(huì)分析問題,能對較大規(guī)模的復(fù)雜問題進(jìn)行任務(wù)抽象與分解,并進(jìn)行自頂向下的設(shè)計(jì)方法,逐步求精,完成模塊化設(shè)計(jì)。對于每一個(gè)子問題,要進(jìn)行數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì),最后用C語言實(shí)現(xiàn),應(yīng)按照軟件工程方法,使程序具有良好的可讀性。然后進(jìn)行模塊測試和調(diào)試、進(jìn)行集成測試,最后完成項(xiàng)目報(bào)告。
課程設(shè)計(jì)項(xiàng)目大多數(shù)時(shí)間是在課外自主完成,需要團(tuán)隊(duì)合作,不斷堅(jiān)持,相互學(xué)習(xí),共同探討問題并不斷解決問題,去追求團(tuán)隊(duì)的成功及個(gè)人的成功。
培養(yǎng)和提高初學(xué)者的編程能力,是C語言教學(xué)工作成功的關(guān)鍵。對于如何提高初學(xué)者的編程能力,本文提出了四個(gè)基本步驟:①閱讀分析教材中的示例程序,這是基礎(chǔ);②大量編程實(shí)踐,這是根本;③在調(diào)試程序中不斷進(jìn)步,這是階梯;④完成好課程設(shè)計(jì)項(xiàng)目,可以極大地贏得自信。通過在實(shí)際的教學(xué)過程使用,這些方法能有效地提高學(xué)生編程能力,受到學(xué)生的歡迎。這些步驟中,學(xué)習(xí)計(jì)算思維方法是最重要的,我們應(yīng)該“激發(fā)學(xué)生對計(jì)算機(jī)領(lǐng)域科學(xué)探索的興趣,傳播計(jì)算機(jī)科學(xué)的快樂、崇高和力量”[4]。
參考文獻(xiàn):
[1] Brian W.Kernighan,Dennis M.Ritchie.C程序設(shè)計(jì)語言(第2版新版)[M].徐寶文,等譯.北京:機(jī)械工業(yè)出版社,2004
[2] Greg Perry,Dean Miller.C語言編程——零基礎(chǔ)初學(xué)者指南(第3版)[M].姜佑譯.北京:人民郵電出版社,2014
[3] B.A.Forouzan,R.F.Gilberg.C程序設(shè)計(jì)——軟件工程環(huán)境(原書第3版)[M].黃林鵬等譯.北京:機(jī)械工業(yè)出版社,2008
[4] 周以真.計(jì)算思維[J].中國計(jì)算機(jī)學(xué)會(huì)通訊,2007(3):77~79
Several Measures to Improve the Programming Ability of C Language Beginners
WU Yuan-bin
(Department of Computer Science and Engineering,Chongqing Three Gorges College,Wanzhou 404000)
How to improve the programming ability for the C language beginners are the teaching objectives of C language teachers,the objectives are importance and difficult to implement.Discusses how to improve the programming ability for C language beginners.Analyzes the main causes of the poor programming ability for C language beginners,and raises four specific methods and steps to improve programming ability for beginners,and analyzes the methods in detail,which can effectively the programming ability of students.
C Language;Beginners;Programming Ability;Computational Thinking
1007-1423(2015)01-0013-03
10.3969/j.issn.1007-1423.2015.01.003
吳元斌(1965-),男,本科,副教授,從事領(lǐng)域?yàn)榇髮W(xué)計(jì)算機(jī)基礎(chǔ)教學(xué)與研究工作
2014-11-18
2014-12-08