摘要:針對C語言語法難學(xué)的問題,宜采取分化處理的學(xué)習(xí)策略。一開始只學(xué)習(xí)常規(guī)的基礎(chǔ)語法,更多的非常規(guī)語法應(yīng)該在具備了一定的編程能力之后,在閱讀程序、編寫程序的實踐中通過逐步積累的方式掌握。基本的編程能力要通過反復(fù)地閱讀程序、調(diào)試程序和編寫程序獲得。而進(jìn)一步的編程能力,可以通過面向項目的學(xué)習(xí),在解決現(xiàn)實問題的過程中培養(yǎng)。
關(guān)鍵詞:常規(guī)語法;編程能力;面向項目的學(xué)習(xí)
中圖分類號:TP312 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2018)18-0150-02
1 引言
C語言作為一門專業(yè)型的語言,具有功能強大、運行效率高、實用性強等特點。但是若作為學(xué)習(xí)程序設(shè)計的入門語言,C語言卻存在著諸多不足之處,比如C語言的語法過于靈活,C語言的指針功能過于強大等[1]。凡此種種,往往會給初學(xué)者造成諸多的困惑,甚至嚴(yán)重打擊初學(xué)者學(xué)習(xí)程序設(shè)計的自信心。
C語言難學(xué)似乎是初學(xué)者的一個共識,那么C語言到底難在哪里,如何才能破解C語言難學(xué)的困局呢?其實,C語言學(xué)習(xí)的難點主要在于其語法。而造成C語言語法難學(xué)的主要因素包括以下幾個方面。
1)C語言提供了多種功能獨特的運算符,諸如自增(自減)運算符、復(fù)合賦值運算符、條件運算符、逗號運算符、位運算符等等。
2) C語言允許將賦值表達(dá)式、自增(自減)表達(dá)式嵌入到其他表達(dá)式中,導(dǎo)致了C語言語句的表達(dá)形式靈活多變。
3)C語言中指針的使用無處不在、功能異常強大。
4)C語言中大大擴(kuò)展了邏輯運算量的類型。
5)C語言中花括號與分號的位置,若稍作變化,則往往會導(dǎo)致完全不同的含義。
以上特色一方面造就了C語言優(yōu)異的性能,另一方面也給初學(xué)者埋設(shè)了諸多的困惑與陷阱。令人愛恨交加,欲罷不能。
下面從三個方面探尋正確的C語言學(xué)習(xí)之道。
2 如何學(xué)習(xí)C語言的語法
其實,只要采取了正確的學(xué)習(xí)策略,C語言語法難學(xué)的問題是可以解決的。
首先,需要明確語法在程序設(shè)計中的地位。學(xué)習(xí)C語言的最終目的是為了學(xué)會編寫程序解決現(xiàn)實問題,因此編程能力的培養(yǎng)是學(xué)習(xí)的核心。而語法是編程的基礎(chǔ),是為編程服務(wù)的,因此語法的學(xué)習(xí)應(yīng)當(dāng)緊緊圍繞編程這個核心,脫離了編程的語法是毫無意義的。
是不是說必須系統(tǒng)地、牢固地掌握了C語言的語法,才能學(xué)好編程呢?其實并非如此。對于程序設(shè)計來說,更重要的是確定編程的總體思路或者說是算法,而不是具體實現(xiàn)中的語法[2]。既往的經(jīng)驗表明,只需要掌握少量最常規(guī)的語法,就可以編寫出解決一般問題的程序。至于有些非常規(guī)語法,即使是專業(yè)的程序員都極少用到,更別說是初學(xué)者了。
因此,在學(xué)習(xí)時不要過于看重語法知識的系統(tǒng)性與連貫性,而應(yīng)當(dāng)根據(jù)程序設(shè)計的需求,循序漸進(jìn)地積累語法知識[3]。比如,C語言中的運算符與表達(dá)式特別豐富,若將這些內(nèi)容集中到一章中學(xué)習(xí),則既枯燥乏味,又難以深入理解;若根據(jù)語法與程序設(shè)計的內(nèi)在聯(lián)系,將這些內(nèi)容分布到適當(dāng)?shù)恼鹿?jié)中講述,則既容易理解,又便于學(xué)以致用。比如,自增(自減)運算符和逗號運算符在學(xué)習(xí)循環(huán)結(jié)構(gòu)之前就幾乎不會用到,完全可以延后到循環(huán)程序部分再學(xué)習(xí)。
初學(xué)者應(yīng)當(dāng)優(yōu)先學(xué)習(xí)那些既容易理解、又頻繁使用的常規(guī)語法;而盡量避免研究那些既晦澀難懂、又極少使用的非常規(guī)語法。比如j=i++ + i++ +i++、a+=a-=a+a這樣的表達(dá)式,在實際編程中幾乎不可能出現(xiàn),因此并無研究的必要。再比如,printf函數(shù)中各種格式說明符的詳盡用法、整型數(shù)據(jù)的內(nèi)存表示形式及相互轉(zhuǎn)化、擴(kuò)展的邏輯運算量及邏輯運算的短路、for語句的各種變式、通過指針引用二維數(shù)組的元素、行指針變量、指向函數(shù)的指針、鏈表等,這些內(nèi)容初學(xué)者最好暫時不要深究。
當(dāng)然,并不是說這些非常規(guī)語法就完全不做研究,而是要選擇恰當(dāng)?shù)膶W(xué)習(xí)方式和時機。正確的學(xué)習(xí)方式是在編程實踐中研究語法,包括在閱讀其他人寫好的程序時發(fā)現(xiàn)并掌握新的語法知識點,以及在自己編寫程序、調(diào)試程序的過程中查閱并掌握需要用到的語法知識。這種學(xué)習(xí)方式具有更好的針對性,因而能夠獲得更好的學(xué)習(xí)效果。而正確的學(xué)習(xí)時機,則是在比較熟練地掌握了常規(guī)語法并能夠編寫一般難度的程序之后,再來研究這些非常規(guī)語法。采取這種策略相當(dāng)于降低了知識之間的跨度,從而能夠更好地理解和掌握知識。
3 如何培養(yǎng)基本的編程能力
編程能力的培養(yǎng)需要一個長期積累的過程。那么,如何才能逐步地積累編程的經(jīng)驗?zāi)兀?/p>
首先是要盡量多地閱讀其他人寫好的程序,能夠看懂程序?qū)崿F(xiàn)的功能,分析出每條語句的作用,即如何一步步實現(xiàn)程序功能的。
然后上機調(diào)試閱讀過的程序,從最簡單的程序入手,將程序代碼一條一條地錄入、編輯,然后編譯、運行。在調(diào)試程序的過程中,能夠發(fā)現(xiàn)在書面上靜態(tài)分析程序時難以發(fā)現(xiàn)的問題,然后經(jīng)過查閱資料、主動思考、改正錯誤的過程,即可獲取新的知識和技能[4]。而這種收獲是僅僅通過書面學(xué)習(xí)方式所不能得到的。因此,可以說不厭其煩地反復(fù)調(diào)試程序是學(xué)好程序設(shè)計的制勝法寶,這種說法一點都不為過。
在不斷閱讀已有程序的同時,還要經(jīng)常地自己編寫程序。從模仿已有的程序入手,嘗試編寫簡單的程序。編寫程序的過程最好在電腦上完成,一邊編寫、一邊調(diào)試運行,然后根據(jù)調(diào)試中發(fā)現(xiàn)的問題及時地修正程序。在不斷地改正錯誤的過程中,你的編程能力將會得到有效的提高[5]。
對于具有一定復(fù)雜度的程序,可以首先嘗試實現(xiàn)其中的一部分功能,待現(xiàn)有的程序調(diào)試運行成功之后,再在此基礎(chǔ)上擴(kuò)展一部分功能,然后如此循環(huán)往復(fù),直至最終獲得功能完善的程序。
4 如何讓編程水平更上一層樓
在具備了基本的編程能力之后,如何才能使得自己的編程水平更上一層樓呢?將程序設(shè)計應(yīng)用于解決現(xiàn)實問題是提高編程能力的行之有效的方法,而面向項目的學(xué)習(xí)就是一種體現(xiàn)這種思路的卓有成效的培養(yǎng)學(xué)生綜合分析問題、解決問題能力的教學(xué)模式[6]。
所謂項目,是指來源于現(xiàn)實中的、具有一定復(fù)雜度的問題,通常需要學(xué)生運用多方面的知識綜合分析、統(tǒng)籌規(guī)劃才能解決。
面向項目的學(xué)習(xí),需要學(xué)生自行查閱資料,準(zhǔn)備與項目相關(guān)的知識。通過這種方式所獲得的知識是最牢固的、最有機的知識,更重要的是在這個過程中提高了學(xué)生自主學(xué)習(xí)的能力。來自現(xiàn)實中項目,往往是錯綜復(fù)雜的,在分析問題的過程中需要舍棄非本質(zhì)的內(nèi)容,提取出本質(zhì)的核心問題,從而可以培養(yǎng)學(xué)生綜合分析問題、統(tǒng)籌規(guī)劃和解決復(fù)雜問題的能力。
參考文獻(xiàn) :
[1] K.N.King.C語言程序設(shè)計現(xiàn)代方法(第2版)[M].北京:人民郵電出版社,2010.
[2]巨同升.C語言程序設(shè)計——從入門到進(jìn)階[M].北京:人民郵電出版社,2011.
[3]余兆釵.C語言教學(xué)改革的探索與實踐[J].襄陽職業(yè)技術(shù)學(xué)院學(xué)報,2018,17(2):60-62.
[4]王義元. 基于“做中學(xué)”的職業(yè)中學(xué)C語言“五步教學(xué)法”探索[J]. 信息與電腦 (理論版) ,2017(24):223-225.
[5]吳元斌. 提高C語言初學(xué)者編程能力的幾點措施[J]. 現(xiàn)代計算機(專業(yè)版) 2015(1):13-15.
[6]丁麗.項目驅(qū)動式教學(xué)法在C語言教學(xué)中的應(yīng)用[J].信息技術(shù)與信息化,2012(5):33-35.