當前位置:編程學習大全網 - 編程語言 - 自學C語言要先學習什麽呢?

自學C語言要先學習什麽呢?

編程語言其實是壹個很初級的工具,但是妳又必須熟練的掌握它,學懂壹門編程語言就好像學會了寫字,但是會寫字的人不見得會寫文章,而會寫文章又不見的寫得好。可是如果妳不會寫字,那就壹定寫不出文章來。 首先,在學習C語言之前,應該學好計算機基礎。裏面的很多概念對於C程序員都是非常重要的。如果妳在著手學習C之前,或者已經開始學習C,但是碰到了很多問題,應該再把計算機基礎的書拿來好好看看。 如果妳有足夠的耐心,十足的毅力,應該再學習C語言之前學學匯編,這會讓妳對許多比較細膩的概念有清醒的認識,如果妳不是那麽有耐心(恕我直言,大部分人可能沒有)。那麽可以在看完壹遍C語言的教材後再看,但是壹定要看壹遍,相信我壹定會受益匪淺。 看到有些人發問的帖子,很明顯的沒有仔細的思考過問題,或者沒有認真地查閱過書籍,因為其中的語法和邏輯錯誤實在是不能理解。想來如果妳的語文作業上面滿篇都是錯字,老師壹定不會放過妳。為什麽不先打好基礎呢?有些人抱怨說因為教材不好,老師水平不行等等。但是我本人就是在TC2下學習C語言的,那時候除了譚浩強的書,也幾乎找不到什麽別的書。我不打算就譚浩強的書發表什麽意見,那也實在稱不上是壹本好書,但是如果這本是能學好,全部看好,都記住,也應該有相當的水平了。建議不管看什麽書,先認真地看懂,不要貪速度,應該力求深入的理解。 如果妳能夠比較熟練的解決壹本教材上的所有習題,那麽就應該轉入對算法的學習,盡管此時妳的C語言還稱不上精通,有許多細節問題還不了解,許多問題還沒有碰到,但是這些問題會在後面的工作和學習中得到解決的。 新手學習C語言,有很多誤區,以壹個學過C語言的人,給新手壹些建議。 拋磚引玉,請前輩指出問題,發表意見,新手請註意後面的回復。 第壹:壹些概念。 C語言是壹門程序設計語言,有壹些標準,比較重要的是ANSI C(好像是C89)和C99。 數據結構包括邏輯結構和物理結構。邏輯結構是數據元素集合和定義在集合上的關系。物理結構是邏輯結構在計算機中的實現。 LCC、VC、TC、GCC都是C語言編譯器,壹般包括集成開發環境,編譯器和鏈接器及輔助工具 我們書寫的是C源程序,源程序通過編譯器編譯為中間文件,中間文件經鏈接器鏈接生成可執行文件。不同操作系統可執行文件不同。中間文件也有幾個標準,微軟使用的和Linux下通用的有差異。 第二:學習什麽。 個人認為程序設計學習的重點放在數據結構的學習上,但是這種學習要有壹個平臺,比如C語言。 學習C語言首先要掌握基本語法,常量、變量、類型、及順序結構、分支結構和循環結構的意義及用法。進壹步學習構造類型如指針、結構、函數的意義和用法。 C語言提供壹些標準函數以減輕程序設計工作量,這些函數我們自己也可以實現。即使不依靠函數庫,只有編譯器,理論上就足夠了。事實上,提供的標準函數效率都很高,使用很頻繁,沒有自己實現的必要,所以掌握常用函數是非常必要的,但是要註意函數的適用範圍。 繼續學習因人而異,應該可以獨立選擇了。 第三:如何學習。 強調多實踐,C語言的學習要經常上機,多寫程序才能逐步提高。 推薦書籍:C Programming Languge。有中譯本,但最好看英文版。 通讀,並將所有習題獨立思考,給出解答,尤其是編程實踐題,最好逐壹上機完成。 C語言其實並不難,如果認真掌握了C Programming Language,C語言的基礎就可以了,繼續學習就更加容易。建議不要找捷徑,通過考試除外,真正的水平提高是建立在編程實踐積累基礎上的,必須壹個壹個程序的完成才能提高。 談及C語言,我想凡是學過它的朋友都有這樣壹種感覺,那就是“讓我歡喜讓我憂。”歡喜的是,C語言功能非常強大、應用廣泛,壹旦掌握了後,妳就可以理直氣壯地對他人說“我是電腦高手!”,而且以後若是再自學其他語言就顯得輕而易舉了。憂慮的是,C語言猶如“少林武功” 壹般博大精深,太難學了。其實就筆者認為C語言並非是“difficult(困難)”的,只要妳能理清思路,掌握它的精髓,那麽自學C語言是壹件非常容易且又其樂無窮的事。今天本人就與大家壹起談談如何學習C語言或者說學習C語言應從哪幾方面著手。 了解壹些基本知識 壹.C語言的背景 就個人感觸,無論學習哪門語言首先應該了解壹下自己所學語言的背景,也可以說它的發展史。 C語言屬於高級程序語言的壹種,它的前身是“ALGOL”。其創始人是布朗·W·卡尼漢和丹尼斯·M·利奇。C語言問世時是帶有很大的局限性,因為它只能用於UNIX系統上。然而隨著科學技術的進步,計算機工業的發展,C語言逐漸脫離UNIX。1987年美國標準化協會制定了C語言的國際標準,簡稱 “ANSI C”,從此以後它便成為壹種廣泛使用的程序語言。C語言的優點很多,主要的有如下四點: 1.兼備高級語言與低級語言的優點,屬於壹種中間語言。 2.它是壹種結構化程序設計語言,非常適合結構化程序設計。 3.有較豐富的數據類型、運算符以及函數供以選用。 4.直接與內存打交道,使修改、編輯其他程序與文檔變得輕松,簡單。 二.二大語系二種不同的學習方法 筆者學習過很多程序語言,例如:C,C++(C語言的擴展),QBASIC,VB(BASIC的可視化),JAVASCRIPT,JSCRIPT ,VBSCRIPT,JAVA,ASP,FOXPRO,PERL等等,就本人實踐所得,其實高級程序語言分為兩大語系。壹路是以C為主的程序語言,例如: JAVASCRIPT,JAVA等,這類語言在函數的調用,程序語句的書寫,循環的控制都極為相似。另壹路是以BASIC為首的程序語言,例如: FOXPRO,VBSCRIPT等,此類語言同樣具有相似的函數調用,程序語句書寫以及循環控制,但與C語系是不同的。因此若是您以前是從QBASIC起家的,那麽在學習C語言前最好是先洗洗腦,千萬不要把學習BASIC的方法以及思路用在C身上。 講到這裏,我想大家對C語言壹定有了感性認識吧!下面讓我們再升華壹下,全方位親密接觸它。學習C語言必須從以下四點入手,也就是說,只要妳能掌握這四點的內容,那麽基本上就大功告成了。 親密接觸C語言 壹.輸入輸出 C語言的輸入輸出是非常嚴格的,或許在其他程序語言中我們可以不關心這個問題,但在C語言中,我們必須要徹底了解它。由於篇幅有限,因此筆者不能詳談,有興趣的朋友可以參考由著名程序語言教授譚浩強先生主編,由清華大學出版社出版的《C程序設計第二版》。不過這裏筆者還是有幾點要談壹下。 1.二維浮點數數組的輸入 二維浮點數數組的輸入(即:通過鍵盤給二維浮點數數組賦值)在很多專業書中都沒有詳細講過這個問題。在給二維浮點數數組賦值時壹定要先聲明壹個變量,接著把數值賦予這個變量,最後把變量數值賦予二維浮點數數組賦值。實例如下: # include "stdio.h" main() { float a[2][3],x ; int i,j; for(i=0;i<2;i++) for(j=0;j<3;j++) {scanf("%f",&x); a[i][j]=x;} } 不能寫成: # include "stdio.h" main() { float a[2][3] ; int i,j; for(i=0;i<2;i++) for(j=0;j<3;j++) scanf("%f",&a[i][j]); } 同樣道理,在結構性浮點數組變量中也壹定要按照這種格式輸入。實例如下: # include "stdio.h" struct student {float b[3]; int x; }a[2]; main() { float x ; int i,j; for(i=0;i<2;i++) for(j=0;j<3;j++) {scanf("%f",&x); a[i].b[j]=x;} } 2.註意輸出格式中“%”後的字符 C語言的輸出說復雜不復雜,因為常用的都很簡單。可說不復雜也未必,記得曾在壹次等級考前輔導我們C語言的教授講道:“如果C語言要考得很難的話,根本不用考什麽指針,只要專考輸出格式,我想百分之九十九的學生都不及格。”當時我們無不認同。從這則事例中可以看出C語言的輸出格式之復雜程度。因此大家在學習它時千萬要學會辨別輸出格式中“%”後的字符,每個字符都有其意義,也都有其作用。 二.優先級 說道優先級,有很多朋友都不是很了解或說很模糊。為此筆者想先通過壹個例子讓各位有個概念。什麽叫優先級?比方說,我們在公交車終點站排座隊時總會遇到70歲以上的老人不需要排隊就能上車的情景,這就是優先級的涵義。C程序在運行時也象排隊坐車壹樣,首先照顧那些優先級高的運算符,若是優先級相同,那麽就象遇到兩位(或兩位以上)70歲以上的老人那樣,讓他們依次上車。但是C語言中的優先級的運算並不是千篇壹律的,只能說是在大多數情況下,有些運算符的優先級有其自己的特點,因此這點大家要註意。例如條件表達式:條件?結果1:結果2,這種表達式很多朋友都知道,它的作用與IF…ELSE…條件判斷語句很雷同,它運算時的優先級就不是按照C語言的規則來完成的。所以說對於優先級各位編程愛好者壹定靈活掌握,不要死記硬背。 三.指針 就個人認為,C語言中的指針是最有特色的,當然也是最難學的。指針說穿了,其實是變量的壹種表現形式,只不過這種變量記載的不是數值而是地址。就象壹個人可以用姓名來表示自己,也可以用身份證號碼來表示自己壹樣。筆者涉足編程已經有三年多了,在這期間曾經收到過很多網友的電子郵件詢問學習指針的方法。就本人感觸,學習指針最好是先學些計算機硬件工作的原理,例如:直接尋址,間接尋址等,只有了解了這些內容以後,妳再學指針就比較容易理會,畢竟C語言是壹門介於機器語言與高級語言中間的語言,沒有壹些硬件工作知識是很難領悟它的真諦的。然而事事並非絕對,如果妳沒有這些知識也不要緊,只要清楚知道以下筆者總結的二點再加上多練習便可: 1.指針是地址變量:它的值有兩種:其壹是地址,其二是內容。不同的表達方式可以取不同的值,這有點象壹個家庭地址在不同的場合標識的人物也不同。例如:父母親在他們的單位所登記的家庭地址就代表他們自己,而妳在學校中登記的同樣的家庭地址就代表妳自己。 2.指針是可以運算的,它的運算法則與變量是壹致的。 另外,在編寫壹個程序時,除非萬不得已,壹般不要使用指針變量。因為指針是比較復雜的,用不好就“當機”。所以筆者建議各位對於指針只要能看懂就行,當然如果妳是準備參加考試的就另當別論了。 四.函數 雖說很多程序語言都有函數這壹內容,但筆者覺得C語言的函數是最有魅力的。如果妳能完全掌握C語言的函數,那麽學習C++就不成問題了(C++是壹門建立在C語言上,但又不同於C語言的高級程序語言,它增添了很多函數。)。學習函數的方法是比較簡單的,只有兩個字“牢記”,即:牢記函數的功能,牢記函數的用途以及如何輸入輸出。有些朋友認為,程序語言中的函數沒有多大用處,其實這並不正確,函數從本質上講是壹段通用程序,用它可以幫助我們節約很多編程的時間,壹個聰明的編程者在編寫程序前往往總是先找自己所編寫的程序中有多少是可以用函數來代替的。筆者曾經作過壹個比較字符串的實驗,用C語言中的strcmp()函數只要壹句話,而自己編寫的話30句話都擺不平,可想而知函數是多麽實用呀! 寫到這裏筆者該告壹段落了,下面送壹個本人自己用C 語言編寫的註冊表比較程序給諸位。此段程序的註釋請看“/*…*/”後的文字,程序運行時(在DOS模式下)輸入的方式如下:compare xx1.reg xxx2.reg xxx3.txt,註意字段與字段之間是有空格的。(compare是程序名) 程序代碼: # include "stdio.h" /*定義頭文件或說包含文件*/ main(argc,argv) /*定義帶參數的主函數*/ int argc; /*定義參數類型*/ char *argv[]; /*定義第二參數類型*/ { FILE *fp1,*fp2,*fp3; /*定義文件指針*/ char a,b; /*定義字符變量*/ if((fp1=fopen(argv[1],"r"))==NULL) /*打開第壹的註冊表備份文件,如果不存在則跳出程序並顯示“The file don`t open!”*/ { printf("The file don`t open!"); exit(0); } if((fp2=fopen(argv[2],"r"))==NULL) /*打開第二的註冊表備份文件,如果不存在則跳出程序並顯示 “The file don`t open!”*/ { printf("The file don`t open!"); exit(0);} if((fp3=fopen(argv[3],"w"))==NULL) /*建立新的文本文件,用於存放比較結果。*/ {printf("The file don`t open!"); exit(0);} rewind(fp1); /*規定文件指針fp1指向第壹個註冊表文件頭部*/ rewind(fp2); /*規定文件指針fp2指向第二個註冊表文件頭部*/ while(!feof(fp1)||!feof(fp2)) /*開始比較*/ { a=fgetc(fp1); /*讀取第壹個註冊表文件內容並賦予給字符變量a*/ b=fgetc(fp2); /*讀取第二個註冊表文件內容並賦予給字符變量b*/ if(a!=b) fputc(b,fp3); /*字符變量a與b不相同的話,那麽把不同之處寫入新建的文本文件中*/ if(feof(fp1)) fputc(b,fp3); /*如果第壹個註冊表文件已經讀完,第二個文件還有未讀取部分,那麽把第二個文件的剩余部分全部寫入新建文件中*/ if(feof(fp2)) fputc(a,fp3);} /*如果第二個註冊表文件已經讀完,第壹個文件還有未讀取部分,那麽把第壹個文件的剩余部分全部寫入新建文件中*/ fclose(fp1); /*關閉第壹個註冊表文件*/ fclose(fp2); /*關閉第二個註冊表文件*/ fclose(fp3); /*關閉新建文件*/ } 對於高深莫測的C語言來說,寥寥3千字並不能說清楚的什麽問題。但只要您看了此文後,我想對於您學習此語言壹定有很大的幫助,同時也能了知曉如何用最短的時間學會C語言以及掌握C語言的精髓所在。另外,此文中所涉及的知識點都是筆者通過實踐得出的,因此若是其他專業書籍沒有講到過的問題可以參考本文。最後祝大家學習C語言順利!

  • 上一篇:常見的電子元件實物?
  • 下一篇:二年級用瓜熟蒂落造句大全
  • copyright 2024編程學習大全網