久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: C語言學習方法 [打印本頁]

作者: 51黑tt    時間: 2016-3-5 04:00
標題: C語言學習方法
 C語言是一種計算機程序設計語言。它既具有高級語言的特點,又具有匯編語言的特點。它可以作為系統設計語言,編寫工作系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬件的應用程序。因此,它的應用范圍廣泛。主要有以下特點:
  C語言在很多方面都可以用,不僅僅是在軟件開發上,各類科研都是需要用到C語言的。具體應用比如我是學硬件的,單片機以及嵌入式系統都可以用C來開發。
  C 語言發展如此迅速, 而且成為最受歡迎的語言之一, 主要因為它具有強大的功能。許多著名的系統軟件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 語言編寫的。用C 語言加上一些匯編語言子程序, 就更能顯示C 語言的優勢了, 像PC- DOS 、WORDSTAR等就是用這種方法編寫的。歸納起來C 語言具有下列特點:1. C是中級語言,它把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以象匯編語言一樣對位、字節和地址進行操作, 而這三者是計算機最基本的工作單元。
  2. C是結構式語言.結構式語言的顯著特點是代碼及數據的分隔化, 即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰, 便于使用、維護以及調試。C 語言是以函數形式提供給用戶的, 這些函數可方便的調用, 并具有多種循環、條件語句控制程序流向, 從而使程序完全結構化。
  3. C語言功能齊全C 語言具有各種各樣的數據類型, 并引入了指針概念, 可使程序效率更高。另外C 語言也具有強大的圖形功能, 支持多種顯示器和驅動器。而且計算功能、邏輯判斷功能也比較強大, 可以實現決策目的編游戲,編3D游戲,做數據庫,做聯眾世界,做聊天室,做PHOTOSHOP做FLASH,做3DMAX。
  4. C語言適用范圍大C 語言還有一個突出的優點就是適合于多種操作系統, 如DOS、UNIX,也適用于多種機型。
  C語言對操作系統和系統使用程序以及需要對硬件進行操作的場合,用C語言明顯優于其它解釋型高級語言,有一些大型應用軟件也是用C語言編寫的。
  C語言具有繪圖能力強,可移植性,并具備很強的數據處理能力,因此適于編寫系統軟件,三維,二維圖形和動畫。它是數值計算的高級語言。
  常用的C語言IDE(集成開發環境)有Microsoft Visual C++,Borland C++,Watcom C++ ,Borland C++ ,Borland C++ Builder,Borland C++ 3.1 for DOS,Watcom C++ 11.0 for DOS,GNU DJGPP C++ ,Lccwin32 C Compiler 3.1,Microsoft C,High C,Turbo C,Dev-C++,C-Free, win-tc 等等......
  對于一個初學者,Turboc2.01是一個比較好的軟件。Turboc2.01是為了照顧不熟悉DOS環境軟件操作的廣大初學者,讓大家能在Windows環境下方便地安裝TurboC。下載該改良版后就像普通軟件一樣安裝既可使用,十分方便。
  近年來,大多數人用Windows操作系統的圖形界面,用鼠標進行操作,感到用TurboC2.0不太方便,建議用TurboC++3.0作為編譯工具!
[編輯本段]
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語言編譯程序》。
  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編譯系統所實現的語言功能和語法規則有略有差別。
[編輯本段]
C語言的優點
  1. 簡潔緊湊、靈活方便
  C語言一共只有32個關鍵字,9種控制語句,程序書寫自由,主要用小寫字母表示。它把高級語言的基本結構和語句與低級語言的實用性結合起來。 C 語言可以象匯編語言一樣對位、字節和地址進行操作, 而這三者是計算機最基本的工作單元。
  2. 運算符豐富
  C的運算符包含的范圍很廣泛,共有34個運算符。C語言把括號、賦值、強制類型轉換等都作為運算符處理。從而使C的運算類型極其豐富表達式類型多樣化,靈活使用各種運算符可以實現在其它高級語言中難以實現的運算。
  3. 數據結構豐富
  C的數據類型有:整型、實型、字符型、數組類型、指針類型、結構體類型、共用體類型等。能用來實現各種復雜的數據類型的運算。并引入了指針概念,使程序效率更高。另外C語言具有強大的圖形功能, 支持多種顯示器和驅動器。且計算功能、邏輯判斷功能強大。
  4. C是結構式語言
  結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰, 便于使用、維護以及調試。C語言是以函數形式提供給用戶的,這些函數可方便的調用,并具有多種循環、條件語句控制程序流向,從而使程序完全結構化。
  5. C語法限制不太嚴格,程序設計自由度大
  雖然C語言也是強類型語言,但它的語法比較靈活,允許程序編寫者有較大的自由度。
  6. C語言允許直接訪問物理地址,可以直接對硬件進行操作
  因此既具有高級語言的功能,又具有低級語言的許多功能,能夠象匯編語言一樣對位、字節和地址進行操作,而這三者是計算機最基本的工作單元,可以用來寫系統軟件。
  7. C語言程序生成代碼質量高,程序執行效率高
  一般只比匯編程序生成的目標代碼效率低10へ20%。
  8. C語言適用范圍大,可移植性好
  C語言有一個突出的優點就是適合于多種操作系統, 如DOS、UNIX,也適用于多種機型。
  c語言-順序結構
  順序結構的程序設計是最簡單的,只要按照解決問題的順序寫出相應的語句就行,它的執行順序是自上而下,依次執行。
  例如;a = 3,b = 5,現交換a,b的值,這個問題就好像交換兩個杯子水,這當然要用到第三個杯子,假如第三個杯子是c,那么正確的程序為: c = a; a = b; b = c; 執行結果是a = 5,b = c = 3如果改變其順序,寫成:a = b; c = a; b = c; 則執行結果就變成a = b = c = 5,不能達到預期的目的,初學者最容易犯這種錯誤。順序結構可以獨立使用構成一個簡單的完整程序,常見的輸入、計算,輸出三步曲的程序就是順序結構,例如計算圓的面積,其程序的語句順序就是輸入圓的半徑 r,計算s = 3.14159*r*r,輸出圓的面積s。不過大多數情況下順序結構都是作為程序的一部分,與其它結構一起構成一個復雜的程序,例如分支結構中的復合語句、循環結構中的循環體等
  C語言的適用范圍
  C語言具有繪圖能力強,可移植性,并具備很強的數據處理能力,因此適于編寫系統軟件,三維,二維圖形和動畫它是數值計算的高級語言。
[編輯本段]
C語言的缺點
  1. C語言的缺點主要是表現在數據的封裝性上,這一點使得C在數據的安全性上做的有很大缺陷,這也是C和C++的一大區別。
  2. C語言的語法限制不太嚴格,對變量的類型約束不嚴格,影響程序的安全性,對數組下標越界不作檢查等。從應用的角度,C語言比其他高級語言較難掌握。
  [C語言指針]
  指針就是C語言的一大特色,可以說C語言優于其它高級語言的一個重要原因就是因為它有指針操作可以直接進行靠近硬件的操作,但是C的指針操作也給它帶來了很多不安全的因素。C++在這方面做了很好的改進,在保留了指針操作的同時又增強了安全性。Java取消了指針操作,提高了安全性,適合初學者使用。
[編輯本段]
C源程序的結構特點
  1.一個C語言源程序可以由一個或多個源文件組成。
  2.每個源文件可由一個或多個函數組成。
  3.一個源程序不論由多少個文件組成,都有一個且只能有一個main函數,即主函數。
  4.源程序中可以有預處理命令(include 命令僅為其中的一種),預處理命令通常應放在源文件或源程序的最前面。
  5.每一個說明,每一個語句都必須以分號結尾。但預處理命令,函數頭和花括號“}”之后不能加分號。
  6.標識符,關鍵字之間必須至少加一個空格以示間隔。若已有明顯的間隔符,也可不再加空格來間隔。
[編輯本段]
學習C語言
  在初學C語言時,可能會遇到有些問題理解不透,或者表達方式與以往數學學習中不同(如運算符等),這就要求不氣餒,不明白的地方多問多想,鼓足勇氣進行學習,待學完后面的章節知識,前面的問題也就迎刃而解了,這一方面我感覺是我們同學最欠缺,大多學不好的就是因為一開始遇到困難就放棄,曾經和好多同學談他的問題,回答是聽不懂、不想聽、放棄這樣三個過程,我反問,這節課你聽過課嗎?回答又是沒有,根本就沒聽過課,怎么說自己聽不懂呢?相應的根本就沒學習,又談何學的好?
  學習C語言始終要記住“曙光在前頭”和“千金難買回頭看”,“千金難買回頭看”是學習知識的重要方法,就是說,學習后面的知識,不要忘了回頭弄清遺留下的問題和加深理解前面的知識,這是我們學生最不易做到的,然而卻又是最重要的。學習C語言就是要經過幾個反復,才能前后貫穿,積累應該掌握的C知識。
  那么,我們如何學好《C程序設計》呢?
  一.學好C語言的運算符和運算順序
  這是學好《C程序設計》的基礎,C語言的運算非常靈活,功能十分豐富,運算種類遠多于其它程序設計語言。在表達式方面較其它程序語言更為簡潔,如自加、自減、逗號運算和三目運算使表達式更為簡單,但初學者往往會覺的這種表達式難讀,關鍵原因就是對運算符和運算順序理解不透不全。當多種不同運算組成一個運算表達式,即一個運算式中出現多種運算符時,運算的優先順序和結合規則顯得十分重要。在學習中,只要我們對此合理進行分類,找出它們與我們在數學中所學到運算之間的不同點之后,記住這些運算也就不困難了,有些運算符在理解后更會牢記心中,將來用起來得心應手,而有些可暫時放棄不記,等用到時再記不遲。
  先要明確運算符按優先級不同分類,《C程序設計》運算符可分為15種優先級,從高到低,優先級為1 ~ 15,除第2、13級和第14級為從右至左結合外,其它都是從左至右結合,它決定同級運算符的運算順序.
  二.學好C語言的四種程序結構
  (1)順序結構
  順序結構的程序設計是最簡單的,只要按照解決問題的順序寫出相應的語句就行,它的執行順序是自上而下,依次執行。
  例如;a = 3,b = 5,現交換a,b的值,這個問題就好像交換兩個杯子水,這當然要用到第三個杯子,假如第三個杯子是c,那么正確的程序為: c = a; a = b; b = c; 執行結果是a = 5,b = c = 3如果改變其順序,寫成:a = b; c = a; b = c; 則執行結果就變成a = b = c = 5,不能達到預期的目的,初學者最容易犯這種錯誤。順序結構可以獨立使用構成一個簡單的完整程序,常見的輸入、計算,輸出三步曲的程序就是順序結構,例如計算圓的面積,其程序的語句順序就是輸入圓的半徑 r,計算s = 3.14159*r*r,輸出圓的面積s。不過大多數情況下順序結構都是作為程序的一部分,與其它結構一起構成一個復雜的程序,例如分支結構中的復合語句、循環結構中的循環體等。
  (2) 分支結構
  順序結構的程序雖然能解決計算、輸出等問題,但不能做判斷再選擇。對于要先做判斷再選擇的問題就要使用分支結構。分支結構的執行是依據一定的條件選擇執行路徑,而不是嚴格按照語句出現的物理順序。分支結構的程序設計方法的關鍵在于構造合適的分支條件和分析程序流程,根據不同的程序流程選擇適當的分支語句。分支結構適合于帶有邏輯或關系比較等條件判斷的計算,設計這類程序時往往都要先繪制其程序流程圖,然后根據程序流程寫出源程序,這樣做把程序設計分析與語言分開,使得問題簡單化,易于理解。程序流程圖是根據解題分析所繪制的程序執行流程圖。
  學習分支結構不要被分支嵌套所迷惑,只要正確繪制出流程圖,弄清各分支所要執行的功能,嵌套結構也就不難了。嵌套只不過是分支中又包括分支語句而已,不是新知識,只要對雙分支的理解清楚,分支嵌套是不難的。下面我介紹幾種基本的分支結構。
  ①if(條件)
  {分支體}
  這種分支結構中的分支體可以是一條語句,此時“{ }”可以省略,也可以是多條語句即復合語句。它有兩條分支路徑可選,一是當條件為真,執行分支體,否則跳過分支體,這時分支體就不會執行。如:要計算x的絕對值,根據絕對值定義,我們知道,當x>=0時,其絕對值不變,而x<0時其絕對值是為x的反號,因此程序段為:if(x<0) x=-x;
  ②if(條件)
  {分支1}
  else
  {分支2}
  這是典型的分支結構,如果條件成立,執行分支1,否則執行分支2,分支1和分支2都可以是1條或若干條語句構成。如:求ax^2+bx+c=0的根
  分析:因為當b^2-4ac>=0時,方程有兩個實根,否則(b^2-4ac<0)有兩個共軛復根。其程序段如下:
  d=b*b-4*a*c;
  if(d>=0)
  {x1=(-b+sqrt(d))/2a;
  x2=(-b-sqrt(d))/2a;
  printf(“x1=%8.4f,x2=%8.4f\n”,x1,x2);
  }
  else
  {r=-b/(2*a);
  i =sqrt(-d)/(2*a);
  printf(“x1=%8.4f+%8.4fi\n”r, i);
  printf(“x2=%8.4f-%8.4fi\n”r,i)
  }
  ③嵌套分支語句:其語句格式為:
  if(條件1) {分支1};
  else if(條件2) {分支2}
  else if(條件3) {分支3}
  ……
  else if(條件n) {分支n}
  else {分支n+1}
  嵌套分支語句雖可解決多個入口和出口的問題,但超過3重嵌套后,語句結構變得非常復雜,對于程序的閱讀和理解都極為不便,建議嵌套在3重以內,超過3重可以用下面的語句。
  ④switch開關語句:該語句也是多分支選擇語句,到底執行哪一塊,取決于開關設置,也就是表達式的值與常量表達式相匹配的那一路,它不同if…else 語句,它的所有分支都是并列的,程序執行時,由第一分支開始查找,如果相匹配,執行其后的塊,接著執行第2分支,第3分支……的塊,直到遇到break語句;如果不匹配,查找下一個分支是否匹配。這個語句在應用時要特別注意開關條件的合理設置以及break語句的合理應用。
  (3)循環結構:
  循環結構可以減少源程序重復書寫的工作量,用來描述重復執行某段算法的問題,這是程序設計中最能發揮計算機特長的程序結構,C語言中提供四種循環,即goto循環、while循環、do ?Cwhile循環和for循環。四種循環可以用來處理同一問題,一般情況下它們可以互相代替換,但一般不提倡用goto循環,因為強制改變程序的順序經常會給程序的運行帶來不可預料的錯誤,在學習中我們主要學習while、do…while、for三種循環。常用的三種循環結構學習的重點在于弄清它們相同與不同之處,以便在不同場合下使用,這就要清楚三種循環的格式和執行順序,將每種循環的流程圖理解透徹后就會明白如何替換使用,如把while循環的例題,用for語句重新編寫一個程序,這樣能更好地理解它們的作用。特別要注意在循環體內應包含趨于結束的語句(即循環變量值的改變),否則就可能成了一個死循環,這是初學者的一個常見錯誤。
  在學完這三個循環后,應明確它們的異同點:用while和do…while循環時,循環變量的初始化的操作應在循環體之前,而for循環一般在語句1中進行的;while 循環和for循環都是先判斷表達式,后執行循環體,而do…while循環是先執行循環體后判斷表達式,也就是說do…while的循環體最少被執行一次,而while 循環和for就可能一次都不執行。另外還要注意的是這三種循環都可以用break語句跳出循環,用continue語句結束本次循環,而goto語句與 if構成的循環,是不能用break和 continue語句進行控制的。
  順序結構、分支結構和循環結構并不彼此孤立的,在循環中可以有分支、順序結構,分支中也可以有循環、順序結構,其實不管哪種結構,我們均可廣義的把它們看成一個語句。在實際編程過程中常將這三種結構相互結合以實現各種算法,設計出相應程序,但是要編程的問題較大,編寫出的程序就往往很長、結構重復多,造成可讀性差,難以理解,解決這個問題的方法是將C程序設計成模塊化結構。
  (4)模塊化程序結構
  C語言的模塊化程序結構用函數來實現,即將復雜的C程序分為若干模塊,每個模塊都編寫成一個C 函數,然后通過主函數調用函數及函數調用函數來實現一大型問題的C程序編寫,因此常說:C程序=主函數+子函數。因此,對函數的定義、調用、值的返回等中要尤其注重理解和應用,并通過上機調試加以鞏固。
  三.掌握一些簡單的算法
  編程其實一大部分工作就是分析問題,找到解決問題的方法,再以相應的編程語言寫出代碼。這就要求掌握算法,根據我們的《C程序設計》教學大綱中,只要求我們掌握一些簡單的算法,在掌握這些基本算法后,要完成對問題的分析就容易了。如兩個數的交換、三個數的比較、選擇法排序和冒泡法排序,這就要求我們要清楚這些算法的內在含義
  結語:當我們把握好上述幾方面后,只要同學們能克服畏難、厭學、上課能專心聽講,做好練習與上機調試,其實C語言并不難學
  C源程序的關鍵字---------------------------------------------------------------------------------------
  所謂關鍵字就是已被C語言本身使用, 不能作其它用途使用的字。例如關鍵字不能用作變量名、函數名等
  由ANSI標準定義的C語言關鍵字共32個 :
  auto double int struct break else long switch
  case enum register typedef char extern return union
  const float short unsigned continue for signed void
  default goto sizeof volatile do if while static
  根據關鍵字的作用,可以將關鍵字分為數據類型關鍵字和流程控制關鍵字兩大類。
  1 數據類型關鍵字
  A基本數據類型(5個)
  void :聲明函數無返回值或無參數,聲明無類型指針,顯式丟棄運算結果
  char :字符型類型數據,屬于整型數據的一種
  int :整型數據,通常為編譯器指定的機器字長
  float :單精度浮點型數據,屬于浮點數據的一種
  double :雙精度浮點型數據,屬于浮點數據的一種
  B 類型修飾關鍵字(4個)
  short :修飾int,短整型數據,可省略被修飾的int。
  long :修飾int,長整形數據,可省略被修飾的int。
  signed :修飾整型數據,有符號數據類型
  unsigned :修飾整型數據,無符號數據類型
  C 復雜類型關鍵字(5個)
  struct :結構體聲明
  union :共用體聲明
  enum :枚舉聲明
  typedef :聲明類型別名
  sizeof :得到特定類型或特定類型變量的大小
  D 存儲級別關鍵字(6個)
  auto :指定為自動變量,由編譯器自動分配及釋放。通常在棧上分配
  static :指定為靜態變量,分配在靜態變量區,修飾函數時,指定函數作用域為文件內部
  register :指定為寄存器變量,建議編譯器將變量存儲到寄存器中使用,也可以修飾函數形參,建議編譯器通過寄存器而不是堆棧傳遞參數
  extern :指定對應變量為外部變量,即標示變量或者函數的定義在別的文件中,提示編譯器遇到此變量和函數時在其他模塊中尋找其定義。
  const :與volatile合稱“cv特性”,指定變量不可被當前線程/進程改變(但有可能被系統或其他線程/進程改變)
  volatile :與const合稱“cv特性”,指定變量的值有可能會被系統或其他進程/線程改變,強制編譯器每次從內存中取得該變量的值
  2 流程控制關鍵字
  A 跳轉結構(4個)
  return :用在函數體中,返回特定值(或者是void值,即不返回值)
  continue :結束當前循環,開始下一輪循環
  break :跳出當前循環或switch結構
  goto :無條件跳轉語句
  B 分支結構(5個)
  if :條件語句
  else :條件語句否定分支(與if連用)
  switch :開關語句(多重分支語句)
  case :開關語句中的分支標記
  default :開關語句中的“其他”分治,可選。
  C 循環結構(3個)
  for :for循環結構,for(1;2;3)4;的執行順序為1->2->4->3->2...循環,其中2為循環條件。在整個 for循環過程中,表達式1只計算一次,表達式2和表達式3則可能計算多次,也可能一次也不計算。循環體可能多次執行,也可能一次都不執行。
  do :do循環結構,do 1 while(2); 的執行順序是 1->2->1...循環,2為循環條件
  while :while循環結構,while(1) 2; 的執行順序是1->2->1...循環,1為循環條件
  [4]以上循環語句,當循環條件表達式為真則繼續循環,為假則跳出循環。
[編輯本段]
新標準
  在ANSI標準化后,C語言的標準在一段相當的時間內都保持不變,盡管C++繼續在改進。(實際上,Normative Amendment1在1995年已經開發了一個新的C語言版本。但是這個版本很少為人所知。)標準在90年代才經歷了改進,這就是 ISO9899:1999(1999年出版)。這個版本就是通常提及的C99。它被ANSI于2000年三月采用。
  在C99中包括的特性有:
  對編譯器限制增加了,比如源程序每行要求至少支持到 4095 字節,變量名函數名的要求支持到 63 字節 (extern 要求支持到 31)
  預處理增強了。例如:
  宏支持取參數 #define Macro(...) __VA_ARGS__
  使用宏的時候,參數如果不寫,宏里用 #,## 這樣的東西會擴展成空串。(以前會出錯的)
  支持 // 行注釋(這個特性實際上在C89的很多編譯器上已經被支持了)
  增加了新關鍵字 restrict, inline, _Complex, _Imaginary, _Bool
  支持 long long, long double _Complex, float _Complex 這樣的類型
  支持 <: :> <% %> %: %:%: ,等等奇怪的符號替代
  支持了不定長的數組。數組的長度就可以用變量了。聲明類型的時候呢,就用 int a 這樣的寫法。不過考慮到效率和實現,這玩意并不是一個新類型。所以就不能用在全局里,或者 struct union 里面,如果你用了這樣的東西,goto 語句就受限制了。
  變量聲明不必放在語句塊的開頭,for 語句提倡這么寫 for(int i=0;i<100;++i) 就是說,int i 的聲明放在里面,i 只在 for 里面有效。(VC沒有遵守這條標準,i 在 for 外也有效)
  當一個類似結構的東西需要臨時構造的時候,可以用 (type_name){xx,xx,xx} 這有點像 C++ 的構造函數
  初始化結構的時候現在可以這樣寫:
  struct {int a[3], b;} hehe[] = { [0].a = , [1].a = 2 };
  struct {int a, b, c, d;} hehe = { .a = 1, .c = 3, 4, .b = 5} // 3,4 是對 .c,.d 賦值的
  字符串里面,\u 支持 unicode 的字符
  支持 16 進制的浮點數的描述
  所以 printf scanf 的格式化串多支持了 ll / LL (VC6 里用的 I64) 對應新的 long long 類型。
  浮點數的內部數據描述支持了新標準,這個可以用 #pragma 編譯器指定
  除了已經有的 __line__ __file__ 以外,又支持了一個 __func__ 可以得到當前的函數名
  對于非常數的表達式,也允許編譯器做化簡
  修改了對于 / % 處理負數上的定義,比如老的標準里 -22 / 7 = -3, -22 % 7 = -1 而現在 -22 / 7 = -4, -22 % 7 = 6
  取消了不寫函數返回類型默認就是 int 的規定
  允許 struct 定義的最后一個數組寫做 [] 不指定其長度描述
  const const int i; 將被當作 const int i; 處理
  增加和修改了一些標準頭文件, 比如定義 bool 的 <stdbool.h> 定義一些標準長度的 int 的 <inttypes.h> 定義復數的 <complex.h> 定義寬字符的 <wctype.h> 有點泛型味道的數學函數 <tgmath.h> 跟浮點數有關的 <fenv.h>。<stdarg.h> 里多了一個 va_copy 可以復制 ... 的參數。<time.h> 里多了個 struct tmx 對 struct tm 做了擴展
  輸入輸出對寬字符還有長整數等做了相應的支持
  相對于c89的變化還有
  1、增加restrict指針
  C99中增加了公適用于指針的restrict類型修飾符,它是初始訪問指針所指對象的惟一途徑,因此只有借助restrict指針表達式才能訪問對象。restrict指針指針主要用做函數變元,或者指向由malloc()函數所分配的內存變量。restrict數據類型不改變程序的語義。
  如果某個函數定義了兩個restrict指針變元,編譯程序就假定它們指向兩個不同的對象,memcpy()函數就是restrict指針的一個典型應用示例。C89中memcpy()函數原型如下:
  代碼: void *memcpy (void *s1, const void *s2, size_t size);
  如果s1和s2所指向的對象重疊,其操作就是未定義的。memcpy()函數只能用于不重疊的對象。C99中memcpy()函數原型如下:代碼: void *memcpy(void *restrict s1, const void *restrict s2,size_t size);
  通過使用restrict修飾s1和s2 變元,可確保它們在該原型中指向不同的對象。
  2、inline(內聯)關鍵字
  內聯函數除了保持結構化和函數式的定義方式外,還能使程序員寫出高效率的代碼.函數的每次調用與返回都會消耗相當大的系統資源,尤其是當函數調用發生在重復次數很多的循環語句中時.一般情況下,當發生一次函數調用時,變元需要進棧,各種寄存器內存需要保存.當函數返回時,寄存器的內容需要恢復。如果該函數在代碼內進行聯機擴展,當代碼執行時,這些保存和恢復操作旅游活動會再發生,而且函數調用的執行速度也會大大加快。函數的聯機擴展會產生較長的代碼,所以只應該內聯對應用程序性能有顯著影響的函數以及長度較短的函數
  3、新增數據類型
  _Bool
  值是0或1。C99中增加了用來定義bool、true以及false宏的頭文件夾<stdbool.h>,以便程序員能夠編寫同時兼容于C與C++的應用程序。在編寫新的應用程序時,應該使用
  <stdbool.h>頭文件中的bool宏。
  _Complex and _Imaginary
  C99標準中定義的復數類型如下:float_Complex; float_Imaginary; double_Complex; double_Imaginary; long double_Complex; long double_Imaginary.
  <complex.h>頭文件中定義了complex和imaginary宏,并將它們擴展為_Complex和_Imaginary,因此在編寫新的應用程序時,應該使用<stdbool.h>頭文件中的complex 和imaginary宏。
  long long int
  C99標準中引進了long long int(-(2e63 - 1)至2e63 - 1)和unsigned long long int(0 - 2e64 - 1)。long long int能夠支持的整數長度為64位。
  4、對數組的增強
  可變長數組
  C99中,程序員聲明數組時,數組的維數可以由任一有效的整型表達式確定,包括只在運行時才能確定其值的表達式,這類數組就叫做可變長數組,但是只有局部數組才可以是變長的.
  可變長數組的維數在數組生存期內是不變的,也就是說,可變長數組不是動態的.可以變化的只是數組的大小.可以使用*來定義不確定長的可變長數組。
  數組聲明中的類型修飾符
  在C99中,如果需要使用數組作為函數變元,可以在數組聲明的方括號內使用static關鍵字,這相當于告訴編譯程序,變元所指向的數組將至少包含指定的元素個數。也可以在數組聲明的方括號內使用restrict,volatile,const 關鍵字,但只用于函數變元。如果使用restrict,指針是初始訪問該對象的惟一途徑。如果使用const,指針始終指向同一個數組。使用 volatile沒有任何意義。
  5、單行注釋
  引入了單行注釋標記 "//" , 可以象C++一樣使用這種注釋了。
  6、分散代碼與聲明
  7、預處理程序的修改
  a、變元列表
  宏可以帶變元,在宏定義中用省略號(...)表示。內部預處理標識符__VA_ARGS__決定變元將在何處得到替換。例:#define MySum(...) sum(__VA_ARGS__) 語句MySum(k,m,n);
  將被轉換成:sum(k, m, n); 變元還可以包含變元。例: #define compare(compf, ...) compf(__VA_ARGS__) 其中的compare(strcmp,"small", "large"); 將替換成:strcmp("small","large");
  b、_Pragma運算符
  C99引入了在程序中定義編譯指令的另外一種方法:_Pragma運算符。格式如下:
  _Pragma("directive")
  其中directive是要滿打滿算的編譯指令。_Pragma運算符允許編譯指令參與宏替換。
  c、內部編譯指令
  STDCFP_CONTRACT ON/OFF/DEFAULT 若為ON,浮點表達式被當做基于硬件方式處理的獨立單元。默認值是定義的工具。
  STDCFEVN_ACCESS ON/OFF/DEFAULT 告訴編譯程序可以訪問浮點環境。默認值是定義的工具。
  STDC CX_LIMITED_RANGE ON/OFF/DEFAULT 若值為ON,相當于告訴編譯程序某程序某些含有復數的公式是可靠的。默認是OFF。
  d、新增的內部宏
  __STDC_HOSTED__ 若操作系統存在,則為1
  __STDC_VERSION__ 199991L或更高。代表C的版本
  __STDC_IEC_599__ 若支持IEC 60559浮點運算,則為1
  __STDC_IEC_599_COMPLEX__ 若支持IEC 60599復數運算,則為1
  __STDC_ISO_10646__ 由編譯程序支持,用于說明ISO/IEC 10646標準的年和月格式:yyymmmL
  9、復合賦值
  C99中,復合賦值中,可以指定對象類型的數組、結構或聯合表達式。當使用復合賦值時,應在括弧內指定類型,后跟由花括號圍起來的初始化列表;若類型為數組,則不能指定數組的大小。建成的對象是未命名的。
  例: double *fp = (double[]) {1.1, 2.2, 3.3};
  該語句用于建立一個指向double的指針fp,且該指針指向這個3元素數組的第一個元素。 在文件域內建立的復合賦值只在程序的整個生存期內有效。在模塊內建立的復合賦值是局部對象,在退出模塊后不再存在。
  10、柔性數組結構成員
  C99中,結構中的最后一個元素允許是未知大小的數組,這就叫做柔性數組成員,但結構中的柔性數組成員前面必須至少一個其他成員。柔性數組成員允許結構中包含一個大小可變的數組。sizeof返回的這種結構大小不包括柔性數組的內存。包含柔性數組成員的結構用malloc()函數進行內存的動態分配,并且分配的內存應該大于結構的大小,以適應柔性數組的預期大小。
  11、指定的初始化符
  C99中,該特性對經常使用稀疏數組的程序員十分有用。指定的初始化符通常有兩種用法:用于數組,以及用于結構和聯合。用于數組的格式:[index] = vol; 其中,index表示數組的下標,vol表示本數組元素的初始化值。
  例如: int x[10] = {[0] = 10, [5] = 30}; 其中只有x[0]和x[5]得到了初始化.用于結構或聯合的格式如下:
  member-name(成員名稱)
  對結構進行指定的初始化時,允許采用簡單的方法對結構中的指定成員進行初始化。
  例如: struct example{ int k, m, n; } object = {m = 10,n = 200};
  其中,沒有初始化k。對結構成員進行初始化的順序沒有限制。
  12、printf()和scanf()函數系列的增強
  C99中printf()和scanf()函數系列引進了處理long long int和unsigned long long int數據類型的特性。long long int 類型的格式修飾符是ll。在printf()和scanf()函數中,ll適用于d, i, o, u 和x格式說明符。另外,C99還引進了hh修飾符。當使用d, i, o, u和x格式說明符時,hh用于指定char型變元。ll和hh修飾符均可以用于n說明符。
  格式修飾符a和A用在printf()函數中時,結果將會輸出十六進制的浮點數。格式如下: [-]0xh, hhhhp + d 使用A格式修飾符時,x和p必須是大寫。A和a格式修飾符也可以用在scanf()函數中,用于讀取浮點數。調用printf()函數時,允許在%f說明符前加上l修飾符,即%lf,但不起作用。
  13、C99新增的庫
  C89中標準的頭文件
  <assert.h> 定義宏assert()
  <ctype.h> 字符處理
  <errno.h> 錯誤報告
  <float.h> 定義與實現相關的浮點值勤
  <limits.h> 定義與實現相關的各種極限值
  <locale.h> 支持函數setlocale()
  <math.h> 數學函數庫使用的各種定義
  <setjmp.h> 支持非局部跳轉
  <signal.h> 定義信號值
  <stdarg.h> 支持可變長度的變元列表
  <stddef.h> 定義常用常數
  <stdio.h> 支持文件輸入和輸出
  <stdlib.h> 其他各種聲明
  <string.h> 支持串函數
  <time.h> 支持系統時間函數
  C99新增的頭文件和庫
  <complex.h> 支持復數算法
  <fenv.h> 給出對浮點狀態標記和浮點環境的其他方面的訪問
  <inttypes.h> 定義標準的、可移植的整型類型集合。也支持處理最大寬度整數的函數
  <iso646.h> 首先在此1995年第一次修訂時引進,用于定義對應各種運算符的宏
  <stdbool.h> 支持布爾數據類型類型。定義宏bool,以便兼容于C++
  <stdint.h> 定義標準的、可移植的整型類型集合。該文件包含在<inttypes.h>中
  <tgmath.h> 定義一般類型的浮點宏
  <wchar.h> 首先在1995年第一次修訂時引進,用于支持多字節和寬字節函數
  <wctype.h> 首先在1995年第一次修訂時引進,用于支持多字節和寬字節分類函數
  14、__func__預定義標識符
  用于指出__func__所存放的函數名,類似于字符串賦值。
  15、其它特性的改動
  放寬的轉換限制
  限制 C89標準 C99標準
  數據塊的嵌套層數 15 127
  條件語句的嵌套層數 8 63
  內部標識符中的有效字符個數 31 63
  外部標識符中的有效字符個數 6 31
  結構或聯合中的成員個數 127 1023
  函數調用中的參數個數 31 127
  不再支持隱含式的int規則
  刪除了隱含式函數聲明
  對返回值的約束
  C99中,非空類型函數必須使用帶返回值的return語句.
  擴展的整數類型
  擴展類型 含義
  int16_t 整數長度為精確16位
  int_least16_t 整數長度為至少16位
  int_fast32_t 最穩固的整數類型,其長度為至少32位
  intmax_t 最大整數類型
  uintmax_t 最大無符號整數類型
  對整數類型提升規則的改進
  C89中,表達式中類型為char,short int或int的值可以提升為int或unsigned int類型.
  C99中,每種整數類型都有一個級別.例如:long long int 的級別高于int, int的級別高于char等.在表達式中,其級別低于int或unsigned int的任何整數類型均可被替換成int或unsigned int類型.
  有必要說明的是,c99的main()函數要求必須返回一個int值給程序的激活者(通常是操作系統)0表示正常推出,非0表示異常。
  但是各個公司對C99的支持所表現出來的興趣不同。當GCC和其它一些商業編譯器支持C99的大部分特性的時候,微軟和Borland卻似乎對此不感興趣。
  
C語言圖形編程

   Turbo C 提供了非常豐富的圖形函數,所有圖形函數的原型均在graphics. h 中,本節主要介紹圖形模式的初始化、獨立圖形程序的建立、基本圖形功能、圖形窗口以及圖形模式下的文本輸出等函數。另外,使用圖形函數時要確保有顯示器圖形驅動程序*BGI,同時將集成開發環境Options/Linker中的Graphics lib選為on,只有這樣才能保證正確使用圖形函數。圖形模式的初始化不同的顯示器適配器有不同的圖形分辨率。即是同一顯示器適配器,在不同模式下也有不同分辨率。因此,在屏幕作圖之前,必須根據顯示器適配器種類將顯示器設置成為某種圖形模式,在未設置圖形模式之前,微機系統默認屏幕為文本模式(80 列,25行字符模式),此時所有圖形函數均不能工作。設置屏幕為圖形模式,可用下列圖形初始化函數:
  void far initgraph(int far *gdriver, int far *gmode,char *path);
  其中gdriver和gmode分別表示圖形驅動器和模式,path是指圖形驅動程序所在的目錄路徑。有關圖形驅動器、圖形模式的符號常數及對應的分辨率見下表。
  圖形驅動程序由Turbo C出版商提供,文件擴展名為.BGI。 根據不同的圖形適配器有不同的圖形驅動程序。例如對于EGA、 VGA 圖形適配器就調用驅動程序EGAVGA.BGI。
  圖形驅動器、模式的符號常數及數值
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  圖形驅動器(gdriver) 圖形模式(gmode)
  ───────────────────── 色調 分辨率
  符號常數 數值 符號常數 數值
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  CGA 1 CGAC0 0 C0 320*200
  CGAC1 1 C1 320*200
  CGAC2 2 C2 320*200
  CGAC3 3 C3 320*200
  CGAHI 4 2色 640*200
  ──────────────────────────────
  MCGA 2 MCGAC0 0 C0 320*200
  MCGAC1 1 C1 320*200
  MCGAC2 2 C2 320*200
  MCGAC3 3 C3 320*200
  MCGAMED 4 2色 640*200
  MCGAHI 5 2色 640*480
  ──────────────────────────────
  EGA 3 EGALO 0 16色 640*200
  EGAHI 1 16色 640*350
  ──────────────────────────────
  EGA64 4 EGA64LO 0 16色 640*200
  EGA64HI 1 4色 640*350
  ──────────────────────────────
  EGAMON 5 EGAMONHI 0 2色 640*350
  ──────────────────────────────
  IBM8514 6 IBM8514LO 0 256色 640*480
  IBM8514HI 1 256色 1024*768
  ──────────────────────────────
  HERC 7 HERCMONOHI 0 2色 720*348
  ──────────────────────────────
  ATT400 8 ATT400C0 0 C0 320*200
  ATT400C1 1 C1 320*200
  ATT400C2 2 C2 320*200
  ATT400C3 3 C3 320*200
  ATT400MED 4 2色 320*200
  ATT400HI 5 2色 320*200
  ──────────────────────────────
  VGA 9 VGALO 0 16色 640*200
  VGAMED 1 16色 640*350
  VGAHI 2 16色 640*480
  ──────────────────────────────
  PC3270 10 PC3270HI 0 2色 720*350
  ──────────────────────────────
  DETECT 0 用于硬件測試
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  使用圖形初始化函數設置VGA高分辨率圖形模式#include
  int main()
  {
  int gdriver, gmode;
  gdriver=VGA;
  gmode=VGAHI;
  initgraph(&gdriver, &gmode, "c:\\caic\\bgi");
  bar3d(100, 100, 300, 250, 50, 1); /*畫一長方體*/
  getch();
  closegraph();
  return 0;
  }
  有時編程者并不知道所用的圖形顯示器適配器種類,或者需要將編寫的程序用于不同圖形驅動器,Turbo C 提供了一個自動檢測顯示器硬件的函數,其調用格式為: void far detectgraph(int *gdriver, *gmode); 其中gdriver和gmode的意義與上面相同。 自動進行硬件測試后進行圖形初始化#include
  int main()
  {
  int gdriver, gmode;
  detectgraph(&gdriver, &gmode); /*自動測試硬件*/
  printf("the graphics driver is %d, mode is %d\n",
  gdriver,gmode); /*輸出測試結果*/
  getch();
  initgraph(&gdriver, &gmode, "c:\\caic\\bgi");
  /* 根據測試結果初始化圖形*/
  bar3d(10, 10, 130, 250, 20, 1);
  getch();
  closegraph();
  return 0;
  }
  上例程序中先對圖形顯示器自動檢測,然后再用圖形初始化函數進行初始化設置,但Turbo C提供了一種更簡單的方法, 即用driver=DETECT 語句后再跟initgraph()函數就行了。采用這種方法后,上例可改為:
  #include
  int main()
  {
  int gdriver=DETECT, gmode;
  initgraph(&gdriver, &gmode, "c:\\caic\\bgi");
  bar3d(50, 50, 150, 30, 50, 1);
  getch();
  closegraph();
  return 0;
  }
  另外,Turbo C 提供了退出圖形狀態的函數closegraph(),其調用格式為: void far closegraph(void); 調用該函數后可退出圖形狀態而進入文本方式( Turbo C 默認方式),并釋放用于保存圖形驅動程序和字體的系統內存。
  
[編輯本段]
C程序實例
  1.功能:求三個整數的平均值。程序如下:
  #include <stdio.h> /*載入頭文件stdio.h*/
  int main() /*主函數main*/
  {
  int a,b,c,d; /*定義a,b,c,d為整型變量*/
  a=105;
  b=75;
  c=85;
  d=(a+b+c)/3;
  printf("d=%d\n",d); /*顯示"d=某數"并換行,某數是d的值*/
  getchar(); /*等待用戶,按任意鍵退出*/
  return 0;
  }
  2.功能:由鍵盤輸入多邊形的邊數,求其內角和。程序如下:
  #include <stdio.h>
  int main()
  {
  /*辨別多邊形是否成立,不成立重新執行do-while語句間的命令*/
  do
  {
  int x;
  printf("n=");
  scanf("%d",&x); /*由鍵盤輸入x的值*/
  printf("%d\n",(x-2)*180); /*顯示內角和,公式為(x-2)*180*/
  /*辨別多邊形是否成立,不成立顯示“Error”,成立顯示“Right”*/
  if (x<=2)
  printf("Error\n");
  else
  printf("Right\n");
  }
  while (x<=2); /*do-while語句*/
  getchar();
  return 0;
  }
  3.功能:由鍵盤輸入兩個數,顯示器上顯示較大數。程序如下:
  #include <stdio.h>
  int big(int,int); /*創建整型變量函數big*/
  int main()
  {
  int x,y;
  scanf("%d,%d",&x,&y);
  printf("big is %d\n",big(x,y));
  /*輸出big函數的值,因為main函數與用戶自定義函數big無關系,所以printf后的輸出項表是big(x,y),而不是big(n1,n2)*/
  getchar();
  return 0;
  }
  int big(int n1,int n2) /*用戶自定義函數big*/
  {
  if (n1>n2)
  return n1; /*返回n1值*/
  else
  return n2; /*返回n2值*/
  }
  4.功能:由鍵盤輸入一個等腰三角形的層數,畫一個這樣的三角形。程序如下:
  #include <stdio.h>
  int main()
  {
  int i,j,n;
  printf("n:");
  scanf("%d",&n);
  for (i=1;i<=n;i++) /*循環n次,每次輸出一行*/
  {
  for (j=1;j<=n-i;j++) /*輸出該行前面的空格*/
  printf(" ");
  for (j=1;j<=2*i-1;j++) /*輸出該行中的星號*/
  printf("*");
  printf("\n");
  }
  getchar();
  return 0;
  }
  注釋:不能輸入太多的行數,如10000。
  5.功能:由鍵盤輸入一個最大值,求2到這個最大值中的所有質數(素數)。程序如下:
  #include <stdio.h>
  #include <math.h> /*數學文件*/
  int main()
  {
  int n,m,flag,i,j,num=1;
  printf("n:");
  scanf("%d",&n);
  printf("2~%d:\n",n);
  for (i=2;i<=n;i++) /*循環查找質數*/
  {
  flag=1;
  m=(int)sqrt(i);
  for (j=2;j<=m;j++)
  if (i%j==0) /*條件為真時表示不是質數,退出for循環*/
  {
  flag=0;
  break;
  }
  if (flag==1) /*條件為真時表示i是質數*/
  {
  printf("%4d",i);
  if (num++%10==0) /*每行最多輸出10個數*/
  printf("\n");
  }
  }
  printf("\n");
  getchar();
  return 0;
  }
  6.功能:顯示保護屏幕。程序如下:
  #include <stdlib.h> /*綜合庫*/
  #include <graphics.h> /*繪圖庫*/
  int main()
  {
  int gdriver=DETECT; /*定義圖象驅動器為DETECT*/
  int gmode=DETECT; /*定義圖象模式為DETECT*/
  long n; /*定義長型變量n*/
  initgraph(&gdriver,&gmode,"E:\TC\bgi");
  /*進入圖象狀態(警告:""之間的是圖象驅動器的路徑,建議網友們設置為空,即只有"",或設為編程系統的路徑,例路徑是C:\TC,那么就是輸入C:\TC\bgi)*/
  sleep(1); /*暫停一秒,以保證無誤差進入圖象狀態*/
  for (n=1;n<=40000000;n++) /*畫40000000個圓*/
  {
  setcolor(rand()); /*作圖顏色隨機*/
  circle(random(639),random(639),25); /*畫圓,位置隨機,半徑為25*/
  }
  getchar();
  return 0;
  }
[編輯本段]
經典教材:
  
The C Programming Language

   本書是由C語言的設計者Brian W. Kernighan和Dennis M. Ritchie編寫的一部介紹標準C語言及其程序設計方法的權威性經典著作。全面、系統地講述了C語言的各個特性及程序設計的基本方法,包括基本概念、類型和表達式、控制流、函數與程序結構、指針與數組、結構、輸入與輸出、UNIX系統接口、標準庫等內容。
  本書的講述深入淺出,配合典型例證,通俗易懂,實用性強,適合作為大專院校計算機專業或非計算機專業的C語言教材,也可以作為從事計算機相關軟硬件開發的技術人員的參考書。 在計算機發展的歷史上,沒有哪一種程序設計語言像C語言這樣應用如此廣泛。
  本書原著 即為C語言的設計者之一Dennis M.Ritchie和著名的計算機科學家Brian W.Kernighan合著的一本介紹C語言的權威經典著作。我們現在見到的大量論述C語言程序設計的教材和專著均以此書為藍本。原著第1版中介紹的C語言成為后來廣泛使用的C語言版本—— 標準C的基礎。人們熟知的“hell, World”程序就是由本書首次引入的,現在,這一程序已經成為所有程序設 計語言入門的第一課。原著第2版根據1987年制定的ANSIC標準做了適當的修訂.引入了最新的語言形式,并增加了新的示例,通過簡潔的描述、典型的示例,作者全面、系統、準確地講述了C語言的各 個特性以及程序設計的基本方法。對于計算機從業人員來說,本書是一本必讀的程序設計語 言方面的參考書。 
  
Expert C Programming

  
  《C專家編程》展示了最優秀的C程序員所使用的編碼技巧,并專門開辟了一章對C++的基礎知識進行了介紹。
  書中C的歷史、語言特性、聲明、數組、指針、鏈接、運行時、內存以及如何進一步學習C++等問題進行了細致的講解和深入的分析。全書擷取幾十幾個實例進行講解,對C程序員具有非常高的實用價值。
  本書可以幫助有一定經驗的C程序員成為C編程方面的專家,對于具備相當的C語言基礎的程序員,本書可以幫助他們站在C的高度了解和學習C++。
  
CTraps and Pitfalls

   作者以自己1985年在Bell實驗室時發表的一篇論文為基礎,結合自己的工作經驗擴展成為這本對C程序員具有珍貴價值的經典著作。寫作本書的出發點不是要批判C語言,而是要幫助C程序員繞過編程過程中的陷阱和障礙。
  全書分為 8章,分別從詞法分析、語法語義、連接、庫函數、預處理器、可移植性缺陷等幾個方面分析了C編程中可能遇到的問題。最后,作者用一章的篇幅給出了若干具有實用價值的建議。
  本書適合有一定經驗的C程序員閱讀學習,即便你是C編程高手,本書也應該成為你的案頭必備書籍。
  
Pointers on C

   本書提供與C語言編程相關的全面資源和深入討論。本書通過對指針的基礎知識和高級特性的探討,幫助程序員把指針的強大功能融入到自己的程序中去。
  全書共18章,覆蓋了數據、語句、操作符和表達式、指針、函數、數組、字符串、結構和聯合等幾乎所有重要的C編程話題。書中給出了很多編程技巧和提示,每章后面有針對性很強的練習,附錄部分則給出了部分練習的解答。
  本書適合C語言初學者和初級C程序員閱讀,也可作為計算機專業學生學習C語言的參考。
  
C: A Reference Manual

   本書是關于C語言的詳盡的參考手冊。最新的第5版增加了對C99標準的介紹,更加符合當前讀者學習C語言的需要。.
  全書分為兩大部分,共24章。第一部分討論了C語言的所有語言特征,包括詞法、預處理機制、聲明、類型、表達式、語句以及函數等基本語言特性。第二部分討論了C語言的標準庫,根據它們不同的功能分別詳細介紹。為幫助讀者理解相關概念,本書在討論C 語言及其標準庫的各方面問題時,提供了許多實例和解釋。在第一部分的各章中還提供了練習題,書后則給出了主要練習的解答。這些練習的主要目的是幫助讀者理解C語言的基本機制及其重要細節,其中并不涉及復雜的程序設計技術與問題。..
  本書可以作為高等院校計算機專業C語言課程的教材和參考書,對于一般的C程序員也有重要的參考價值。
  《C語言參考手冊》原書自出版以來,得到C程序員和C語言教師的廣泛推崇,更被普林斯頓等著名大學用作教學參考書。本書是經過更新的第5版,包括對最新的C標準(ISO/IEC 9899:1999)的全面介紹。
[編輯本段]
C的學習方法
  [1][2]1:工欲善其事,必先利其器
  這里介紹幾個學習C語言必備的東東:
  一個開發環境,例如turbo C 2.0,這個曾經占據了DOS時代開發程序的大半個江山。但是現在windows時代,用turbo C有感覺不方便,編輯程序起來很吃力,并且拖放,更沒有函數變量自動感應功能,查詢參考資料也不方便。建議使用Visual C ,這個東西雖然比較大塊頭,但是一旦安裝好了,用起來很方便。
  2:葵花寶典
  學習計算機語言最好的方法是什么?答曰:讀程序。
  沒錯,讀程序是學習C語言入門最快,也是最好的方法。
  3:登峰造極
  寫程序的最高境界其實就是掌握各種解決問題的手段(數據結構)和解決問題的方法(算法)。[1]
[編輯本段]
C語言考試復習五要點
  [3]一、了解試卷,胸中有數
  二、深刻理解,強化概念
  三、歸納整理,適當記憶
  四、注重實踐,融會貫通
  五、多做練習,查漏補缺






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日韩在线一区二区 | www.日韩系列 | 日本一级淫片免费啪啪3 | 一区二区三区免费 | 国产精品国产亚洲精品看不卡15 | 久久影音先锋 | 羞羞视频免费在线观看 | 美国a级毛片免费视频 | 国产一区二 | 亚洲精品一区二区三区在线 | 欧美精品一二区 | 国产日韩欧美在线观看 | 国产精品久久久久久久久久免费 | h视频在线观看免费 | 日韩精品极品视频在线观看免费 | 国产伊人精品 | 天天操天天射天天 | 婷婷色在线 | 四虎av电影 | 欧美日在线 | 成人av一区二区亚洲精 | 国产色 | 欧美精品在线一区二区三区 | 久久在线视频 | 精品国产免费人成在线观看 | 91亚洲国产 | 国产精品久久久久久婷婷天堂 | 久久综合狠狠综合久久 | 中文字幕国产视频 | 久久国产精品偷 | 特一级毛片 | 日韩区 | 欧美日韩国产在线 | 国产特一级黄色片 | 欧美国产亚洲一区二区 | 国产色| 98久久| 亚洲一区二区黄 | 欧美一区二区三区在线 | 日韩在线中文字幕 | 亚洲国产成人精品女人 |