初學(xué)者應(yīng)該怎么學(xué)習(xí)c語言
初學(xué)者應(yīng)該怎么學(xué)習(xí)c語言
學(xué)習(xí)C語言不是一朝一夕的事情,特別是初學(xué)者。那么初學(xué)者應(yīng)該怎么學(xué)習(xí)c語言?為了幫助大家更好的學(xué)習(xí)c語言,小編精心整理了初學(xué)者學(xué)習(xí)c語言的方法,一起來看看吧!
初學(xué)者學(xué)習(xí)c語言的方法
一、要讀就讀好書,否則不如不讀
所有初學(xué)者面臨的第一個問題便是:如何選擇教材。好的開始是成功的一半,選擇一本優(yōu)秀的教材是事半功倍的關(guān)鍵因素。不幸的是,學(xué)校通常會幫你指定一本很差勁的C語言課本;而幸運的是,你還可以再次選擇。
大名鼎鼎的譚浩強教授出了一本《C語言程序設(shè)計》,據(jù)說發(fā)行量有超過400萬,據(jù)我所知,很多學(xué)校都會推薦這本書作為C語言課本。雖然本人的名字(譚浩宇)跟教授僅僅一字之差,但我是無比堅定地黑他這本書的。這本書不是寫給計算機專業(yè)的學(xué)生的,而是給那些需要考計算機等級考試的其它專業(yè)學(xué)生看的。這本書的主要缺點是:例子程序非常不專業(yè),不能教給你程序設(shè)計應(yīng)該掌握的思考方式;程序風(fēng)格相當(dāng)?shù)夭缓?,會讓你養(yǎng)成亂寫代碼的惡習(xí);錯誤太多,曾經(jīng)有人指出過這本書的上百個錯誤,其中不乏關(guān)鍵的概念性錯誤。好了,這本書我也不想說太多了,有興趣大家可以百度一下:)
Kernighan和Ritchie的《The C Programming Language》(中譯名《C程序設(shè)計語言》)堪稱經(jīng)典中的經(jīng)典,不過舊版的很多內(nèi)容都已過時,和現(xiàn)在的標(biāo)準(zhǔn)C語言相去甚遠,大家一定要看最新的版本,否則不如不看。另外,即使是最經(jīng)典最權(quán)威的書,也沒有辦法面面俱到,所以手邊常備一本《C語言參考手冊》是十分必要的?!禖語言參考手冊》就是《C Reference Manual》,是C語言標(biāo)準(zhǔn)的詳細描述,包括絕大多數(shù)C標(biāo)準(zhǔn)庫函數(shù)的細節(jié),算得上是最好的標(biāo)準(zhǔn)C語言的工具書。順便提一句,最新的《C程序設(shè)計語言》是根據(jù)C89標(biāo)準(zhǔn)修訂的,而《C語言參考手冊》描述的是C99標(biāo)準(zhǔn),二者可能會有些出入,建議按照C99標(biāo)準(zhǔn)學(xué)習(xí)。還有一本《C和指針》,寫得也是相當(dāng)?shù)夭诲e,英文名是《Pointers on C》,特別地強調(diào)指針的重要性,算是本書的一個特點吧。不過這本書并不十分適合初學(xué)者,如果你曾經(jīng)學(xué)過C語言,有那么一些C語言的基礎(chǔ)但又不是很扎實,那么你可以嘗試一下這本書。我相信,只要你理解了指針,C語言便不再神秘。
如果你已經(jīng)啃完了一本C語言教材,想要更進一步,那么有兩本書你一定要看。首先是《C Traps and Pitfalls》(中譯名《C陷井與缺陷》),很薄的一本小冊子,內(nèi)容非常非常地有趣。要注意一點,這本書是二十多年前寫成的,里面提到的很多C語言的缺陷都已被改進,不過能夠了解一些歷史也不是什么壞事。然后你可以挑戰(zhàn)一下《Expert C Programming》(中譯名《C專家編程》),書如其名,這本書頗具難度,一旦你仔細讀完并能透徹理解,你便可以放心大膽地在簡歷上寫“精通C語言”了。
切記一個原則,不要讀自己目前還看不懂的書,那是浪費生命。如果你看不懂,那你一定是缺失了某些必需基礎(chǔ)知識。此時,你要仔細分析自己需要補充哪些內(nèi)容,然后再去書店尋找講述的這些內(nèi)容的書籍。把基礎(chǔ)知識補充完畢再回頭來學(xué)習(xí),才會真正的事半功倍。
二、Unix/Linux還是Windows,這是個很大的問題
不同的編程環(huán)境會造就出不同思維的程序員。Windows的程序員大多依賴集成開發(fā)環(huán)境,比如Visual Studio,而Unix程序員更加鐘愛Makefile與控制臺。顯而易見,集成開發(fā)環(huán)境更容易上手,在Windows上學(xué)習(xí)C語言,只需要會按幾個基本的Visutal C++工具欄按鈕就可以開始寫Hello, World!了,而在Unix下,你需要一些控制臺操作的基本知識。有人也許認為Unix的環(huán)境更簡潔,但習(xí)慣的力量是很大的,大家都很熟悉Windows的基本操作,而為了學(xué)習(xí)C語言去專門裝一個Unix系統(tǒng),似乎有點不劃算。
對于一個只懂得Windows基本操作、連DOS是什么都不知道的新手而言,盡快做一些有趣而有意義的事情才是最重要的。用C語言寫一個小程序遠比學(xué)習(xí)ls、cat等命令有趣,況且我們要專注于C語言本身,就不得不暫時忽略一些東西,比如編譯鏈接的過程、Makefile的寫法等等等等。
所以我建議初學(xué)者應(yīng)該以Visual C++ 6.0(不是VisualC++ .NET)或者Dev C++作為主要的學(xué)習(xí)環(huán)境,而且千萬不要在IDE的使用技巧上過多糾纏,因為今后你一定要轉(zhuǎn)向Unix環(huán)境的。Visual C++ 6.0使用很方便,調(diào)試也很直觀,但其默認的編譯器對C標(biāo)準(zhǔn)的支持并不好,而Dev C++使用gcc編譯器,對C99的標(biāo)準(zhǔn)都支持良好。使用順帶提一下,很多大學(xué)的C語言課程還在使用Turbo C 2.0作為實驗環(huán)境,這是相當(dāng)不可取的,原因其一是TC 2.0對C標(biāo)準(zhǔn)幾乎沒有支持,其二是TC 2.0編譯得到的程序是16位的,這對今后理解32位的程序會造成極大的困擾(當(dāng)然,用djgpp之類的東西可以使TC 2.0編譯出32位程序,不過那過于復(fù)雜了)。
等你學(xué)完一本C語言的教材,你一定要轉(zhuǎn)向Unix平臺繼續(xù)學(xué)習(xí),幾乎所有的C語言高級教程都是基于Unix平臺的(比如《C專家編程》)。轉(zhuǎn)變的過程是痛苦的,你需要面對的是各種紛繁復(fù)雜的命令,完全不同于Windows平臺的思考方式,但是這種痛苦是值得的。Unix與C是共生的,Unix的思考方式和習(xí)慣更加符合C語言的思考方式和習(xí)慣。在Unix下,你可以找到無數(shù)優(yōu)秀的源代碼供你盡情閱讀,你可以方便地查看某個庫函數(shù)的聯(lián)機手冊,還可以看到最優(yōu)秀的代碼風(fēng)格
歸結(jié)起來就是一句話:初學(xué)C語言,建議使用Windows系統(tǒng)和集成開發(fā)環(huán)境,在準(zhǔn)備向“高手”方向努力時,請先轉(zhuǎn)向Unix平臺。
初學(xué)者學(xué)習(xí)c語言的注意事項
1.學(xué)習(xí)基本的語法
例如:數(shù)據(jù)類型int、double的含義、使用和背景;邏輯判斷if的使用;流程控制的循環(huán)while\for的使用;函數(shù)的調(diào)用;
2.編寫基本語法的代碼
學(xué)完基本的語法,熟悉了之后,針對這些基本語法,寫一些基本的代碼來練習(xí),鞏固。在寫代碼的過程中熟悉基本語法。第1步只是學(xué)習(xí)理論,這一步就是鞏固基本語法,是通過實踐來鞏固,實踐就是寫代碼,能夠運行通過,才表示正確。這一步是最基本的一步寫代碼。
3.混合使用語法實現(xiàn)復(fù)雜的功能
各個基本的語法點都掌握了,要開始找一些實用小程序來綜合練習(xí),就好像是物理考試的最后幾個大題一樣。綜合練習(xí)就是加深各個基本語法的理解和混合使用。這也就是項目經(jīng)驗的基礎(chǔ)。這里會遇到各種混合使用中因為自己不熟而碰見的各種錯誤,也就是積累經(jīng)驗的過程。
4.寫多了,遇到的坑多了,然后就理解了語法,記住了用法。無法使用英語學(xué)習(xí)的強行記憶,是行不通的。
5.自己寫一個完整的可以供他人實際使用的程序
比如可以寫一個完整的計算器、一個完整的通訊錄、一個成績統(tǒng)計分析程序、圖書管理系統(tǒng)。這里會涉及到各種語法知識,也是真正大量積累項目經(jīng)驗的時候了。這些完整的程序就是小項目了。這些都能夠做好后,就可以開始寫大項目了。這些完整程序都要以實際的需要來做,不能繞過,要直面需求??梢灾苯咏鉀Q,可以換個思路解決,這是鍛煉自己的過程。
做完了這5步,C語言也就學(xué)好了。學(xué)習(xí)C語言,絕對不是簡單學(xué)習(xí)一下語法而已。5步做完,才真正的學(xué)完了C語言基礎(chǔ)。
C Primer Plus是非常適合完全自學(xué)C語言的書籍了。根據(jù)這個5步的前3步,這本書里有對應(yīng)的聯(lián)系,后面兩步需要自己來找程序開發(fā)。
C語言的優(yōu)點
1.簡潔緊湊、靈活方便
C語言一共只有32個關(guān)鍵字,9種控制語句,程序書寫自由,主要用小寫字母表示。它把高級語言的基本結(jié)構(gòu)和語句與低級語言的實用性結(jié)合起來。C語言可以象匯編語言一樣對位、字節(jié)和地址進行操作,而這三者是計算機最基本的工作單元。
2.運算符豐富
C的運算符包含的范圍很廣泛,共有34種運算符。C語言把括號、賦值、強制類型轉(zhuǎn)換等都作為運算符處理。從而使C的運算類型極其豐富,表達式類型多樣化,靈活使用各種運算符可以實現(xiàn)在其它高級語言中難以實現(xiàn)的運算。
3.數(shù)據(jù)結(jié)構(gòu)豐富
C的數(shù)據(jù)類型有:整型、實型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類型等,能用來實現(xiàn)各種復(fù)雜的數(shù)據(jù)類型的運算,并引入了指針概念,使程序效率更高。另外C語言具有強大的圖形功能,支持多種顯示器和驅(qū)動器,且計算功能、邏輯判斷功能強大。
4. C是結(jié)構(gòu)式語言
結(jié)構(gòu)式語言的顯著特點是代碼及數(shù)據(jù)的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結(jié)構(gòu)化方式可使程序?qū)哟吻逦?便于使用、維護以及調(diào)試。C語言是以函數(shù)形式提供給用戶的,這些函數(shù)可方便的調(diào)用,并具有多種循環(huán)、條件語句控制程序流向,從而使程序完全結(jié)構(gòu)化。
5. C語法限制不太嚴格,程序設(shè)計自由度大
雖然C語言也是強類型語言,但它的語法比較靈活,允許程序編寫者有較大的自由度。
6. C語言允許直接訪問物理地址,可以直接對硬件進行操作
因此既具有高級語言的功能,又具有低級語言的許多功能,能夠像匯編語言一樣對位、字節(jié)和地址進行操作,而這三者是計算機最基本的工作單元,可以用來寫系統(tǒng)軟件。
7. C語言程序生成代碼質(zhì)量高,程序執(zhí)行效率高
一般只比匯編程序生成的目標(biāo)代碼效率低10へ20%。
8. C語言適用范圍大,可移植性好
C語言有一個突出的優(yōu)點就是適合于多種操作系統(tǒng),如DOS、UNIX,也適用于多種機型。
C語言初學(xué)者最常問的幾個問題
1)多久能學(xué)會編程?
這是一個沒有答案的問題。每個人投入的時間、學(xué)習(xí)效率和基礎(chǔ)都不一樣。如果你每天都拿出大把的時間來學(xué)習(xí),那么兩三個月就可以學(xué)會C/C++,不到半年時間就可以編寫出一些軟件。
但是有一點可以肯定,幾個月從小白成長為大神是絕對不可能的。要想出類拔萃,沒有幾年功夫是不行的。學(xué)習(xí)編程不是看幾本書就能搞定的,需要你不斷的練習(xí),編寫代碼,積累零散的知識點,代碼量跟你的編程水平直接相關(guān),沒有幾萬行代碼,沒有拿得出手的作品,怎能稱得上“大神”。
每個人程序員都是這樣過來的,開始都是一頭霧水,連輸出九九乘法表都很吃力,只有通過不斷練習(xí)才能熟悉,這是一個強化思維方式的過程。
知識點可以在短時間內(nèi)了解,但是思維方式和編程經(jīng)驗需要不斷實踐才能強化,這就是為什么很多初學(xué)者已經(jīng)了解了C語言的基本概念,但是仍然不會編寫代碼的原因。
程序員被戲稱為“碼農(nóng)”,意思是寫代碼的農(nóng)民,要想成為一個合格的農(nóng)民,必須要腳踏實地辛苦耕耘。
也不要壓力太大,一切編程語言都是紙老虎,一層窗戶紙,只要開竅了,就容易了。
2)學(xué)編程難嗎?
編程是一門技術(shù),我也不知道它難不難,我只知道,只要你想學(xué),肯定能學(xué)會。技術(shù)就是一層窗戶紙,是有道理可以遵循的,在我看來,比搞抽象的藝術(shù)要容易。
在技術(shù)領(lǐng)域,編程的入門門檻很低,互聯(lián)網(wǎng)的資料很多,只要你有一臺計算機,一根網(wǎng)線,具備初中學(xué)歷,就可以學(xué)習(xí),投資在5K左右。
不管是技術(shù)還是非技術(shù),要想有所造詣,都必須潛心鉆研,沒有幾年功夫不會鶴立雞群。所以請先問問你自己,你想學(xué)編程嗎,你喜歡嗎,如果你覺得自己對編程很感興趣,想了解軟件或網(wǎng)站是怎么做的,那么就不要再問這個問題了,盡管去學(xué)就好了。
3)英語和數(shù)學(xué)基礎(chǔ)不行,可以學(xué)會嗎?初中畢業(yè)可以學(xué)會嗎?
首先說英語。編程需要你有英語基礎(chǔ),初中水平完全可以勝任。編程起源于美國,代碼中會出現(xiàn)很多單詞,有英語基礎(chǔ)記憶起來會非常容易,如果你不認識也沒關(guān)系,我推薦你安裝有道詞典,它的劃詞功能非常棒,選中什么就及時翻譯什么,不管是句子還是單詞。這樣,相信你開發(fā)出常用的軟件不成問題。
當(dāng)然,如果你希望達到很高的造詣,希望被人稱為大神,那么肯定要閱讀英文的技術(shù)資料(不是所有資料都被翻譯成了中文),初中水平就有點吃力了。不過,長期閱讀英文會提高你的英文水平,只要你堅持一段時間,即使只有初中水平,我相信借助有道詞典也會提高很快。
如果你沒有學(xué)過英語,不知道 am、is、are,那我該怎么說呢,有志者事竟成,只要你想學(xué),相信英語的障礙你也能克服。
至于數(shù)學(xué),只要你不打算搞算法、機器學(xué)習(xí)/人工智能、大數(shù)據(jù)/數(shù)據(jù)分析,會加減乘除法,知道次方、開方、科學(xué)計數(shù)法等最基本的概念,就不要把數(shù)學(xué)當(dāng)做學(xué)習(xí)的障礙了。
4)需要什么配置的電腦
如果你囊中羞澀,3K以上的臺式機,4K以上的筆記本也可以勝任,當(dāng)然有時候會卡頓。
經(jīng)濟條件允許的話,最好5K以上的臺式機,6K以上的筆記本。
如果想從事編程行業(yè),你早晚要有一臺高配的機器。它不但會讓你工作更加流暢有效率,還會讓你覺得工作是一種享受,所以很多程序員配備了MacBook。
5)學(xué)習(xí)編程要用Linux嗎
很多大神都輕視地說,我不用Windows,一直在用Linux,只有Linux才能讓你看到C的本質(zhì),C就是為Linux而生的。
話雖沒錯,但是你想想當(dāng)初你學(xué)習(xí)Windows花了多長時間,是不是一開始連切換輸入法也不會,編輯Word文檔也不會;如果你切換到Linux,你也會遇到同樣的問題,你需要一段時間來熟悉Linux,加大了你的學(xué)習(xí)成本,會慢慢消磨掉你對編程的興趣。
所以我建議,你可以在Windows下學(xué)習(xí)C語言,完全沒問題,如果有一天Windows不能滿足你的學(xué)習(xí)需求了,那你再切換到Linux,這個時候你對編程已經(jīng)很了解了,切換的成本也低了。
猜你喜歡: