我的C學習之路 (轉)

gugu99發表於2008-05-27
我的C學習之路 (轉)[@more@]

我的C學習之路
  2002.10.22
  作者:Andy  GPA Studio

  為什麼學C語言
  說起來真覺得有點慚愧,回想一年前時是因為考中程而去學習C語言的。小A就是因為這樣才接觸了C語言,當時還經常聽到對於準備學習的我一些不好的傳聞,我不知道是不是傳聞,反正他們一時說“都學C語言都過時了”,一時又說“C語言實在太難學了”等等。我有好幾個同學那時候都開始學習著VB或VFP之類的視覺化語言了(學VFP其實是因為我們是從FB走過來的),所以當時真的有一點動搖的,但我的目標還是不會變的:考上員。

  準備學習階段
  決心要考上中程的我,就在升到高二新學期時就和幾個志同道和的同學一起研究一下這事,首先當然是要有一本書在手,但至於買什麼書就得好好想想了(一本好的書可以帶給初學者學習的興趣)。剛好這年新來的高一也是學習C語言的,我想老師的選擇應該不會錯吧!最後我們每個人手上都有了自己的第一本C語言書《C第二版》,作者就是現在常給我們叫作“老潭”的人了,其人姓潭名浩強。

  初學C語言
  細閱目錄是我每看一本新書時必須的,而且我還常試圖想出其大概內容(這完全是小A“天馬行空”的想象力)。對於我看書的心得,無論是什麼書,沒法想象一遍就能把它完全搞懂,所以我通常都會重頭開始閱讀幾遍,對於懂的地方就搞得它精,不懂的地方就搞懂吧(看過幾次後常常你都會對自己這麼說“原來是樣的”),所以我的建議是開始閱讀時不要遇到什麼難的地方就馬上停下來,可以直接跳過這部分。說明一下,以上都是我對於學習的新認識,以前的話我還是笨笨的一步一步來,所以下面講的內容都會“取長避短”。

  細談學習《C程式設計》
  C語言概述:
  通常關於語言的教程都會交代一下其語言的發展歷史,《C程式設計》也不離外。

  程式的靈魂-演算法:
  哇!這一章怎麼會讓我有似曾相識的感覺呢?什麼是程式?又擺出了經典的一個等式了,資料結構+演算法=程式,沒錯,演算法是重要的。演算法的表示可以是自然語言、流程圖、N-S流程圖、虛擬碼等其它工具來到表示。以上的就總是有印象在我的腦海裡,但一時又想不到,但在進一步學習中我終於發現了其秘密了,原來我有另一本老潭的書《Qbasic語言教程》,這一書我不去翻開的舊書堆我也差點給忘了呢(哈,小A差點就忘了有學過QB語言,都怪小A當時的興趣都在FoxBASE上)。《Qbasic語言教程》的第一章和《C程式設計》的第一章沒有多太分別,我想是完全照搬的吧!還有一點就是連練習題也基本是一樣的(也難怪老潭,因為他出的教學的書實在是太多了,如果每本都不同風格的話,那麼我想他早已滿頭白花了,所以偷一下懶也是應該的,哈哈~`)

  資料型別、運算子與:
  資料型別是語言所必須有的,但C語言的資料型別種類相對於其它語言來說就顯的特別的多了,以前我學FoxBASE都只是碰到過字元型、數值型、邏輯型這三種罷了。所以搞懂C語言的資料型別也變成了初學者的難題之一,我在這裡提一個建議給大家。學習C語言的資料型別不要想著一次過把把它們都記住了就算完事,也沒有可能的事。因為對於各型別的資料參於賦值運算,就比如一個字元型的賦值到整數型裡,他們是沒有錯的,編譯自動地將字元轉為相應的ASCII碼來到進行運算,其它更多的我不在這裡贅述了,因為老潭書上裡有。小A再插一句,它們無非都是關係到原碼、補碼、反碼這三個知識,如果搞懂了這我想一切都好辦了。
  資料和運算子組成一個表示式,對於表示式這個概念其實小A也是在學習C語言時才真正領悟到的,當時學QB時又不怎麼學,而FoxBASE呢,我好像沒有聽到過這個概念(這都怪小A了,哈哈)談到表示式又有一個建議給初學者的,各型別之間的執行型別一定是按佔用位元組小的變為和大的一樣,比如int和double,int型的變數就要轉為double的進行執行算。而float和char是特殊的,它們都各自變成為double和int來到參加運算。執行符的優先順序在中是佔絕對重要的位置,很多程式也因為這樣而常存在錯誤,而起來又看似正常,但其結果常常不同所想的一樣。一個不太起眼的地方就常令初學者覺得奇怪。怎麼掌握好它呢?一開始不要緊著來,以後學習當中將會慢慢的把它們都掌握在手中的了,你不要又告訴我你一次過就背完那張運算子優先順序的表,我想你這樣沒過幾天什麼都給忘掉了,所以這裡強調實踐上把它們掌握。

  C語言的輸入輸出
  我們學習程式設計都是因為喜歡它能在螢幕上顯示出東西來,而這東西完全是由你一手控制操作的。每當與計算機打交道的時候都會有莫大的滿足感猶生。輸入輸出在程式設計中可以說是佔了一大席位(沒有輸入輸出還有意義嗎?)聽聞標準C其實是沒有輸入輸出語句的,是輸入輸出庫來到完成的。stdio.h這個頭就是了,呀!奇怪了,我怎麼剛開始用C程式設計的時候也沒有用到這個標頭檔案啊?小A,其實不是不用,而是因為stdio.h這個標頭檔案包含了一些最基本最常用的函式(輸入輸出就是重點了),就早給連結了。

  在學習輸入輸出這章不是剛好可以做一些資料型別的測試嗎?嗯!是機會動動你的手了,說到初手動手除錯程式,我就不得不說一下關於TC(編譯器)裡的一個問題了,就是路徑設計的問題,請看?TOPIC_ID=180&Forum_ID=33">這帖有圖倒教你如何設定好它。我當時也真是夠努力的了,我試了大量的輸出格式符和表示式運算,就如下:
  int a,float b;
  printf("%d",a+b);
  因為這裡b是float,所以自動轉為double型再跟a相加,a在這裡也隨之變為與其相應的double型,再後就是輸出結果,結果是按int型輸出,由此double強制轉換成int切斷小數點後的數。我想大家也不會偷懶吧,因為小A都已經是一個很懶的人,但小A都還是認真的對待了。大家努力吧,我們所學的不會白費的,現在下來我想資料型別和表示式都有了一個大的飛躍了。

  程式控制結構
  相信大家對這都非常熟悉了吧(有學過程式設計的人或雖然沒有學過,但看過的人都知道)所以也沒有什麼好說的,注意一下語法就行了。那時我就是給一個地方給騙了,其實並不是騙,而是小A自己不細心罷了。do...while();這個看上去應該和QB的一樣,可它就偏偏不和你所想的一樣,對於QB來說,這個是直到型迴圈,就是當條件為真的進修才退出迴圈,而C呢,它既然條件為假的時候才退出,即為真時也在繼續迴圈。(大家現在應該知道是小A是多麼的笨的了吧!明明細心看書就沒事了,而小A自以為是,把QB往C搬了)這裡得出一個結論就是各種不同的語言都有自己的特性,不要以為看上去一樣但住住這都會給你一個“出乎意料”的。

  函式
  函式在於C語言裡說算是一個大特色了,因為組成C程式的都是由函式來完成。提倡模組化是程式導向程式設計的一個重要因素,說真的,我特別喜歡C語言裡的函式定義,因為我覺得它非常美。你看這兩{ }個符號是多麼的有線條感,真的是美的享受。FUNCTION... END FUNCTION見鬼去吧!哈哈哈。

  陣列、指標、結構體
  我喜歡C的靈活,但它也讓我更愁。說到C的靈活大家應該都知道是針指了,特別是陣列和指標的一些關係。而結構體的運算更是離不開指標了,至少我是這麼認為。我寫到這裡不想再下筆了,因為之前我寫的“程式設計師考試補課筆記”上都有談及到,而且是一種新的看法(小A覺得不同書上所說就認定是不同的了,哈哈~)當然這種看的思考指標都是出自於我的老師。大家把它從我的家上DOWN下來吧,地址是 ,大家有什麼新的見解或者建議都歡迎上ChinaGPA.com(GPA之家)發表。
  就這樣結束這篇“我的C學習之路”嗎?不,小A還想繼續塗(塗鴉)啊!那好吧,其實還有一些值得一說的話,我想再推薦一兩本好書給大家。在我學習C中都買了好幾本相關的書了,一本機械工業出版的《C程式設計教程》,這本書小A推薦給喜歡挑戰的朋友,因為裡面的習題,不,不應該叫習題,叫它專案好了。比起老潭那本基本上都是關於數學的習題有趣多了,相當一些的都是有關於編一些小遊戲或者更有挑戰的是用C寫一個編譯器出來。還有一本是我還沒有怎麼看過的,但書裡的內容真的不錯,記憶體(小A以前根本不知道有分什麼近指標、遠指標的),中斷編寫和駐留記憶體程式,其實我本想都把它們學一學的,可是因為中程考試的原因,最後還是放棄了,不過有機會的話我還是會把它們攻破的。
  學習離不開實踐,實踐中自然也會學到知識。在我剛學C語言的時候家裡架上了,網上的資源不多不少也長住在我的裡了。另外還真的非常感謝,今天這篇文章能出現也是完全受網路的影響。侯捷這個名字我想你一定聽說過吧,至從我上了他的網站後完全改變了我,他的每一篇文章都鼓勵著我,燃燒起我內心的一把“火”,讓我感覺到學習是充滿著樂趣。我所寫的文章需要不是驚天地的,但是我絕對是真心想幫助每一位助學者,我也是過來人,感受到孤獨一個人學習的苦。所以我非常喜歡結識一下網上的寫手,我願向他們學習,我也曾受他們的文章所感動,也更受他們的技術文章也增長。
  我需要在這裡再多謝一個人,在短短的幾個星期裡,讓我完完全全搞明白C語言的是我老師林海國,希望他不會介意把他的名字放到這篇這麼糟糕的文章上,他的無私精神讓我深深感動。對於上面說的完完全全可能淡不上吧,不過至少給我的感覺是我覺得C語言裡再沒有朦糊點了。
  小A好不容易終於把這篇文章塗完了,謝大家一直對GPA之家的支援,小A其實也想借些機會讓更多的人動起你手頭上的筆頭,幫助更多的人。因為連小A語文水平可以說爛得很,而且技術雖然不是很高,但至少能夠把自己認為是的地方說出來,讓更多人受益。小A在這裡收得到大家的認同,如果你是有心的人,希望你能加入GPA之家,技術是次要的,還是主要你有幫助的人心。
  還有一件事也在這裡說明一下,很多人都問我GPA是什麼意思,其實說出來我也覺得自私了。因為其中最後的一個A就是指小A了,前面兩個是 Great Programmer 出色/傑出的程式設計師
  我們的目標是:做中國優秀的程式設計師


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1004650/,如需轉載,請註明出處,否則將追究法律責任。

相關文章