C語言是每一位程序員都應該掌握的基礎語言。C語言是微軟.NET編程中使用的C#語言的基礎;C語言是iPhone、iPad和其他蘋果設備編程中使用的Objective-C語言的基礎;C語言是在很多環境中(包括GNU項目)被廣泛使用的C 語言的基礎。C語言也是Linux操作系統及其很多功能的基礎。學習C語言可以給編程職業生涯提供牢固的基礎,也有助于更好地理解更為現代的語言(如Java)。
《C語言入門經典(第5版)》主要介紹最基礎的計算機語言之一C語言。
本書從最基礎的內容開始,步步深入講解作為一位稱職的C語言程序員應該具
備的知識和技能。
主要內容
闡述C語言的核心特征,例如循環和分支
如何使用指針和指令動態管理內存
如何使用頭文件和函數模塊化代碼
程序如何通過鍵盤、顯示器和數據文件讀寫數據
如何通過預處理命令在編譯時優化代碼
如何使用結構有效地管理輸入數據
本書完整地介紹了一個C應用程序的開發過程,這樣你在閱讀過程中可以結合實際的應用場景提高編程技能。書中的樣例提供了實驗的基礎,可以通過修改其中的部分代碼來對比前后程序運行的結果。后面的練習題用來測試對新知識、新技能的掌握情況,如果需要練習題答案,可以網上下載。
閱讀完本書,你應該有能力和信心開發自己的C應用程序,并且具備在大型項目中應用C語言思想的技能。第5版詳細介紹了C語言的國際標準,并且修訂涵蓋了語言編譯器新支持的C11功能。
編程導師Ivor Horton經典巨作,
長期位居C語言開發類零售榜首,
第五版全新包裝隆重上市,
超高的性價比助你快速掌握C語言
提升您的編程技能;完善您的職業生涯
Ivor Horton經典作品:
《C語言入門經典(第5版)》
《C 入門經典(第4版)》
《C 標準模板庫編程實戰》
《Visual C 2013入門經典(第7版)》
Ivor Horton是世界著名計算機圖書作家,獨立顧問,幫助無數程序員步入編程殿堂。他曾在IBM工作多年,以優異成績擁有數學學士學位。他的資歷包括:使用大多數語言(如在多種機器上使用匯編語言和高級語言)進行編程,實時編程,設計和實現實時閉環工業控制系統。Horton擁有豐富的面向工程師和科學家的編程教學經驗(教學內容包括C、C 、Fortran、PL/1、APL等)。同時,他還是機械、加工和電子CAD系統、機械CAM系統和DNC/CNC系統方面的專家。
第1章 C語言編程
1.1 C語言
1.2 標準庫
1.3 學習C
1.4 創建C程序
1.4.1 編輯
1.4.2 編譯
1.4.3 鏈接
1.4.4 執行
1.5 創建及時個程序
1.6 編輯及時個程序
1.7 處理錯誤
1.8 剖析一個簡單的程序
1.8.1 注釋
1.8.2 預處理指令
1.8.3 定義main()函數
1.8.4 關鍵字
1.8.5 函數體
1.8.6 輸出信息
1.8.7 參數
1.8.8 控制符
1.8.9 三字母序列
1.9 預處理器
1.10 用C語言開發程序
1.10.1 了解問題
1.10.2 詳細設計
1.10.3 實施
1.10.4 測試
1.11 函數及模塊化編程
1.12 常見錯誤
1.13 要點
1.14 小結
1.15 習題
第2章 編程初步
2.1 計算機的內存
2.2 什么是變量
2.3 存儲整數的變量
2.3.1 變量的使用
2.3.2 變量的初始化
2.4 變量與內存
2.4.1 帶符號的整數類型
2.4.2 無符號的整數類型
2.4.3 指定整數常量
2.5 使用浮點數
2.6 浮點數變量
2.6.1 使用浮點數完成除法運算
2.6.2 控制輸出中的小數位數
2.6.3 控制輸出的字段寬度
2.7 較復雜的表達式
2.8 定義命名常量
2.8.1 極限值
2.8.2 sizeof運算符
2.9 選擇正確的類型
2.10 強制類型轉換
2.10.1 自動轉換類型
2.10.2 隱式類型轉換的規則
2.10.3 賦值語句中的隱式類型轉換
2.11 再談數值數據類型
2.11.1 字符類型
2.11.2 字符的輸入輸出
2.11.3 枚舉
2.11.4 存儲布爾值的變量
2.12 賦值操作的op=形式
2.13 數學函數
2.14 設計一個程序
2.14.1 問題
2.14.2 分析
2.14.3 解決方案
2.15 小結
2.16 練習
第3章 條件判斷
3.1 判斷過程
3.1.1 算術比較
3.1.2 基本的if語句
3.1.3 擴展if語句:if-else
3.1.4 在if語句中使用代碼塊
3.1.5 嵌套的if語句
3.1.6 測試字符
3.1.7 邏輯運算符
3.1.8 條件運算符
3.1.9 運算符的優先級
3.2 多項選擇問題
3.2.1 給多項選擇使用else-if語句
3.2.2 switch語句
3.2.3 goto語句
3.3 按位運算符
3.3.1 按位運算符的op=用法
3.3.2 使用按位運算符
3.4 設計程序
3.4.1 問題
3.4.2 分析
3.4.3 解決方案
3.5 小結
3.6 練習
第4章 循環
4.1 循環
4.2 遞增和遞減運算符
4.3 for循環
4.4 for循環的一般語法
4.5 再談遞增和遞減運算符
4.5.1 遞增運算符
4.5.2 遞增運算符的前置和后置形式
4.5.3 遞減運算符
4.6 再論for循環
4.6.1 修改for循環變量
4.6.2 沒有參數的for循環
4.6.3 循環內的break語句
4.6.4 使用for循環限制輸入
4.6.5 生成偽隨機整數
4.6.6 再談循環控制選項
4.6.7 浮點類型的循環控制變量
4.7 while循環
4.8 嵌套循環
4.9 嵌套循環和goto語句
4.10 do-while循環
4.11 continue語句
4.12 設計程序
4.12.1 問題
4.12.2 分析
4.12.3 解決方案
4.13 小結
4.14 習題
第5章 數組
5.1 數組簡介
5.1.1 不用數組的程序
5.1.2 什么是數組
5.1.3 使用數組
5.2 尋址運算符
5.3 數組和地址
5.4 數組的初始化
5.5 確定數組的大小
5.6 多維數組
5.7 多維數組的初始化
5.8 變長數組
5.9 設計一個程序
5.9.1 問題
5.9.2 分析
5.9.3 解決方案
5.10 小結
5.11 習題
第6章 字符串和文本的應用
6.1 什么是字符串
6.2 存儲字符串的變量
6.3 字符串操作
6.3.1 檢查對C11的支持
6.3.2 確定字符串的長度
6.3.3 復制字符串
6.3.4 連接字符串
6.3.5 比較字符串
6.3.6 搜索字符串
6.3.7 單元化字符串
6.3.8 將換行符讀入字符串
6.4 分析和轉換字符串
6.4.1 轉換字符的大小寫形式
6.4.2 將字符串轉換成數值
6.5 設計一個程序
6.5.1 問題
6.5.2 分析
6.5.3 解決方案
6.6 小結
6.7 習題
第7章 指針
7.1 指針初探
7.1.1 聲明指針
7.1.2 通過指針訪問值
7.1.3 使用指針
7.1.4 指向常量的指針
7.1.5 常量指針
7.1.6 指針的命名
7.2 數組和指針
7.3 多維數組
7.3.1 多維數組和指針
7.3.2 訪問數組元素
7.4 內存的使用
7.4.1 動態內存分配:malloc()函數
7.4.2 釋放動態分配的內存
7.4.3 用calloc()函數分配內存
7.4.4 擴展動態分配的內存
7.5 使用指針處理字符串
7.5.1 使用指針數組
7.5.2 指針和數組記號
7.6 設計程序
7.6.1 問題
7.6.2 分析
7.6.3 解決方案
7.7 小結
7.8 習題
第8章 編程的結構
8.1 程序的結構
8.1.1 變量的作用域和生存期
8.1.2 變量的作用域和函數
8.2 函數
8.2.1 定義函數
8.2.2 return語句
8.3 按值傳遞機制
8.4 函數原型
8.5 指針用作參數和返回值
8.5.1 常量參數
8.5.2 返回指針的風險
8.6 小結
8.7 習題
第9章 函數再探
9.1 函數指針
9.1.1 聲明函數指針
9.1.2 通過函數指針調用函數
9.1.3 函數指針的數組
9.1.4 作為變元的函數指針
9.2 函數中的變量
9.2.1 靜態變量:函數內部的追蹤
9.2.2 在函數之間共享變量
9.3 調用自己的函數:遞歸
9.4 變元個數可變的函數
9.4.1 復制va_list
9.4.2 長度可變的變元列表的基本規則
9.5 main()函數
9.6 結束程序
9.6.1 abort()函數
9.6.2 exit()和atexit()函數
9.6.3 _Exit()函數
9.6.4 quick_exit()和at_quick_exit()函數
9.7 提高性能
9.7.1 內聯聲明函數
9.7.2 使用restrict關鍵字
9.7.3 _Noreturn函數限定符
9.8 設計程序
9.8.1 問題
9.8.2 分析
9.8.3 解決方案
9.9 小結
9.10 習題
第10章 基本輸入和輸出操作
10.1 輸入和輸出流
10.2 標準流
10.3 鍵盤輸入
10.3.1 格式化鍵盤輸入
10.3.2 輸入格式控制字符串
10.3.3 輸入格式字符串中的字符
10.3.4 輸入浮點數的各種變化
10.3.5 讀取十六進制和八進制值
10.3.6 用scanf_s()讀取字符
10.3.7 從鍵盤上輸入字符串
10.3.8 單個字符的鍵盤輸入
10.4 屏幕輸出
10.4.1 使用printf_s()的格式化輸出
10.4.2 轉義序列
10.4.3 整數輸出
10.4.4 輸出浮點數
10.4.5 字符輸出
10.5 其他輸出函數
10.5.1 屏幕的非格式化輸出
10.5.2 數組的格式化輸出
10.5.3 數組的格式化輸入
10.6 小結
10.7 習題
第11章 結構化數據
11.1 數據結構:使用struct
11.1.1 定義結構類型和結構變量
11.1.2 訪問結構成員
11.1.3 未命名的結構
11.1.4 結構數組
11.1.5 表達式中的結構成員
11.1.6 結構指針
11.1.7 為結構動態分配內存
11.2 再探結構成員
11.2.1 將一個結構作為另一個結構的成員
11.2.2 聲明結構中的結構
11.2.3 將結構指針用作結構成員
11.2.4 雙向鏈表
11.2.5 結構中的位字段
11.3 結構與函數
11.3.1 結構作為函數的變元
11.3.2 結構指針作為函數變元
11.3.3 作為函數返回值的結構
11.3.4 二叉樹
11.4 共享內存
11.5 設計程序
11.5.1 問題
11.5.2 分析
11.5.3 解決方案
11.6 小結
11.7 習題
第12章 處理文件
12.1 文件的概念
12.1.1 文件中的位置
12.1.2 文件流
12.2 文件訪問
12.2.1 打開文件
12.2.2 緩存文件操作
12.2.3 文件重命名
12.2.4 關閉文件
12.2.5 刪除文件
12.3 寫入文本文件
12.4 讀取文本文件
12.5 在文本文件中讀寫字符串
12.6 格式化文件的輸入輸出
12.6.1 格式化文件輸出
12.6.2 格式化文件輸入
12.7 錯誤處理
12.8 再探文本文件操作模式
12.9 freopen_s()函數
12.10 二進制文件的輸入輸出
12.10.1 以二進制模式打開文件
12.10.2 寫入二進制文件
12.10.3 讀取二進制文件
12.11 在文件中移動
12.11.1 文件定位操作
12.11.2 找出我們在文件中的位置
12.11.3 在文件中設定位置
12.12 使用臨時文件
12.12.1 創建臨時文件
12.12.2 創建的文件名
12.13 更新二進制文件
12.13.1 修改文件的內容
12.13.2 從鍵盤輸入創建記錄
12.13.3 將記錄寫入文件
12.13.4 從文件中讀取記錄
12.13.5 寫入文件
12.13.6 列出文件內容
12.13.7 更新已有的文件內容
12.14 文件打開模式小結
12.15 設計程序
12.15.1 問題
12.15.2 分析
12.15.3 解決方案
12.16 小結
12.17 習題
第13章 支持功能
13.1 預處理
13.1.1 在程序中包含頭文件
13.1.2 定義自己的頭文件
13.1.3 管理多個源文件
13.1.4 外部變量
13.1.5 靜態函數
13.1.6 替換程序源代碼
13.2 宏
13.2.1 看起來像函數的宏
13.2.2 字符串作為宏參數
13.2.3 在宏展開式中結合兩個變元
13.3 多行上的預處理器指令
13.3.1 預處理器邏輯指令
13.3.2 條件編譯
13.3.3 測試多個條件
13.3.4 取消定義的標識符
13.3.5 測試標識符的指定值的指令
13.3.6 多項選擇
13.3.7 標準預處理宏
13.4 調試方法
13.4.1 集成的調試器
13.4.2 調試階段的預處理器
13.4.3 斷言
13.5 日期和時間函數
13.5.1 獲取時間值
13.5.2 獲取日期
13.5.3 確定某24小時是星期幾
13.6 小結
13.7 習題
第14章 高級專用主題
14.1 使用國際字符集
14.1.1 理解Unicode
14.1.2 設置區域
14.1.3 寬字符類型wchar_t
14.1.4 寬字符串的操作
14.1.5 寬字符的文件流操作
14.1.6 存儲Unicode字符的固定大小類型
14.2 用于可移植性的專用整數類型
14.2.1 固定寬度的整型
14.2.2 最小寬度的整型
14.2.3 較大寬度的整型
14.3 復數類型
14.3.1 復數基礎
14.3.2 復數類型和操作
14.4 用線程編程
14.4.1 創建線程
14.4.2 退出線程
14.4.3 把一個線程連接到另一個線程上
14.4.4 掛起線程
14.4.5 管理線程對數據的訪問
14.5 小結
附錄A 計算機中的數學知識
附錄B ASCII字符代碼定義
附錄C C語言中的保留字
附錄D 輸入輸出格式說明符
附錄E 標準庫頭文件
歡迎使用《C語言入門經典(第5版)》。研讀本書,你就可以成為一位稱職的C語言程序員。從許多方面來說,C語言都是學習程序設計的理想起步語言。C語言很簡潔,因此無須學量的語法便能夠開始編寫真正的應用程序。除了簡明易學以外,它還是一門功能非常強大的語言,并被專業人士廣泛應用在各種領域。C語言的強大之處主要體現在,它能夠應用于各類層次的開發中,從設備驅動程序和操作系統組件到大規模應用程序,它都能勝任。此外,C語言還可以適用于相對較新的手機應用程序開發上。
幾乎所有計算機都包含C語言編譯器,因此,當你學會了C語言,就可以在任何環境下進行編程。一點,掌握C語言可以為理解面向對象的C 語言奠定良好的基礎。
在作者眼中,有抱負的程序員必將面對三重障礙,即掌握遍布程序設計語言中的各類術語、理解如何使用語言元素(而不僅僅只是知道它們的概念)以及領會如何在實際場景中應用該語言。本書的目的就是將這些障礙降到低限度。
術語是專業人士及業余愛好者之間的交流必不可少的,因此有必要掌握它們。本書將確保你理解這些術語,并自如地在各種環境下使用它們。這樣才能更有效地使用大多數軟件產品附帶的文檔,且能輕松地閱讀和學部分程序設計語言相關的著作。
理解語言元素的語法和作用固然是學習C語言過程中的一個重要部分,但認識語言特性如何工作及應用也同等重要。本書不僅采用了代碼片段,還在每個章節中使用一些實際應用示例展示語言特性如何應用于特定的問題。這些示例提供了實踐的基礎,讀者可以通過改動代碼觀察修改后的結果。
理解特定背景下的程序設計不僅只是應用個別語言元素。為了幫助讀者理解它們,本書大部分章節之后都給出了一個較為復雜的應用程序,以應用本章之前學到的知識。這些程序可以幫助你獲得開發應用程序的能力與信心,了解如何聯合以及更大范圍地應用語言元素。最重要的是,它們能讓你了解設計實際應用程序與管理實際代碼會碰到的問題。
不管學習什么程序設計語言,有幾件事情都要意識到。首先,雖然要學的東西很多,但是掌握它們之后,你就會有極大的成就感。其次,學習的過程很有趣,你會深深地體會到這點;第三,只有通過動手實踐才能學會編程,這也是本書貫徹的思想。,在學習的過程中,肯定會時不時犯許多錯誤和感到沮喪。當覺得自己停滯時,你要做的就是堅持。最終你一定會體驗到成功的喜悅,并且回頭想想時,你會覺得它也并沒有你想象中的那么難。
如何使用本書
作者認為動手實踐是學習編程好的方法,很快你就會編寫及時個程序了。每一章都會有幾個將理論應用于實踐的程序,它們也是本書的核心所在。建議讀者手工鍵入并運行書中的示例,因為手工鍵入可以極大地幫助記憶語言元素。此外,你還應當嘗試解決每章末尾的所有練習題。當你及時次將一個程序運行成功,尤其是在解決自己的問題后,你會感覺到很大的成就感和驚人的進步速度,那時你一定會覺得一切都挺值得。
剛開始,學習的進展不會太快,不過隨著逐漸深入,你的學習速度會越來越快。每一章都會涉及許多基礎知識,因此在學習新的內容之前,需要花些時間確保理解前面學習過的所有知識。實踐各部分的代碼,并嘗試實現自己的想法,這是學習程序設計語言的一個重要部分。嘗試修改書中的程序,看看還能讓它們做些什么,那才是有趣之處。不要害怕嘗試,如果某些地方不太明白,嘗試輸入一些變體,看看會出現什么情況。出錯并沒什么大不了,你會從出錯中學到很多知識。一個不錯的方法是徹底通讀每一章,了解各章的范圍,然后回過頭來過一遍所有的示例。
你可能會覺得某些章末尾的練習題非常難。如果及時次沒有搞明白,不用擔心。之所以及時次覺得困難是因為它們通常都是將你所學的知識應用到了相對復雜的問題中。如果你實在覺得困難的話,可以略過它們繼續學習下一章,然后再回頭研究這些程序。你甚至可以閱讀完整本書再考慮它們。盡管如此,如果你能完成練習的話,說明你取得了真正的進步。
本書讀者對象
《C語言入門經典(第5版)》的目的是教會讀者如何盡可能簡單快速地編寫有用的程序。在閱讀書后,讀者會徹底了解C語言編程。這本教程面向的是那些之前編過一些程序,了解背后的概念,并且希望通過學習C語言進一步擴展知識的讀者。盡管如此,本書并未假設讀者擁有先前的編程知識,因此如果你剛剛接觸編程,本書依然是你的不錯選擇。
使用本書的條件
要使用本書,你需要一臺安裝C編譯器和庫的計算機以執行書中的示例,以及一個程序文本編譯器用于創建源代碼文件。你使用的編譯器應支持目前C語言國際標準(ISO/IEC 9899:2011,也被稱為C11)。你還需要一個用于創建和修改代碼的編輯器,可以采用純文本編輯器(如記事本(Notepad)或vi)創建源文件。不過,采用專為編輯C語言代碼設計的編輯器會更有幫助。
以下是作者推薦的兩款C語言編譯器,均為免費軟件:
GNU C編譯器,GCC,可從下載,它支持多種不同的操作系統環境。
面向Microsoft Windows的Pelles C編譯器,可從 pellesc/下載,它提供了一個非常棒的集成開發環境(IDE)。
本書采用的約定
本書的文本和布局采用了許多不同的樣式,以便區分各種不同的信息。大多數樣式表達的含義都很明顯。程序代碼樣式如下:
int main(void)
{ printf("Beginning C\n");
return 0;
}
如果代碼片段是從前面的實例修改而來,修改過的代碼行就用粗體顯示,如下所示:
i int main(void)
{
printf("Beginning C by Ivor Horton\n");
return 0;
}
當代碼出現在文本中時,它的樣式會有所不同,如:double。
程序代碼中還是用了各種“括號”。它們之間的差別非常重要,不同稱呼。本書中稱()為圓括號,{}為大括號,[]為方括號。
C語言經典書籍,我是買來查漏補缺的,還是發現有不少未掌握的知識,挺喜歡的
我想爆粗口了 書快遞給磕壞了也就算了 那特么包裹里裝一堆樓房的廣告是干嘛的!!!!你們想掙廣告錢 可以在你們的包裝袋上印上賣樓房的廣告啊 我想你們頭也不會樂意吧 影響自己企業形象! 我買的是書,請你們尊下消費者!發廣告請咨詢下消費者是否需要!!!!生氣!!!
確實經典。我正在自學,前面有很多術語讓我看不懂,不過后面都有解釋非常好,我相信只需要看一個月我就能夠自稱我入門了。現在我已經編輯了我的第一個程序了(雖然是非常簡單的).......
經典,不愧是經典,比教科書上面的詳細多了。深入淺出。以后作為教科書,會很不錯的。
這本C語言入門經典的英文電子版讀了好幾遍,收獲很大。找了好久,國內出版社沒有出版英文版的,這本翻譯過來的還可以。
這本書對于我們初學者的幫助應該很大(???)
雖然有一些小小的錯誤,但可以改正的,語言也挺幽默的
對于我這種初學者來說 簡直是很好理解 我只是感興趣想去了解下 并不是學習這個專業的 如果有跟我一樣想法的同學 我想可是試試
之前看過譚的,感覺這本使用的示例代碼沒這么多的高數內容,比較親民,如果你對高數頭大,可以參考本書入門。
推介C語言零基礎的人閱讀此書,我看完第一章覺得能看的懂,本人曾學了一點VB,不知道算不算是零基礎,哈
經典書,簡單易懂,書厚實,C語言入門不錯適合初學者。
這本書我是打算買回來自學c語言的,包裝不錯,排版也不錯,重要的是快遞很快,希望這本書能有所幫助,嘻嘻嘻
講的很詳細,很透徹,代碼的注釋都是英文,該好好提升一下英文水平了……(代碼中的注釋為英文,但解析為中文)
C語言入門必備 內容全面清晰易懂 性價比很高 紙質好 很喜歡
工作需要需要學習C語言,看到網上推薦這本書就買了,正在學習中
現在重新學C語言,比完全初學更易理解。講得比較詳細,但一些細節書中未明確解釋,還是自己試試,存疑,慢慢琢磨。總之經典無疑。
這本書對于已經有編程基礎的人來說,可以更深入的了解底層的東西,可以說是挖掘吧,仔細品味還是有收獲的,如果是沒有編程基礎的人從零開始學習還是有很大的幫助的,萬丈高爐平地起嘛,嘿嘿
書很厚實,對于想重新學習C語言的我來說幫助很大
書很新,這點感謝。但是快遞讓我很發火很發火!!銀捷速遞!第一個快遞的電話居然停機,臥槽!打投訴電話永遠都在忙,您在忙什么??4號就開始派送,結果12號才送到!這快遞是想逆天嗎。當當網,選好點的快遞吧。。差點就想拒簽了!
書挺厚的 看完厚度我想自學C語言的勇氣已經被消滅一半了 快遞速度也不慢 總體還行 價格便宜 比jing東。tian貓上便宜
書寫的脫俗易懂,對于外行人也可以再很短的時間內學習到本質東西,內容過于基礎,如果需要更高水平的,要用其他書做輔助,總體來說,說是不錯的。只要認真學習,可以直接而又本質的在很短的時間內學會編程!
一本很不錯的C語言入門書籍,生動全面。很值得購買學習
這本書對于剛剛學習C語言的人有些很大的作用。
確實是本好書。內容講的很詳細,也很系統。說是入門,也需要一些基礎的,畢竟外國作者,他沒辦法站在中國人角度去講解,但能習慣他的思維方式的話,也能更好的接觸國際性程序員的習慣了。
學習C語言極力推薦這本,我之前也看過兩三本其他C語言的書,都沒有這本書寫得這么詳細,例子很多,講解也是超級詳細的!!!
比學校教材好多了 學C++學不懂的我 決定先學C語言 這本書語言流暢易懂 真的很不錯
學習C好幫手,依據C11版編寫,深入淺出的講解了C語言
還不錯,非常滿意。C語言初學者可用來看看,多了解,C語言有基礎的可以看看,鞏固基礎。
想看看外國人寫的C語言書,內容更容易理解也挺全面,蠻適合C語言入門。
這其實是一本好書。很多人吐槽作為C語言入門書,該書寫得太厚。確實,意志力稍差的讀者會很容易放棄。但是對于長期位居編程語言榜單第一名的C語言,是很有必要完整學一遍C的各個特性的,這無論是對于以后想深入C還是為其他語言打基礎,都是很有必要的。