c語言之前
1. c語言產生的歷史背景是怎樣的
C語言出現的歷史背景
C語言是國際上廣泛流行的計算機高級語言,既可用來寫系統軟體,也可用來寫應用軟體。 C語言是在B語言的基礎上發展起來的,它的根源可以追溯到ALGOL 60。1960年出現的ALGOL 60是一種面向問題的高級語言,它離硬體比較遠,不宜用來編寫系統程序。1963年英國的劍橋大學推出了CPL (combined programming language)語言。CPL語言在ALGOL 60的基礎上接近硬體一些,但規模比較大,難以實現。1967年英國劍橋大學的Matin Richards對CPL語言做了簡化,推出了BCPL (basic combined programming language) 語言。1970年美國貝爾實驗室的Ken Thompson 以BCPL語言為基礎, 又做了進一步簡化, 設計出了很簡單的而且很接近硬體的B語言 (取BCPL的第一個字母), 並用B語言寫了第一個UNIX操作系統,在PDP7上實現。1971年在PDP11/20上實現了B語言,並寫了UNIX操作系統。但B語言過於簡單,功能有限。 1972年至1973年間,貝爾實驗室的D.M.Ritchie 在B語言的基礎上設計出了C語言(取BCPL的第二個字母)。C語言既保持了BCPL和B語言的優點(精練,接近硬體),又克服了它們的缺點(過於簡單,數據無類型等)。最初的C語言只是為描述和實現UNIX操作系統提供一種工作語言而設計的。1973年,K.Thompson和D.M.Ritchie兩人合作把UNIX的90%以上用C改寫,即UNIX第5版。原來的UNIX 操作系統是1969年由美國的貝爾實驗室的K.Thompson和D.M.Ritchie開發成功的,是用匯編語言寫的。 1972年至1973年間,貝爾實驗室的D.M.Ritchie 在B語言的基礎上設計出了C語言(取BCPL的第二個字母)。C語言既保持了BCPL和B語言的優點(精練,接近硬體),又克服了它們的缺點(過於簡單,數據無類型等)。最初的C語言只是為描述和實現UNIX操作系統提供一種工作語言而設計的。1973年,K.Thompson和D.M.Ritchie兩人合作把UNIX的90%以上用C改寫,即UNIX第5版。原來的UNIX 操作系統是1969年由美國的貝爾實驗室的K.Thompson和D.M.Ritchie開發成功的,是用匯編語言寫的。
後來,C語言多次做了改進,但主要還是在貝爾實驗室內部使用。直到1975年UNIX第6版公布後,C語言的突出優點才引起人們的普遍注意。1977年出現了不依賴於具體機器的C語言編譯文本《可移植C語言編譯程序》,使C移植到其他機器時所需做的工作大大簡化了,這也推動了UNIX操作系統迅速地在各種機器上實現。例如VAX、 AT&T等計算機系統都相繼開發了UNIX。隨著UNIX的日益廣泛使用,C語言也迅速得到推廣。C語言和UNIX可以說是一對孿生兄弟,在發展過程中相輔相成。1978年以後,C語言已先後移植到大、中、小、微型機上,已獨立於UNIX和PDP了。現在C語言已風靡全世界,成為世界上應用最廣泛的幾種計算機語言之一。以1978年發表的UNIX第7版中的C編譯程序為基礎,Brian W.Kernighan和Dennis M.Ritchie (合稱K&R)合著了影響深遠的名著《The C Programming Language》,這本書中介紹的C語言成為後來廣泛使用的C語言版本的基礎,它被稱為標准C。1983年,美國國家標准化協會(ANSI)根據C語言問世以來各種版本對C的發展和擴充,制定了新的標准,稱為ANSI C。 ANSI C比原來的標准C有了很大的發展。K & R在1988年修改了他們的經典著作《The C Programming Language》,按照 ANSI C 標准重新寫了該書。1987年,ANSI又公布了新標准——87 ANSIC。
1990年,國際標准化組織ISO(International Standard Organization) 接受87 ANSI C為ISO C 的標准(ISO 9899—1990)。目前流行的C編譯系統都是以它為基礎的。本書的敘述基本上以ANSI C 為基礎。目前廣泛流行的各種版本C語言編譯系統雖然基本部分是相同的,但也有一些不同。在微型機上使用的有Microsoft C、 Turbo C、 Quick C、BORLAND C等,它們的不同版本又略有差異。因此,讀者應了解所用的計算機系統所配置的C編譯系統的特點和規定
2. 自學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語言順利!
3. 學習C語言基本的學習大綱順序是什麼
這是一個老話題來了,每個人的看法和理解都有所不同,所以呢,這個問題,摘錄的供你參考吧
第一階段:1、學習C語言,要從入門到精通,需要讀哪些書(從簡單的到難的排序,越詳細越好,最好都能注釋下選擇這本書的理由)? 入門階段:還是老譚那本。理由:雖然不能說它寫得有多好,但是你現在要做的是入門,要快速的掌握c的基本語法,這本書很好理解,能夠讓你在最短的時間內大致掌握這門語言的概更。
第二階段:《c程序設計語言》(The C Programming Language)和《C語言解惑》(The C puzzle book) 理由:《the c programming language》號稱c語言聖經。其實它也只是一本介紹基礎語法的書,不做入門教程是因為對於初學者來說,它難度稍大,之所以推薦,是因為它能讓你---系統而嚴密的---把C語言知識構架整理一遍。《c語言解惑》,系統的整理了c語法中容易讓你產生迷惑或容易犯錯的地方(如a+++++b等),這時候你才算真正開始學習c語言了.(以上兩本現在出重印了,應該在書店可以買到)
第三階段:《C陷阱與缺陷》(C Traps and Pitfalls)和《高質量c/c++編程指南》 理由:《c陷阱與缺陷》是讓對c的理解有質變得一本書,如如何理解(*(void(*)())0)()等問題,我的感覺是看完這本書讓我真正從小菜鳥變成了老菜鳥。《高質量...》,終於有一本國產的了,呵呵,我認為這本書是把你從土匪變成正規軍的最好指南,該書涉及編程風格、效率、重載、健壯性等一些列之前很難注意的問題。(以上兩本《c陷阱...》已絕版,不過網上可以下載到中英文版,《高質量...》本身就是網路書,很容易找到) 。
其它推薦書:
1、《c專家編程》《c和指針》 說實話這兩本書我並沒有看過(或看完),但有口皆碑,都是經典之作,不過都已經絕版,仔細找找網上有下載的。
2、有哪些好的C語言練習(越難的越好)? 對語言本身的練習其實就是你對它的理解,用得多了,注意得多了,自然就ok了。其它思維上的練習主要是演算法和數據結構方面的,嚴老的《數據結構題集(C語言版)》如果你能做完就相當了不起了。
3、要學精C語言,還要具備哪些條件? 其實c語言也只是一個工具而已,就像鋤頭一樣,你每天挖地鋤田自然就精通它了。只要不是白痴,應該都沒有問題。
4、C語言學完後接下去要學哪些語言好? 這個我就沒有資格回答了,因為除了少量匯編和c++,我大部分只用到了c,不過也許是一脈相承的c++吧。c是面向過程的語言,學習c++面向對象的思想。
4. 學習C語言之前需要學習些什麼知識
基礎的話什麼都不用。往深學需要英語 主要為了看外文書籍和代碼注釋。還需要數據結構和操作系統的知識。當然要想寫出一段高效的代碼 還需要離散數學,計算機演算法的知識。
程序員之路——如何學習C語言並精通C語言
程序員之路——如何學習C語言
學習C語言不是一朝一夕的事情,但也不需要花費十年時間才能精通。如何以最小的代價學習並精通C語言是本文的主題。請注意,即使是「最小的代價」,也絕不是什麼捷徑,而是以最短的時間取得最多的收獲,同時也意味著需要經歷艱苦的過程。
一、要讀就讀好書,否則不如不讀
所有初學者面臨的第一個問題便是:如何選擇教材。好的開始是成功的一半,選擇一本優秀的教材是事半功倍的關鍵因素。不幸的是,學校通常會幫你指定一本很差勁的C語言課本;而幸運的是,還可以再次選擇。
大名鼎鼎的譚浩強教授出了一本《C語言程序設計》,據說發行量有超過400萬,據我所知,很多學校都會推薦這本書作為C語言課本。雖然本人的名字(譚浩宇)跟教授僅僅一字之差,但是無比堅定地黑他這本書的。這本書不是寫給計算機專業的學生的,而是給那些需要考計算機等級考試的其它專業學生看的。這本書的主要缺點是:例子程序非常不專業,不能教給程序設計應該掌握的思考方式;程序風格相當地不好,會養成亂寫代碼的惡習;
Kernighan和Ritchie的《The C ProgrammingLanguage》(中譯名《C程序設計語言》)堪稱經典中的經典,不過舊版的很多內容都已過時,和現在的標准C語言相去甚遠,大家一定要看最新的版本,否則不如不看。另外,即使是最經典最權威的書,也沒有辦法面面俱到,所以手邊常備一本《C語言參考手冊》是十分必要的。《C語言參考手冊》就是《CReferenceManual》,是C語言標準的詳細描述,包括絕大多數C標准庫函數的細節,算得上是最好的標准C語言的工具書。順便提一句,最新的《C程序設計語言》是
根據C89標准修訂的,而《C語言參考手冊》描述的是C99標准,二者可能會有些出入,建議按照C99標准學習。還有一本《C和指針》,寫得也是相當地不錯,英文名是《Pointers onC》,特別地強調指針的重要性,算是本書的一個特點吧。不過這本書並不十分適合初學者,如果曾經學過C語言,有那麼一些C語言的基礎但又不是很扎實,那麼可以嘗試一下這本書。相信,只要理解了指針,C語言便不再神秘。
如果已經啃完了一本C語言教材,想要更進一步,那麼有兩本書一定要看。首先是《C Traps andPitfalls》(中譯名《C陷井與缺陷》),很薄的一本小冊子,內容非常非常地有趣。要注意一點,這本書是二十多年前寫成的,裡面提到的很多C語言的缺陷都已被改進,不過能夠了解一些歷史也不是什麼壞事。然後可以挑戰一下《Expert CProgramming》(中譯名《C專家編程》),書如其名,這本書頗具難度,一旦仔細讀完並能透徹理解,便可以放心大膽地在簡歷上寫「精通C語言」了。
切記一個原則,不要讀自己目前還看不懂的書,那是浪費生命。如果看不懂,那一定是缺失了某些必需基礎知識。此時,要仔細分析自己需要補充哪些內容,然後再去書店尋找講述的這些內容的書籍。把基礎知識補充完畢再回頭來學習,才會真正的事半功倍。
二、Unix/Linux還是Windows,這是個很大的問題
不同的編程環境會造就出不同思維的程序員。Windows的程序員大多依賴集成開發環境,比如VisualStudio,而Unix程序員更加鍾愛Makefile與控制台。顯而易見,集成開發環境更容易上手,在Windows上學習C語言,只需要會按幾個基
本的Visutal C++工具欄按鈕就可以開始寫Hello,
World!了,而在Unix下,需要一些控制台操作的基本知識。有人也許認為Unix的環境更簡潔,但習慣的力量是很大的,大家都很熟悉Windows的基本操作,而為了學習C語言去專門裝一個Unix系統,似乎有點不劃算。
對於一個只懂得Windows基本操作、連DOS是什麼都不知道的新手而言,盡快做一些有趣而有意義的事情才是最重要的。用C語言寫一個小程序遠比學習
ls、cat等命令有趣,況且要專注於C語言本身,就不得不暫時忽略一些東西,比如編譯鏈接的過程、Makefile的寫法等等等等。
所以建議初學者應該以Visual C++ 6.0(不是VisualC++ .NET)或者DevC++作為主要的學習環境,而且千萬不要在IDE的使用技巧上過多糾纏,因為今後一定要轉向Unix環境的。Visual C++6.0使用很方便,調試也很直觀,但其默認的編譯器對C標準的支持並不好,而DevC++使用gcc編譯器,對C99的標准都支持良好。使用順帶提一下,很多大學的C語言課程還在使用Turbo C2.0作為實驗環境,這是相當不可取的,原因其一是TC 2.0對C標准幾乎沒有支持,其二是TC2.0編譯得到的程序是16位的,這對今後理解32位的程序會造成極大的困擾(當然,用djgpp之類的東西可以使TC2.0編譯出32位程序,不過那過於復雜了)。
等學完一本C語言的教材,一定要轉向Unix平台繼續學習,幾乎所有的C語言高級教程都是基於Unix平台的(比如《C專家編程》)。轉變的過程是痛
苦的,需要面對的是各種紛繁復雜的命令,完全不同於Windows平台的思考方式,但是這種痛苦是值得的。Unix與C是共生的,Unix的思考方式和習慣更加符合C語言的思考方式和習慣。在Unix下,可以找到無數優秀的源代碼供你盡情閱讀,可以方便地查看某個庫函數的聯機手冊,還可以看到最優秀的代碼風格
歸結起來就是一句話:初學C語言,建議使用Windows系統和集成開發環境,在准備向「高手」方向努力時,請先轉向Unix平台。
三、萬事俱備,就是東風
書已選定,環境配置完成,正所謂萬事俱備,只欠自己的努力了。請從書的前言開始,仔細地閱讀手頭的教材,很多人看書喜歡直接從第一章開始看,這是錯誤的做法。前言是作者對整本書的大體介紹,作者一般會告訴需要什麼基礎才能夠順利閱讀本書,這可以幫助你檢驗自己的基礎知識是否已經具備。看完前言,還要瀏覽一下目錄,了解一下書的整體結構,順便給自己安排一下學習計劃。
學習C語言,必需注意每一個細節,書上的例子代碼一定要自己親自敲一遍,編譯執行輸出都跟書上說的一致才能算是學完了一個例子,如果不一致,就要仔細找原因。出了書本上有的例子,自己還要「創造」一些例子,比如學習運算符優先順序的時候,可以寫幾個相同的表達式,在不同的位置加上括弧,看看有哪些不同的行為,比如*p++和(*p)++,又比如a = b == c、(a = b) == c和a = (b ==c)等等。自己抄的書上的例子以及改造之後的例子,還有自己「創造」的例子,都應該仔細地歸類保存,並且要在源代碼中寫上簡短的注釋,闡述這個例子的意圖。
例子之後就是習題了,建議初學者把所有的習題都獨立做一遍,然後對照答案的代碼,看看自己的代碼有那些不足,再試著修改自己的代碼。很多人不重視習題,這是極大的錯誤,因為作者通常會在習題中說明一些重要的道理,而不是單純地檢驗前面的知識。
也許認為這樣學習太慢,其實不然。學得細致就不用走回頭路,等學到後面才發現自己前面沒搞清楚,那才是真的得不償失。一般說來,整本書讀完,應該完數千行乃至上萬行的代碼,無論是原封不動照抄書上的,還是自己心血來潮寫就的,都是今後繼續學習的一筆財富。以自己舉例,閱讀《Windows核心編程》時(只閱讀了3/4的內容),除了抄書上的代碼,還自己寫了很多例子,一共有5574行(用unix下的wc工具統計),時隔多日,早已記不清Windows的系統編程了,但只要花幾分鍾翻出以前的代碼看看,便會重新瞭然於胸。所謂好記性不如爛筆頭,就是這個道理。
仔細讀書、認真抄寫源代碼、獨立完成習題外加更進一步的實驗,最後將所有的代碼留下,成為自己的經驗和財富,絕對的辛苦,也絕對的事半功倍。當然,這種方式只適合學習需要精通的技術,如果不是學習C語言,還要具體情況具體分析。
5. C語言以前叫什麼,是誰弄出來的
C語言的原型ALGOL 60語言。(也稱為A語言) 1963年,劍橋大學將ALGOL 60語言發展成為CPL(Combined Programming Language)語言。 1967年,劍橋大學的Matin Richards 對CPL語言進行了簡化,於是產生了BCPL語言。 1970年,美國貝爾實驗室的Ken Thompson將BCPL進行了修改,並為它起了一個有趣的名字「B語言」。意思是將CPL語言煮干,提煉出它的精華。並且他用B語言寫了第一個UNIX操作系統。 而在1973年,B語言也給人「煮」了一下,美國貝爾實驗室的D.M.RITCHIE在B語言的基礎上最終設計出了一種新的語言,他取了BCPL的第二個字母作為這種語言的名字,這就是C語言。 為了使UNIX操作系統推廣,1977年Dennis M.Ritchie 發表了不依賴於具體機器系統的C語言編譯文本《可移植的C語言編譯程序》。即是著名的ANSI C。 1978年由美國電話電報公司(AT&T)貝爾實驗室正式發表了C語言。同時由B.W.Kernighan和D.M.Ritchit合著了著名的「THE C PROGRAMMING LANGUAGE」一書。通常簡稱為《K&R》,也有人稱之為《K&R》標准。但是,在《K&R》中並沒有定義一個完整的標准C 語言,後來由美國國家標准協會(American National Standards Institute)在此基礎上制定了一個C 語言標准,於一九八三年發表。通常稱之為ANSI C。 1987年,隨著微型計算機的日益普及,出現了許多C語言版本。由於沒有統一的標准,使得這些C語言之間出現了一些不一致的地方。為了改變這種情況,美國國家標准研究所(ANSI)為C語言制定了一套ANSI標准, 成為現行的C語言標准 3.C語言的主要特點 。C語言發展迅速, 而且成為最受歡迎的語言之一,主要因為它具有強大的功能。許多著名的系統軟體, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C語言編寫的。用C語言加上一些匯編語言子程序, 就更能顯示C語言的優勢了,象PC- DOS 、WORDSTAR等就是用這種方法編寫的。 1990年,國際化標准組織ISO(Intrernational StandardOrganization)接受了87 ANSI C為ISO C的標准(ISO9899-1990)。1994年,ISO修訂了C語言的標准。目前流行的C語言編譯系統大多是以ANSI C為基礎進行開發的,但不同版本的C編譯系統所實現的語言功能和語法規則有略有差別。
6. C語言誕生之前,有哪些重要的編程語言
你好,根據資料記載,C語言誕生前還有B語言和BCPL語言,C語言源自Ken Thompson發明的 B語言,而B語言則源自BCPL語言。C語言的誕生是和UNIX操作系統的開發密不可分的,原先的UNIX操作系統都是用匯編語言寫的,1973年UNIX操作系統的核心用C語言改寫,從此以後,C語言成為編寫操作系統的主要語言。1978年美國電話電報公司(AT&T)貝爾實驗室正式發布C語言,1983年由美國國家標准局開始制定C語言標准,於1989年12月完成,並在1990年春天發布,稱之為ANSI C,有時也被稱為 C89 或 C90。
7. 在C語言編程前是不是都必須先寫出演算法,然後再按照演算法編程
1.如果程序是和演算法有關的 必須這么做
2 如果程序沒有和演算法有關,可能是流程狀態的控制
必須胸有成竹 才開始編程
寫代碼的時間一般很短,需要花時間的是程序的模塊化設計 和功能實現的設計的確定,這些都定好了,代碼自然而然就出來了
如果先寫代碼再來想這些,已經晚了;因為你得不斷地返工
就如同造房子一樣 先有藍圖再建房子 而不是邊建房子邊設計藍圖
8. 緙栫▼璇璦瀛︿範欏哄簭
鏈榪戞垜鑰佸紵涔熼棶榪囨垜錛屽氨鍦ㄨ繖閲屽垎浜涓涓嬪暒
📚鍏堝﹀熀紜鐨刢璇璦
鍏堝﹀熀紜鐨(fortun錛宲ascal灝變笉鐢ㄤ簡錛屾棭宸茶繃鏃),鐩存帴瀛c璇璦(鎺ㄨ崘璋嫻╁己緋誨垪)寮濮嬪惂銆
🚀鏅嬬駭c++
鐒跺悗鏅嬬駭錛歝++錛岃村疄璇濓紝c++涔熷氨涓涓闈㈠悜瀵硅薄絳夋濇兂錛岃繖涓瑙掑害璁詫紝c璨屼技涓嶅︿篃鍙浠ャ
🌟瀛︿範闈㈠悜瀵硅薄璇璦
鏈変簡榪欎釜c++鍩虹鍐嶅幓瀛java錛宑#絳夐潰鍚戝硅薄璇璦灝變細鍙戠幇寰堢畝鍗曚簡錛屼竴鑸涓鍛ㄥ氨鑳藉︽槑鐧戒簡錛岋紙瀹為檯涓婂湪闈㈠悜瀵硅薄璇璦閲宑++綆楁槸鏈闅劇殑浜嗭級銆
🔁寰搴忔笎榪
鏈鍚庯紝璇璦瀛︿範鍗佷釜寰搴忔笎榪涚殑榪囩▼錛屼竴鏄鐢變簬鍚勭嶈璦鏄鐩鎬簰鍊熼壌鐨勶紝浜屾槸鐢變簬璇璦涔熷湪涓嶆柇鍗囩駭鐗堟湰錛屾墍浠ヤ篃鍙浠ュ洖澶村幓鐪嬬湅闈㈠悜榪囩▼璇璦錛屼笉鏂宸╁滻銆
💰c++宸ヨ祫楂
c++宸ヨ祫姣攋ava楂橈紝浣嗘槸java灝變笟鏇村揩涓鐐癸紝鑰屼笖c++鍦ㄦ父鎴忕瓑搴曞眰寮鍙戦嗗煙鏁堢巼姣攋ava楂橈紝闄や簡j2me鍩烘湰娌′漢鍘葷敤java寮鍙戞父鎴...
📖鎺ㄨ崘璧勬簮緗戠珯
鏈鍚庢帹鑽恦erycd銆佺嫍鐙楄繖浜涜祫婧愮綉絝欙紝鍋跺緢澶氳嗛戞暀紼嬶紝灝ゅ叾鏄疘T綾葷殑錛