如何學(xué)好C語(yǔ)言
如何學(xué)好C語(yǔ)言,下面學(xué)習(xí)啦小編整理一篇關(guān)于怎樣學(xué)好C語(yǔ)言的文章,希望可以對(duì)一些迷惘的同學(xué)一絲幫助。
一:
現(xiàn)在大一上學(xué)期應(yīng)該只學(xué)一門(mén)專業(yè)課,除了數(shù)學(xué)與英語(yǔ)課之外,還是有很多的業(yè)余時(shí)間的,抽出一小部分去了解一些計(jì)算機(jī)的文化吧。舉個(gè)例子吧,比如計(jì)算”機(jī)科學(xué)之父”,艾倫.圖靈的生平啊什么的,了解一下他是如何以一個(gè)數(shù)學(xué)家的身份去首次提出圖靈思想的,再比如他是如何創(chuàng)造性的提出“機(jī)器可以思考嗎”這樣子的論文而開(kāi)創(chuàng)了AI的先河的。
這是說(shuō)了一個(gè)人物的了解吧,再比如你可以去了解一下計(jì)算機(jī)的發(fā)展歷史啊,比如第一臺(tái)計(jì)算機(jī)是在1946年誕生于美國(guó)的賓夕法尼亞大學(xué)的;再或是去了解一下你們的C語(yǔ)言的發(fā)展史,等等等等,這些東西沒(méi)有必要刻意的去看,興趣來(lái)了偶爾去百度一下子,會(huì)開(kāi)闊一下見(jiàn)識(shí)與思維的,而且還可以增加自己對(duì)相關(guān)領(lǐng)域的興趣程度。
這些知識(shí)如果要系統(tǒng)的細(xì)看的話,可以去看<計(jì)算機(jī)導(dǎo)論>,或是<計(jì)算機(jī)科學(xué)概論>這兩本書(shū)講的是比較系統(tǒng)的,都是簡(jiǎn)單的提一下計(jì)算機(jī)科學(xué)體系吧,沒(méi)有深入的講解部分。
二:
計(jì)算機(jī)科學(xué)知識(shí)的學(xué)習(xí)是最注重循序漸進(jìn)的,注重基礎(chǔ)的,萬(wàn)萬(wàn)不可跳躍性的學(xué)習(xí),當(dāng)然你是天才或是個(gè)別的話我只能膜拜了,至少我是一步一個(gè)腳印學(xué)過(guò)來(lái)的。我們不討論哪一門(mén)語(yǔ)言才適合做大學(xué)計(jì)算機(jī)相關(guān)專業(yè)的第一門(mén)編程課的問(wèn)題,我們是C語(yǔ)言,也聽(tīng)說(shuō)很多學(xué)校都是以C語(yǔ)言為第一門(mén)編程語(yǔ)言對(duì)待的,我想大部分都是吧。那我們就把C語(yǔ)言盡自己的最大努力學(xué)好吧,有一些學(xué)弟學(xué)妹會(huì)問(wèn)一些問(wèn)題,自己不會(huì)敲代碼怎么辦?還有人會(huì)說(shuō)能看懂別人寫(xiě)的代碼,但是自己就是敲不出來(lái)。
這些問(wèn)題我曾經(jīng)也遇到過(guò)吧,首先要明確一個(gè)觀念:C語(yǔ)言不難學(xué),一點(diǎn)都不難學(xué)。這門(mén)課程不需要那么多的動(dòng)腦筋的地方,就我感覺(jué)還沒(méi)有數(shù)學(xué)難呢,當(dāng)然這僅僅是一孔之見(jiàn)吧。入門(mén)一個(gè)語(yǔ)言最重要的是要選擇一本好書(shū),一本能夠以最簡(jiǎn)單的描述來(lái)表達(dá)出基本知識(shí)的書(shū),我想很多國(guó)內(nèi)的首學(xué)C的人會(huì)選擇譚老的C吧,我當(dāng)時(shí)也不例外,因?yàn)楫吘故菄?guó)人寫(xiě)的書(shū),在問(wèn)題描述與問(wèn)題展開(kāi)與循序講解的過(guò)程中透漏的思考問(wèn)題的方式都是符合國(guó)人思考方式的,所以易于理解吧,當(dāng)然如果喜歡讀外國(guó)的名著當(dāng)然也是可以的,比如C之父的<C Programing Language>,這當(dāng)然是傳世經(jīng)典之作了。
還要明確一個(gè)觀念是:譚老的書(shū)僅僅是作為一個(gè)最基本語(yǔ)法的講解書(shū),看完譚老的書(shū)后確實(shí)會(huì)把很多語(yǔ)法細(xì)節(jié)學(xué)到,但是這也僅僅是語(yǔ)法,只能保證你會(huì)用這些語(yǔ)法了,你是知其然而不知其所以然??赐曜T老的書(shū)后最好把<C Programing Language>這本書(shū)看看,而且更要仔細(xì)的看,這個(gè)時(shí)候有了基礎(chǔ)后看起來(lái)會(huì)輕松一些的,會(huì)發(fā)現(xiàn)有很多原理性的講解了,而且會(huì)有一些譚老書(shū)中講不到的細(xì)節(jié)。看完了<C Programing Language>后會(huì)有一種小小的豁然開(kāi)朗吧。
以上說(shuō)的看書(shū),過(guò)程應(yīng)該是這樣子的:看基本語(yǔ)法,看書(shū)上的例題,試著自己去敲一遍例題,即使你看懂了例題,但是讓你合上書(shū)自己敲,我保證還是會(huì)出錯(cuò)的,肯定是某些地方理解的不夠透徹,再看書(shū),然后再敲,直到無(wú)誤的敲出為止。慢慢的經(jīng)過(guò)一段時(shí)間的堅(jiān)持練習(xí),會(huì)發(fā)現(xiàn)自己合上書(shū)后敲的時(shí)候錯(cuò)誤越來(lái)越少了。然后是做課后的習(xí)題,最開(kāi)始看懂例題去敲書(shū)后習(xí)題也是很難下手的,但是要嘗試,第二次寫(xiě)習(xí)題就不會(huì)那么糾結(jié)了。編程容不得一點(diǎn)的摻假,必須要?jiǎng)邮秩デ么a,而且還要準(zhǔn)確無(wú)誤的敲出來(lái)。不可手寫(xiě)而不去上機(jī)驗(yàn)證。
還有就是培養(yǎng)一個(gè)習(xí)慣:先思考清楚問(wèn)題,然后再去敲代碼。因?yàn)槲覀兦么a僅僅是為了用程序設(shè)計(jì)語(yǔ)言把我們?nèi)说乃季S轉(zhuǎn)換成了計(jì)算機(jī)可理解的方式了而已。有的同學(xué)會(huì)看完題目不思考就直接敲,發(fā)現(xiàn)總是會(huì)出一些錯(cuò)誤,然后在那苦逼的各種改啊調(diào)試啊等等,這樣子不是一個(gè)好的編程習(xí)慣。
三:
認(rèn)真的看書(shū),做練習(xí)題,敲代碼。這樣子下來(lái)一個(gè)學(xué)期完全可以把C語(yǔ)言學(xué)好的,一般性的題目是沒(méi)問(wèn)題的。學(xué)習(xí)了程序設(shè)計(jì)語(yǔ)言后會(huì)發(fā)現(xiàn)我們的思維在慢慢的轉(zhuǎn)變,我們思考問(wèn)題的方式也在更加的嚴(yán)謹(jǐn)了,這是學(xué)習(xí)編程的結(jié)果。
如果有興趣的話可以考慮進(jìn)階了,去學(xué)習(xí)<C與指針>,<C專家編程>吧,這兩本書(shū)會(huì)介紹很多在課程老師講不到的,在一般性的書(shū)上看不到的。更多的是站在編譯器的角度去看待代碼,看待基本的語(yǔ)法了。比如編譯器如何編譯語(yǔ)言并生成可執(zhí)行二進(jìn)制文件的?這個(gè)編譯的過(guò)程是怎樣的?編譯器又是如何獎(jiǎng)產(chǎn)生的.exe文件交給CPU執(zhí)行的?一個(gè)基本語(yǔ)法的規(guī)則背后肯定是和編譯器的某一項(xiàng)工作原理是契合的,舉個(gè)例子吧:大家都知道的函數(shù)中的普通變量是在函數(shù)的調(diào)用結(jié)束后悔自動(dòng)銷毀的,而我們?cè)诤瘮?shù)中定義的靜態(tài)變量,也就是用static修飾的類型變量,他的內(nèi)存空間在函數(shù)調(diào)用結(jié)束后是不會(huì)銷毀的,這是為什么呢?這是因?yàn)榫幾g器為我們的程序分配的內(nèi)存進(jìn)行了一個(gè)分類,把不同類型的變量分門(mén)別類的存儲(chǔ),這樣子便于管理。至于變量?jī)?nèi)存空間銷毀與否的區(qū)別就不在這細(xì)說(shuō)了。當(dāng)然兩本進(jìn)階的書(shū)我是當(dāng)時(shí)沒(méi)有看,也是后面的學(xué)習(xí)中翻了翻的。
四:
最后不得不說(shuō)的是,還要把數(shù)學(xué)學(xué)好,這個(gè)好并不是要投入很多的精力在上面,但最起碼你要能獨(dú)立寫(xiě)得出習(xí)題,考試不要分太低吧。計(jì)算機(jī)科學(xué)還是很依賴數(shù)學(xué)的,畢竟圖靈與馮諾依曼兩位大師都是數(shù)學(xué)家出身呢。數(shù)學(xué)更多的是培養(yǎng)一個(gè)思考問(wèn)題的方式吧,通過(guò)做一些習(xí)題是很鍛煉自己對(duì)問(wèn)題的認(rèn)識(shí)與整體把握的。