C語言程序設計(第4版 修訂版) Programming in C, 4/e

[美] 史蒂芬·G.寇肯(Stephen G. Kochan)

  • C語言程序設計(第4版 修訂版)-preview-1
  • C語言程序設計(第4版 修訂版)-preview-2
C語言程序設計(第4版 修訂版)-preview-1

商品描述

本書通過程序示例講解C語言的眾多概念、函數和編程方法,幫助初學者更好地掌握C語言編程的內容。

本書從C語言的基礎概念和編譯過程出發,詳細講解C語言的數據類型、算術表達式、循環語句、判斷語句、數組、函數、結構體、字符串、指針、位運算、預處理器、輸入輸出操作等,以及goto語句、聯合體、逗號運算符、限定符、命令行參數、動態內存分配、程序調試、面向對象程序設計等高級特性。此外,本書提供了大量練習題,幫助讀者鞏固實踐;並通過附錄提供C語言概要、標準C語言庫、使用GCC編譯程序、常見的編程錯誤、C語言編譯器和集成開發環境等內容。

本書適合想要零基礎入門C語言編程的讀者,也適合用作電腦等相關專業C語言課程的教學參考書。

作者簡介

史蒂芬·G. 寇肯(Stephen G. Kochan)具有30多年的C語言開發經驗。他曾是AT&T貝爾實驗室的軟件顧問,在那裡進行過UNIX和C語言程序的開發和授課。他撰寫了多本關於編程和UNIX的經典圖書,包括《Objective-C程序設計(第6版)》和《UNIX/Linux/OS X中的Shell編程(第4版)》等。

目錄大綱

第 1章 一些基礎概念 1

1.1 程序設計 1

1.2 高級語言 1

1.3 操作系統 2

1.4 編譯程序 2

1.5 集成開發環境 4

1.6 語言解釋器 5

第 2章 編譯並運行你的第 一個程序 6

2.1 編譯你的程序 6

2.2 運行你的程序 7

2.3 理解你的第 一個程序 7

2.4 顯示變量的值 9

2.5 註釋 11

2.6 練習題 12

第3章 變量、數據類型和算術表達式 14

3.1 理解數據類型和常量 14

3.1.1 整數類型int 14

3.1.2 浮點數類型float 15

3.1.3 擴展精度類型double 16

3.1.4 單字符類型char 16

3.1.5 布爾數據類型_Bool 16

3.1.6 類型說明符:long、long long、short、unsigned和signed 18

3.2 使用變量 20

3.3 使用算術表達式 21

3.4 運算與賦值結合:賦值運算符 27

3.5 _Complex和_Imaginary類型 28

3.6 練習題 28

第4章 程序循環 30

4.1 三角數 30

4.2 for語句 31

4.2.1 關系運算符 32

4.2.2 輸出對齊 35

4.3 程序輸入 36

4.3.1 嵌套的for循環 37

4.3.2 for循環的變體 39

4.4 while語句 40

4.5 do語句 43

4.5.1 break語句 44

4.5.2 continue語句 44

4.6 練習題 45

第5章 做出決策 47

5.1 if語句 47

5.1.1 if-else結構 50

5.1.2 復合關系測試 52

5.1.3 嵌套if語句 54

5.1.4 else if結構 55

5.2 switch語句 61

5.3 布爾變量 63

5.4 條件運算符 66

5.5 練習題 68

第6章 使用數組 70

6.1 定義一個數組 70

6.1.1 使用數組元素作為計數器 73

6.1.2 生成斐波那契數 75

6.1.3 使用數組生成素數 76

6.2 初始化數組 78

6.3 字符數組 79

6.3.1 使用數組的基數變換 80

6.3.2 const限定符 82

6.4 多維數組 83

6.5 變長數組 85

6.6 練習題 86

第7章 使用函數 88

7.1 定義一個函數 88

7.2 參數和局部變量 91

7.2.1 函數原型聲明 91

7.2.2 自動局部變量 92

7.3 返回函數結果 93

7.4 函數調用 97

7.4.1 聲明返回類型和參數類型 99

7.4.2 檢查函數參數 100

7.5 自頂向下編程技術 101

7.6 函數與數組 102

7.6.1 賦值運算符 105

7.6.2 數組排序 106

7.6.3 多維數組 108

7.7 全局變量 112

7.8 自動變量與靜態變量 115

7.9 遞歸函數 117

7.10 練習題 119

第8章 使用結構體 121

8.1 結構體的基礎知識 121

8.2 用於存儲日期的結構體 121

8.3 函數與結構體 125

8.4 初始化結構體 132

8.5 結構體數組 133

8.6 包含結構體的結構體 136

8.7 包含數組的結構體 138

8.8 結構體變體 140

8.9 練習題 141

第9章 字符串 143

9.1 復習字符串的基礎知識 143

9.2 字符數組 143

9.3 變長字符串 145

9.3.1 字符串的初始化與顯示 147

9.3.2 判斷兩個字符串是否相等 149

9.3.3 輸入字符串 150

9.3.4 輸入單個字符 152

9.3.5 空字符串 156

9.4 轉義字符 158

9.5 關於字符串常量的更多內容 160

9.6 字符串、結構體和數組 161

9.7 字符操作 167

9.8 練習題 169

第 10章 指針 172

10.1 指針和間接性 172

10.2 定義一個指針變量 172

10.3 在表達式中使用指針 175

10.4 使用指針和數據結構 176

10.4.1 包含指針的結構體 178

10.4.2 鏈表 179

10.5 關鍵字const和指針 185

10.6 指針和函數 186

10.7 指針和數組 191

10.7.1 稍許離題:程序優化 194

10.7.2 是數組還是指針? 194

10.7.3 指向字符串的指針 195

10.7.4 字符串常量和指針 196

10.7.5 回顧遞增和遞減運算符 198

10.8 指針操作 200

10.9 指向函數的指針 201

10.10 指針和內存地址 202

10.11 練習題 203

第 11章 位運算 205

11.1 位的基礎知識 205

11.2 位運算符 206

11.2.1 按位與運算符 206

11.2.2 按位或運算符 208

11.2.3 按位異或運算符 209

11.2.4 二進制求補運算符 209

11.2.5 左移運算符 211

11.2.6 右移運算符 211

11.2.7 移位函數 212

11.2.8 循環移位 213

11.3 位域 215

11.4 練習題 218

第 12章 預處理器 220

12.1 #define語句 220

12.1.1 程序的可擴展性 223

12.1.2 程序的可移植性 224

12.1.3 更高級的定義類型 225

12.1.4 #運算符 229

12.1.5 ##運算符 230

12.2 #include語句 231

12.3 條件編譯 233

12.3.1 #ifdef、#endif、#else和#ifndef語句 233

12.3.2 #if和#elif預處理器語句 234

12.3.3 #undef語句 235

12.4 練習題 236

第 13章 用枚舉數據類型、類型定義及數據類型轉換以擴展數據類型 237

13.1 枚舉數據類型 237

13.2 typedef語句 240

13.3 數據類型轉換 242

13.3.1 符號擴展 243

13.3.2 參數轉換 243

13.4 練習題 244

第 14章 處理大型程序 245

14.1 將你的程序分為多個文件 245

14.2 模塊之間的通信 247

14.2.1 外部變量 247

14.2.2 靜態、外部變量和函數的對比 249

14.2.3 有效地使用頭文件 251

14.3 其他處理大型程序的工具 252

14.3.1 make工具 252

14.3.2 CVS工具 254

14.3.3 UNIX工具:ar、grep、sed等命令 254

第 15章 C語言中的輸入與輸出操作 255

15.1 字符I/O:getchar()與putchar() 255

15.2 格式化I/O:printf()與scanf() 255

15.2.1 printf()函數 256

15.2.2 scanf()函數 261

15.3 文件的輸入和輸出操作 264

15.3.1 將I/O重定向到文件 264

15.3.2 文件末尾 266

15.4 處理文件的特殊函數 267

15.4.1 fopen()函數 267

15.4.2 getc()和putc()函數 268

15.4.3 fclose()函數 269

15.4.4 feof()函數 270

15.4.5 fprintf()和fscanf()函數 271

15.4.6 fgets()和fputs()函數 271

15.4.7 stdin、stdout和stderr 272

15.4.8 exit()函數 272

15.4.9 重命名和刪除文件 273

15.5 練習題 273

第 16章 其他內容及高級特性 275

16.1 其他語言語句 275

16.1.1 goto語句 275

16.1.2 空語句 275

16.2 使用聯合體 276

16.3 逗號運算符 279

16.4 類型限定符 279

16.4.1 register限定符 279

16.4.2 volatile限定符 280

16.4.3 restrict限定符 280

16.5 命令行參數 280

16.6 動態內存分配 283

16.6.1 calloc()和malloc()函數 284

16.6.2 sizeof運算符 284

16.6.3 free()函數 286

16.7 練習題 287

第 17章 調試程序 288

17.1 使用預處理器調試 288

17.2 用GDB調試程序 293

17.2.1 處理變量 295

17.2.2 顯示源文件 296

17.2.3 控製程序的執行 296

17.2.4 獲得堆棧信息 300

17.2.5 調用函數以及設置數組和結構體 301

17.2.6 使用GDB命令獲取幫助信息 301

17.2.7 其他 303

第 18章 面向對象程序設計 305

18.1 到底什麽是對象? 305

18.2 實例和方法 306

18.3 編寫一個處理分數的C語言程序 307

18.4 定義一個Objective-C類來處理分數 307

18.5 定義一個C++類來處理分數 311

18.6 定義一個C#類來處理分數 313

附錄A C語言概要 316

A.1 雙字符序列與標識符 316

A.1.1 雙字符序列 316

A.1.2 標識符 316

A.2 註釋 317

A.3 常量 317

A.3.1 整型常量 317

A.3.2 浮點型常量 318

A.3.3 字符型常量 318

A.3.4 字符串常量 319

A.3.5 枚舉常量 319

A.4 數據類型和聲明 320

A.4.1 聲明 320

A.4.2 基本數據類型 320

A.4.3 派生數據類型 321

A.4.4 枚舉數據類型 326

A.4.5 typedef語句 326

A.4.6 類型限定符const、volatile和restrict 327

A.5 表達式 327

A.5.1 C語言運算符總結 328

A.5.2 常量表達式 329

A.5.3 算術運算符 330

A.5.4 邏輯運算符 330

A.5.5 關系運算符 331

A.5.6 位運算符 331

A.5.7 遞增和遞減運算符 331

A.5.8 賦值運算符 332

A.5.9 條件運算符 332

A.5.10 類型轉換運算符 332

A.5.11 sizeof運算符 332

A.5.12 逗號運算符 333

A.5.13 數組的基本操作 333

A.5.14 結構體的基本操作 333

A.5.15 指針的基本操作 334

A.5.16 復合字面量 335

A.5.17 基本數據類型的轉換 335

A.6 存儲類和作用域 336

A.6.1 函數 336

A.6.2 變量 336

A.7 函數 337

A.7.1 函數定義 337

A.7.2 函數調用 338

A.7.3 函數指針 338

A.8 語句 339

A.8.1 復合語句 339

A.8.2 break語句 339

A.8.3 continue語句 339

A.8.4 do語句 339

A.8.5 for語句 339

A.8.6 goto語句 340

A.8.7 if語句 340

A.8.8 空語句 341

A.8.9 return語句 341

A.8.10 switch語句 341

A.8.11 while語句 342

A.9 預處理器 342

A.9.1 三字符組 342

A.9.2 預處理器指令 343

A.9.3 預定義標識符 346

附錄B 標準C語言庫 347

B.1 標準頭文件 347

B.1.1 347

B.1.2 347

B.1.3 348

B.1.4 348

B.1.5 349

B.2 字符串函數 349

B.3 內存函數 351

B.4 字符函數 352

B.5 I/O函數 353

B.6 內存中的格式轉換函數 357

B.7 字符串轉換為數字 358

B.8 動態內存分配函數 359

B.9 數學函數 360

B.10 通用函數 368

附錄C 使用GCC編譯程序 371

C.1 通用命令格式 371

C.2 命令行選項 371

附錄D 常見的程序錯誤 373

附錄E 參考資源 377

E.1 C語言 377

E.1.1 圖書 377

E.1.2 網站 377

E.1.3 網絡論壇 377

E.2 C語言編譯器和集成開發環境 377

E.2.1 GCC 378

E.2.2 MinGW 378

E.2.3 Cygwin 378

E.2.4 Visual Studio 378

E.2.5 CodeWarrior 378

E.2.6 Code::Blocks 378