C語言入門經典(第5版)(簡體書)
商品資訊
ISBN13:9787302343417
出版社:清華大學出版社(大陸)
作者:(美)霍爾頓
譯者:楊浩
出版日:2013/11/01
裝訂/頁數:平裝/584頁
規格:23.5cm*16.8cm (高/寬)
版次:1
商品簡介
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功能。
作者簡介
編程殿堂。他曾在IBM工作多年,以優異成績擁有數學學士學位。他的資歷包
括:使用大多數語言(如在多種機器上使用匯編語言和高級語言)進行編程,實時
編程,設計和實現實時閉環工業控制系統。Horton擁有豐富的面向工程師和科學
家的編程教學經驗(教學內容包括C、C++、Fortran、PL/1、APL等)。同時,他還
是機械、加工和電子CAD系統、機械CAM系統和DNC/CNC系統方面的專家。
名人/編輯推薦
序
歡迎使用《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編譯器,可從下載,它提供了一個非常棒的集成開發環境(IDE)。
本書采用的約定
本書的文本和布局采用了許多不同的樣式,以便區分各種不同的信息。大多數樣式表達的含義都很明顯。程序代碼樣式如下:
int main(void)
{ printf("Beginning C\n");
return 0;
}
如果代碼片段是從前面的實例修改而來,修改過的代碼行就用粗體顯示,如下所示:
i int main(void)
{
printf("Beginning C by Ivor Horton\n");
return 0;
}
當代碼出現在文本中時,它的樣式會有所不同,如:double。
程序代碼中還是用了各種“括號”。它們之間的差別非常重要,不同稱呼。本書中稱()為圓括號,{}為大括號,[]為方括號。
目次
第1章 C語言編程 1
1.1 C語言 1
1.2 標準庫 2
1.3 學習C 2
1.4 創建C程序 2
1.4.1 編輯 2
1.4.2 編譯 3
1.4.3 鏈接 4
1.4.4 執行 4
1.5 創建第一個程序 5
1.6 編輯第一個程序 5
1.7 處理錯誤 6
1.8 剖析一個簡單的程序 7
1.8.1 注釋 7
1.8.2 預處理指令 8
1.8.3 定義main()函數 9
1.8.4 關鍵字 10
1.8.5 函數體 10
1.8.6 輸出信息 11
1.8.7 參數 11
1.8.8 控制符 11
1.8.9 三字母序列 13
1.9 預處理器 14
1.10 用C語言開發程序 14
1.10.1 了解問題 14
1.10.2 詳細設計 15
1.10.3 實施 15
1.10.4 測試 15
1.11 函數及模塊化編程 16
1.12 常見錯誤 19
1.13 要點 19
1.14 小結 20
1.15 習題 20
第2章 編程初步 21
2.1 計算機的內存 21
2.2 什么是變量 23
2.3 存儲整數的變量 24
2.3.1 變量的使用 28
2.3.2 變量的初始化 29
2.4 變量與內存 36
2.4.1 帶符號的整數類型 36
2.4.2 無符號的整數類型 37
2.4.3 指定整數常量 37
2.5 使用浮點數 39
2.6 浮點數變量 41
2.6.1 使用浮點數完成除法運算 42
2.6.2 控制輸出中的小數位數 43
2.6.3 控制輸出的字段寬度 43
2.7 較復雜的表達式 44
2.8 定義命名常量 46
2.8.1 極限值 49
2.8.2 sizeof運算符 51
2.9 選擇正確的類型 52
2.10 強制類型轉換 55
2.10.1 自動轉換類型 56
2.10.2 隱式類型轉換的規則 56
2.10.3 賦值語句中的隱式類型轉換 57
2.11 再談數值數據類型 58
2.11.1 字符類型 58
2.11.2 字符的輸入輸出 59
2.11.3 枚舉 62
2.11.4 存儲布爾值的變量 64
2.12 賦值操作的op=形式 65
2.13 數學函數 66
2.14 設計一個程序 67
2.14.1 問題 68
2.14.2 分析 68
2.14.3 解決方案 70
2.15 小結 73
2.16 練習 74
第3章 條件判斷 75
3.1 判斷過程 75
3.1.1 算術比較 75
3.1.2 基本的if語句 76
3.1.3 擴展if語句:if-else 79
3.1.4 在if語句中使用代碼塊 82
3.1.5 嵌套的if語句 83
3.1.6 測試字符 85
3.1.7 邏輯運算符 88
3.1.8 條件運算符 91
3.1.9 運算符的優先級 94
3.2 多項選擇問題 98
3.2.1 給多項選擇使用else-if語句 98
3.2.2 switch語句 99
3.2.3 goto語句 107
3.3 按位運算符 108
3.3.1 按位運算符的op=用法 110
3.3.2 使用按位運算符 111
3.4 設計程序 114
3.4.1 問題 114
3.4.2 分析 114
3.4.3 解決方案 114
3.5 小結 118
3.6 練習 118
第4章 循環 119
4.1 循環 119
4.2 遞增和遞減運算符 120
4.3 for循環 120
4.4 for循環的一般語法 124
4.5 再談遞增和遞減運算符 125
4.5.1 遞增運算符 125
4.5.2 遞增運算符的前置和后置形式 125
4.5.3 遞減運算符 126
4.6 再論for循環 127
4.6.1 修改for循環變量 129
4.6.2 沒有參數的for循環 129
4.6.3 循環內的break語句 130
4.6.4 使用for循環限制輸入 132
4.6.5 生成偽隨機整數 135
4.6.6 再談循環控制選項 137
4.6.7 浮點類型的循環控制變量 137
4.7 while循環 138
4.8 嵌套循環 140
4.9 嵌套循環和goto語句 146
4.10 do-while循環 147
4.11 continue語句 149
4.12 設計程序 150
4.12.1 問題 150
4.12.2 分析 150
4.12.3 解決方案 151
4.13 小結 162
4.14 習題 163
第5章 數組 165
5.1 數組簡介 165
5.1.1 不用數組的程序 165
5.1.2 什么是數組 167
5.1.3 使用數組 168
5.2 尋址運算符 171
5.3 數組和地址 173
5.4 數組的初始化 174
5.5 確定數組的大小 175
5.6 多維數組 176
5.7 多維數組的初始化 178
5.8 變長數組 184
5.9 設計一個程序 186
5.9.1 問題 186
5.9.2 分析 186
5.9.3 解決方案 187
5.10 小結 193
5.11 習題 193
第6章 字符串和文本的應用 195
6.1 什么是字符串 195
6.2 存儲字符串的變量 197
6.3 字符串操作 202
6.3.1 檢查對C11的支持 202
6.3.2 確定字符串的長度 203
6.3.3 復制字符串 204
6.3.4 連接字符串 204
6.3.5 比較字符串 208
6.3.6 搜索字符串 211
6.3.7 單元化字符串 215
6.3.8 將換行符讀入字符串 219
6.4 分析和轉換字符串 221
6.4.1 轉換字符的大小寫形式 223
6.4.2 將字符串轉換成數值 225
6.5 設計一個程序 227
6.5.1 問題 227
6.5.2 分析 227
6.5.3 解決方案 228
6.6 小結 233
6.7 習題 233
第7章 指針 235
7.1 指針初探 235
7.1.1 聲明指針 236
7.1.2 通過指針訪問值 237
7.1.3 使用指針 240
7.1.4 指向常量的指針 244
7.1.5 常量指針 244
7.1.6 指針的命名 245
7.2 數組和指針 245
7.3 多維數組 248
7.3.1 多維數組和指針 252
7.3.2 訪問數組元素 253
7.4 內存的使用 256
7.4.1 動態內存分配:malloc()函數 256
7.4.2 釋放動態分配的內存 257
7.4.3 用calloc()函數分配內存 261
7.4.4 擴展動態分配的內存 262
7.5 使用指針處理字符串 265
7.5.1 使用指針數組 266
7.5.2 指針和數組記號 272
7.6 設計程序 276
7.6.1 問題 276
7.6.2 分析 277
7.6.3 解決方案 277
7.7 小結 284
7.8 習題 285
第8章 編程的結構 287
8.1 程序的結構 287
8.1.1 變量的作用域和生存期 288
8.1.2 變量的作用域和函數 291
8.2 函數 291
8.2.1 定義函數 291
8.2.2 return語句 294
8.3 按值傳遞機制 299
8.4 函數原型 300
8.5 指針用作參數和返回值 301
8.5.1 常量參數 302
8.5.2 返回指針的風險 307
8.6 小結 310
8.7 習題 310
第9章 函數再探 313
9.1 函數指針 313
9.1.1 聲明函數指針 313
9.1.2 通過函數指針調用函數 314
9.1.3 函數指針的數組 316
9.1.4 作為變元的函數指針 319
9.2 函數中的變量 321
9.2.1 靜態變量:函數內部的追蹤 321
9.2.2 在函數之間共享變量 323
9.3 調用自己的函數:遞歸 325
9.4 變元個數可變的函數 328
9.4.1 復制va_list 331
9.4.2 長度可變的變元列表的基本規則 331
9.5 main()函數 332
9.6 結束程序 333
9.6.1 abort()函數 333
9.6.2 exit()和atexit()函數 333
9.6.3 _Exit()函數 334
9.6.4 quick_exit()和at_quick_exit()函數 334
9.7 提高性能 335
9.7.1 內聯聲明函數 335
9.7.2 使用restrict關鍵字 335
9.7.3 _Noreturn函數限定符 336
9.8 設計程序 336
9.8.1 問題 336
9.8.2 分析 337
9.8.3 解決方案 338
9.9 小結 351
9.10 習題 352
第10章 基本輸入和輸出操作 353
10.1 輸入和輸出流 353
10.2 標準流 354
10.3 鍵盤輸入 354
10.3.1 格式化鍵盤輸入 355
10.3.2 輸入格式控制字符串 355
10.3.3 輸入格式字符串中的字符 360
10.3.4 輸入浮點數的各種變化 362
10.3.5 讀取十六進制和八進制值 363
10.3.6 用scanf_s()讀取字符 364
10.3.7 從鍵盤上輸入字符串 366
10.3.8 單個字符的鍵盤輸入 367
10.4 屏幕輸出 372
10.4.1 使用printf_s()的格式化輸出 372
10.4.2 轉義序列 375
10.4.3 整數輸出 375
10.4.4 輸出浮點數 378
10.4.5 字符輸出 379
10.5 其他輸出函數 380
10.5.1 屏幕的非格式化輸出 381
10.5.2 數組的格式化輸出 381
10.5.3 數組的格式化輸入 382
10.6 小結 382
10.7 習題 383
第11章 結構化數據 385
11.1 數據結構:使用struct 385
11.1.1 定義結構類型和結構變量 387
11.1.2 訪問結構成員 388
11.1.3 未命名的結構 390
11.1.4 結構數組 391
11.1.5 表達式中的結構成員 393
11.1.6 結構指針 393
11.1.7 為結構動態分配內存 394
11.2 再探結構成員 397
11.2.1 將一個結構作為另一個結構的成員 397
11.2.2 聲明結構中的結構 398
11.2.3 將結構指針用作結構成員 399
11.2.4 雙向鏈表 403
11.2.5 結構中的位字段 406
11.3 結構與函數 407
11.3.1 結構作為函數的變元 407
11.3.2 結構指針作為函數變元 408
11.3.3 作為函數返回值的結構 409
11.3.4 二叉樹 414
11.4 共享內存 421
11.5 設計程序 425
11.5.1 問題 425
11.5.2 分析 426
11.5.3 解決方案 426
11.6 小結 438
11.7 習題 438
第12章 處理文件 441
12.1 文件的概念 441
12.1.1 文件中的位置 442
12.1.2 文件流 442
12.2 文件訪問 442
12.2.1 打開文件 443
12.2.2 緩存文件操作 445
12.2.3 文件重命名 446
12.2.4 關閉文件 447
12.2.5 刪除文件 447
12.3 寫入文本文件 448
12.4 讀取文本文件 449
12.5 在文本文件中讀寫字符串 452
12.6 格式化文件的輸入輸出 456
12.6.1 格式化文件輸出 456
12.6.2 格式化文件輸入 457
12.7 錯誤處理 459
12.8 再探文本文件操作模式 460
12.9 freopen_s()函數 461
12.10 二進制文件的輸入輸出 462
12.10.1 以二進制模式打開文件 462
12.10.2 寫入二進制文件 463
12.10.3 讀取二進制文件 464
12.11 在文件中移動 469
12.11.1 文件定位操作 469
12.11.2 找出我們在文件中的位置 470
12.11.3 在文件中設定位置 471
12.12 使用臨時文件 477
12.12.1 創建臨時文件 477
12.12.2 創建唯一的文件名 478
12.13 更新二進制文件 479
12.13.1 修改文件的內容 484
12.13.2 從鍵盤輸入創建記錄 485
12.13.3 將記錄寫入文件 486
12.13.4 從文件中讀取記錄 486
12.13.5 寫入文件 487
12.13.6 列出文件內容 488
12.13.7 更新已有的文件內容 489
12.14 文件打開模式小結 495
12.15 設計程序 496
12.15.1 問題 496
12.15.2 分析 496
12.15.3 解決方案 496
12.16 小結 501
12.17 習題 501
第13章 支持功能 503
13.1 預處理 503
13.1.1 在程序中包含頭文件 503
13.1.2 定義自己的頭文件 504
13.1.3 管理多個源文件 504
13.1.4 外部變量 505
13.1.5 靜態函數 505
13.1.6 替換程序源代碼 506
13.2 宏 507
13.2.1 看起來像函數的宏 507
13.2.2 字符串作為宏參數 509
13.2.3 在宏展開式中結合兩個變元 510
13.3 多行上的預處理器指令 510
13.3.1 預處理器邏輯指令 511
13.3.2 條件編譯 511
13.3.3 測試多個條件 512
13.3.4 取消定義的標識符 512
13.3.5 測試標識符的指定值的指令 512
13.3.6 多項選擇 513
13.3.7 標準預處理宏 514
13.4 調試方法 515
13.4.1 集成的調試器 515
13.4.2 調試階段的預處理器 515
13.4.3 斷言 519
13.5 日期和時間函數 521
13.5.1 獲取時間值 522
13.5.2 獲取日期 525
13.5.3 確定某一天是星期幾 529
13.6 小結 531
13.7 習題 531
第14章 高級專用主題 533
14.1 使用國際字符集 533
14.1.1 理解Unicode 533
14.1.2 設置區域 534
14.1.3 寬字符類型wchar_t 535
14.1.4 寬字符串的操作 537
14.1.5 寬字符的文件流操作 540
14.1.6 存儲Unicode字符的固定大小類型 541
14.2 用于可移植性的專用整數類型 545
14.2.1 固定寬度的整型 545
14.2.2 最小寬度的整型 545
14.2.3 最大寬度的整型 546
14.3 復數類型 546
14.3.1 復數基礎 546
14.3.2 復數類型和操作 547
14.4 用線程編程 550
14.4.1 創建線程 550
14.4.2 退出線程 551
14.4.3 把一個線程連接到另一個線程上 552
14.4.4 掛起線程 555
14.4.5 管理線程對數據的訪問 555
14.5 小結 561
附錄A 計算機中的數學知識 563
附錄B ASCII字符代碼定義 571
附錄C C語言中的保留字 575
附錄D 輸入輸出格式說明符 577
附錄E 標準庫頭文件 583
書摘/試閱
主題書展
更多書展購物須知
大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。
特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。
無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。
為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。
若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。

