《C語言程序設(shè)計(jì)(第4版)》全面介紹了C語言的各種特性,包括C11中增加的內(nèi)容。書中包含大量完整的示例及詳細(xì)的講解。論是否擁有編程經(jīng)驗(yàn),你都可以通過本書透徹地理解C語言。每章最后附有習(xí)題,便于課堂學(xué)習(xí)或自學(xué)。
《C語言程序設(shè)計(jì)(第4版)》將向你講解如何使用C程序設(shè)計(jì)語言來編寫程序。無論是新入門的初級(jí)程序員,還是經(jīng)驗(yàn)豐富的資深程序員,都可以在本書的幫助下透徹理解這門語言,它是許多面向?qū)ο蟪绦蛟O(shè)計(jì)語言的基礎(chǔ),比如C++、Objective-C、C#和Java。
《C語言程序設(shè)計(jì)(第4版)》通過示例來教授C語言,每個(gè)新概念都有完整的C程序做演示。作者寇肯逐步解釋了所有C函數(shù)。你不僅可以學(xué)習(xí)這門語言的基礎(chǔ)知識(shí),還能養(yǎng)成良好的程序設(shè)計(jì)習(xí)慣。每章最后的習(xí)題使本書非常適于課堂學(xué)習(xí)或自學(xué)。
《C語言程序設(shè)計(jì)(第4版)》涵蓋了C語言的所有特性,包括C11標(biāo)準(zhǔn)中新增加的內(nèi)容。附錄中詳盡總結(jié)了C語言和C語言庫,兩者的組織形式都便于快速參考。
賈洪峰 ,職稱:工程師,是某大學(xué)計(jì)算機(jī)新科學(xué)系的講師,他長(zhǎng)期鉆研編程語言與程序設(shè)計(jì),目前為止,他已有多本翻譯著作問世。
前言 1
1 基礎(chǔ)知識(shí) 5
程序設(shè)計(jì) 5
高級(jí)語言 6
操作系統(tǒng) 7
編譯程序 7
集成開發(fā)環(huán)境 10
語言解釋器 11
2 編譯和運(yùn)行第一個(gè)程序 13
編譯程序 14
運(yùn)行程序 14
理解第一個(gè)程序 15
顯示變量的值 17
注釋 19
練習(xí) 21
3 變量、數(shù)據(jù)類型和算術(shù)表達(dá)式 23
理解數(shù)據(jù)類型和常量 23
整數(shù)類型int 24
浮點(diǎn)數(shù)值類型float 25
擴(kuò)展精度類型double 26
單字符類型char 26
布爾數(shù)據(jù)類型_Bool 27
類型說明符:long、long long、short、unsigned和signed 28
使用變量 31
使用算術(shù)表達(dá)式 33
整數(shù)算術(shù)及一元減運(yùn)算符 36
運(yùn)算與賦值相結(jié)合:賦值運(yùn)算符 42
_Complex和_Imaginary類型 43
練習(xí) 43
4 程序循環(huán) 45
三角數(shù) 45
for語句 46
關(guān)系運(yùn)算符 48
輸出的對(duì)齊 52
程序輸入 53
嵌套for循環(huán) 55
for循環(huán)的變體 57
while語句 59
do語句 63
break語句 65
continue語句 65
練習(xí) 66
5 做出決策 69
if語句 69
if-else構(gòu)造 73
復(fù)合關(guān)系測(cè)試 76
嵌套if語句 79
else if構(gòu)造 81
switch語句 88
布爾變量 91
條件運(yùn)算符 96
練習(xí) 97
6 使用數(shù)組 101
定義數(shù)組 102
以數(shù)組元素為計(jì)數(shù)器 106
生成斐波那契數(shù) 109
用數(shù)組生成質(zhì)數(shù) 111
初始化數(shù)組 113
字符數(shù)組 115
使用數(shù)組的基數(shù)變換 116
const限定符 118
多維數(shù)組 120
變長(zhǎng)數(shù)組 122
練習(xí) 124
7 使用函數(shù) 127
定義函數(shù) 127
參數(shù)和局部變量 131
函數(shù)原型聲明 132
自動(dòng)局部變量 132
返回函數(shù)結(jié)果 134
函數(shù)調(diào)用 139
聲明返回類型和參數(shù)類型 142
檢查函數(shù)參數(shù) 144
自上而下的程序設(shè)計(jì) 146
函數(shù)與數(shù)組 146
賦值運(yùn)算符 151
數(shù)組排序 152
多維數(shù)組 155
全局變量 161
自動(dòng)變量與靜態(tài)變量 165
遞歸函數(shù) 168
練習(xí) 171
8 使用結(jié)構(gòu)體 175
結(jié)構(gòu)體的基礎(chǔ)知識(shí) 175
用于存儲(chǔ)日期的結(jié)構(gòu)體 176
在表達(dá)式中使用結(jié)構(gòu)體 178
函數(shù)與結(jié)構(gòu)體 181
用于存儲(chǔ)時(shí)間的結(jié)構(gòu)體 187
初始化結(jié)構(gòu)體 190
復(fù)合字面量 191
結(jié)構(gòu)體的數(shù)組 192
包含結(jié)構(gòu)體的結(jié)構(gòu)體 196
包含數(shù)組的結(jié)構(gòu)體 198
結(jié)構(gòu)體變體 202
練習(xí) 203
9 字符串 205
復(fù)習(xí)字符串的基礎(chǔ)知識(shí) 205
字符數(shù)組 206
變長(zhǎng)字符串 209
字符串的初始化與顯示 211
判斷兩個(gè)字符串是否相等 214
輸入字符串 216
單字符輸入 219
空字符串 224
轉(zhuǎn)義字符 228
再論常量字符串 230
字符串、結(jié)構(gòu)體和數(shù)組 231
一種更好的搜索方法 235
字符操作 240
練習(xí) 243
10 指針 247
指針和間接性 247
定義指針變量 248
在表達(dá)式中使用指針 252
使用指針和結(jié)構(gòu)體 253
包含指針的結(jié)構(gòu)體 256
鏈表 258
關(guān)鍵字const和指針 266
指針和函數(shù) 267
指針和數(shù)組 273
稍許離題:程序優(yōu)化 277
是數(shù)組還是指針? 278
指向字符串的指針 280
常量字符串和指針 282
遞增和遞減運(yùn)算符回顧 283
指針操作 287
指向函數(shù)的指針 288
指針和內(nèi)存地址 289
練習(xí) 291
11 位運(yùn)算 295
位的基礎(chǔ)知識(shí) 295
位運(yùn)算符 297
按位與運(yùn)算符 297
按位或運(yùn)算符 300
按位異或運(yùn)算符 301
二進(jìn)制求補(bǔ)運(yùn)算符 301
左移運(yùn)算符 304
右移運(yùn)算符 304
移位函數(shù) 305
循環(huán)移位 307
位段 309
練習(xí) 314
12 預(yù)處理器 317
#define語句 317
程序可擴(kuò)展性 322
程序可移植性 323
更高級(jí)的定義類型 324
#運(yùn)算符 330
##運(yùn)算符 331
#include語句 332
系統(tǒng)包含文件 335
條件編譯 335
#ifdef、#endif、#else和#ifndef語句 336
#if和#elif預(yù)處理器語句 338
#undef語句 339
練習(xí) 339
13 用枚舉數(shù)據(jù)類型、類型定義和數(shù)據(jù)類型轉(zhuǎn)換擴(kuò)展數(shù)據(jù)類型 341
枚舉數(shù)據(jù)類型 341
typedef語句 345
數(shù)據(jù)類型轉(zhuǎn)換 348
符號(hào)擴(kuò)展 350
參數(shù)轉(zhuǎn)換 350
練習(xí) 351
14 處理大型程序 353
將程序分為多個(gè)文件 353
由命令行編譯多個(gè)源文件 354
模塊之間的通信 356
外部變量 357
靜態(tài)、動(dòng)態(tài)變量與函數(shù) 359
有效使用頭文件 362
其他處理大型程序的實(shí)用工具 364
make實(shí)用工具 364
cvs實(shí)用工具 366
Unix實(shí)用工具:ar、grep、sed等 366
15 C語言中的輸入與輸出操作 369
字符I/O:getchar()和putchar() 369
格式化I/O:printf()和scanf() 370
printf()函數(shù) 370
scanf()函數(shù) 377
文件輸入與輸出操作 382
將I/O重定向到文件 382
文件尾 385
處理文件的特殊函數(shù) 386
fopen函數(shù) 387
getc()和putc()函數(shù) 389
fclose()函數(shù) 389
feof函數(shù) 391
fprintf()和fscanf()函數(shù) 392
fgets()和fputs()函數(shù) 392
stdin、stdout和stderr 393
exit()函數(shù) 394
重命名和刪除文件 395
練習(xí) 396
16 其他及高級(jí)特性 397
其他語言語句 397
goto語句 397
空語句 398
使用聯(lián)合體 399
逗號(hào)運(yùn)算符 402
類型限定符 403
register限定符 403
volatile限定符 403
restrict限定符 404
命令行參數(shù) 404
動(dòng)態(tài)內(nèi)存分配 408
calloc()和malloc()函數(shù) 409
sizeof運(yùn)算符 410
free函數(shù) 413
練習(xí) 414
17 調(diào)試程序 415
用預(yù)處理器調(diào)試 415
用gdb調(diào)試程序 422
處理變量 425
源文件顯示 426
控制程序的執(zhí)行 427
獲得棧軌跡 432
調(diào)試函數(shù),設(shè)置數(shù)組和結(jié)構(gòu)體 432
用gdb命令獲取幫助 433
雜項(xiàng) 435
18 面向?qū)ο蟪绦蛟O(shè)計(jì) 437
到底什么是對(duì)象? 437
實(shí)例與方法 438
編寫一個(gè)處理分?jǐn)?shù)的C程序 440
定義一個(gè)處理分?jǐn)?shù)的Objective-C類 441
定義一個(gè)處理分?jǐn)?shù)的C++類 446
定義一個(gè)處理分?jǐn)?shù)的C#類 448
附錄A C語言概要 453
1.0 雙字符組和標(biāo)識(shí)符 453
2.0 注釋 454
3.0 常量 455
4.0 數(shù)據(jù)類型和聲明 458
5.0 表達(dá)式 469
6.0 存儲(chǔ)類和作用域 482
7.0 函數(shù) 483
8.0 語句 486
9.0 預(yù)處理器 490
附錄B 標(biāo)準(zhǔn)C語言庫 497
標(biāo)準(zhǔn)頭文件 497
字符串函數(shù) 500
內(nèi)存函數(shù) 502
字符函數(shù) 503
I/O函數(shù) 503
內(nèi)存中的格式轉(zhuǎn)換函數(shù) 509
字符串轉(zhuǎn)換為數(shù)字 510
動(dòng)態(tài)內(nèi)存分配函數(shù) 512
數(shù)學(xué)函數(shù) 513
復(fù)數(shù)運(yùn)算 519
通用函數(shù) 521
附錄C 用gcc編譯程序 525
通用命令格式 525
命令行選項(xiàng) 526
附錄D 常見編程錯(cuò)誤 527
附錄E 資源 533
C程序設(shè)計(jì)語言 533
C編譯器和集成開發(fā)環(huán)境 534
其他 535目錄
前言 1
1 基礎(chǔ)知識(shí) 5
程序設(shè)計(jì) 5
高級(jí)語言 6
操作系統(tǒng) 7
編譯程序 7
集成開發(fā)環(huán)境 10
語言解釋器 11
2 編譯和運(yùn)行第一個(gè)程序 13
編譯程序 14
運(yùn)行程序 14
理解第一個(gè)程序 15
顯示變量的值 17
注釋 19
練習(xí) 21
3 變量、數(shù)據(jù)類型和算術(shù)表達(dá)式 23
理解數(shù)據(jù)類型和常量 23
整數(shù)類型int 24
浮點(diǎn)數(shù)值類型float 25
擴(kuò)展精度類型double 26
單字符類型char 26
布爾數(shù)據(jù)類型_Bool 27
類型說明符:long、long long、short、unsigned和signed 28
使用變量 31
使用算術(shù)表達(dá)式 33
整數(shù)算術(shù)及一元減運(yùn)算符 36
運(yùn)算與賦值相結(jié)合:賦值運(yùn)算符 42
_Complex和_Imaginary類型 43
練習(xí) 43
4 程序循環(huán) 45
三角數(shù) 45
for語句 46
關(guān)系運(yùn)算符 48
輸出的對(duì)齊 52
程序輸入 53
嵌套for循環(huán) 55
for循環(huán)的變體 57
while語句 59
do語句 63
break語句 65
continue語句 65
練習(xí) 66
5 做出決策 69
if語句 69
if-else構(gòu)造 73
復(fù)合關(guān)系測(cè)試 76
嵌套if語句 79
else if構(gòu)造 81
switch語句 88
布爾變量 91
條件運(yùn)算符 96
練習(xí) 97
6 使用數(shù)組 101
定義數(shù)組 102
以數(shù)組元素為計(jì)數(shù)器 106
生成斐波那契數(shù) 109
用數(shù)組生成質(zhì)數(shù) 111
初始化數(shù)組 113
字符數(shù)組 115
使用數(shù)組的基數(shù)變換 116
const限定符 118
多維數(shù)組 120
變長(zhǎng)數(shù)組 122
練習(xí) 124
7 使用函數(shù) 127
定義函數(shù) 127
參數(shù)和局部變量 131
函數(shù)原型聲明 132
自動(dòng)局部變量 132
返回函數(shù)結(jié)果 134
函數(shù)調(diào)用 139
聲明返回類型和參數(shù)類型 142
檢查函數(shù)參數(shù) 144
自上而下的程序設(shè)計(jì) 146
函數(shù)與數(shù)組 146
賦值運(yùn)算符 151
數(shù)組排序 152
多維數(shù)組 155
全局變量 161
自動(dòng)變量與靜態(tài)變量 165
遞歸函數(shù) 168
練習(xí) 171
8 使用結(jié)構(gòu)體 175
結(jié)構(gòu)體的基礎(chǔ)知識(shí) 175
用于存儲(chǔ)日期的結(jié)構(gòu)體 176
在表達(dá)式中使用結(jié)構(gòu)體 178
函數(shù)與結(jié)構(gòu)體 181
用于存儲(chǔ)時(shí)間的結(jié)構(gòu)體 187
初始化結(jié)構(gòu)體 190
復(fù)合字面量 191
結(jié)構(gòu)體的數(shù)組 192
包含結(jié)構(gòu)體的結(jié)構(gòu)體 196
包含數(shù)組的結(jié)構(gòu)體 198
結(jié)構(gòu)體變體 202
練習(xí) 203
9 字符串 205
復(fù)習(xí)字符串的基礎(chǔ)知識(shí) 205
字符數(shù)組 206
變長(zhǎng)字符串 209
字符串的初始化與顯示 211
判斷兩個(gè)字符串是否相等 214
輸入字符串 216
單字符輸入 219
空字符串 224
轉(zhuǎn)義字符 228
再論常量字符串 230
字符串、結(jié)構(gòu)體和數(shù)組 231
一種更好的搜索方法 235
字符操作 240
練習(xí) 243
10 指針 247
指針和間接性 247
定義指針變量 248
在表達(dá)式中使用指針 252
使用指針和結(jié)構(gòu)體 253
包含指針的結(jié)構(gòu)體 256
鏈表 258
關(guān)鍵字const和指針 266
指針和函數(shù) 267
指針和數(shù)組 273
稍許離題:程序優(yōu)化 277
是數(shù)組還是指針? 278
指向字符串的指針 280
常量字符串和指針 282
遞增和遞減運(yùn)算符回顧 283
指針操作 287
指向函數(shù)的指針 288
指針和內(nèi)存地址 289
練習(xí) 291
11 位運(yùn)算 295
位的基礎(chǔ)知識(shí) 295
位運(yùn)算符 297
按位與運(yùn)算符 297
按位或運(yùn)算符 300
按位異或運(yùn)算符 301
二進(jìn)制求補(bǔ)運(yùn)算符 301
左移運(yùn)算符 304
右移運(yùn)算符 304
移位函數(shù) 305
循環(huán)移位 307
位段 309
練習(xí) 314
12 預(yù)處理器 317
#define語句 317
程序可擴(kuò)展性 322
程序可移植性 323
更高級(jí)的定義類型 324
#運(yùn)算符 330
##運(yùn)算符 331
#include語句 332
系統(tǒng)包含文件 335
條件編譯 335
#ifdef、#endif、#else和#ifndef語句 336
#if和#elif預(yù)處理器語句 338
#undef語句 339
練習(xí) 339
13 用枚舉數(shù)據(jù)類型、類型定義和數(shù)據(jù)類型轉(zhuǎn)換擴(kuò)展數(shù)據(jù)類型 341
枚舉數(shù)據(jù)類型 341
typedef語句 345
數(shù)據(jù)類型轉(zhuǎn)換 348
符號(hào)擴(kuò)展 350
參數(shù)轉(zhuǎn)換 350
練習(xí) 351
14 處理大型程序 353
將程序分為多個(gè)文件 353
由命令行編譯多個(gè)源文件 354
模塊之間的通信 356
外部變量 357
靜態(tài)、動(dòng)態(tài)變量與函數(shù) 359
有效使用頭文件 362
其他處理大型程序的實(shí)用工具 364
make實(shí)用工具 364
cvs實(shí)用工具 366
Unix實(shí)用工具:ar、grep、sed等 366
15 C語言中的輸入與輸出操作 369
字符I/O:getchar()和putchar() 369
格式化I/O:printf()和scanf() 370
printf()函數(shù) 370
scanf()函數(shù) 377
文件輸入與輸出操作 382
將I/O重定向到文件 382
文件尾 385
處理文件的特殊函數(shù) 386
fopen函數(shù) 387
getc()和putc()函數(shù) 389
fclose()函數(shù) 389
feof函數(shù) 391
fprintf()和fscanf()函數(shù) 392
fgets()和fputs()函數(shù) 392
stdin、stdout和stderr 393
exit()函數(shù) 394
重命名和刪除文件 395
練習(xí) 396
16 其他及高級(jí)特性 397
其他語言語句 397
goto語句 397
空語句 398
使用聯(lián)合體 399
逗號(hào)運(yùn)算符 402
類型限定符 403
register限定符 403
volatile限定符 403
restrict限定符 404
命令行參數(shù) 404
動(dòng)態(tài)內(nèi)存分配 408
calloc()和malloc()函數(shù) 409
sizeof運(yùn)算符 410
free函數(shù) 413
練習(xí) 414
17 調(diào)試程序 415
用預(yù)處理器調(diào)試 415
用gdb調(diào)試程序 422
處理變量 425
源文件顯示 426
控制程序的執(zhí)行 427
獲得棧軌跡 432
調(diào)試函數(shù),設(shè)置數(shù)組和結(jié)構(gòu)體 432
用gdb命令獲取幫助 433
雜項(xiàng) 435
18 面向?qū)ο蟪绦蛟O(shè)計(jì) 437
到底什么是對(duì)象? 437
實(shí)例與方法 438
編寫一個(gè)處理分?jǐn)?shù)的C程序 440
定義一個(gè)處理分?jǐn)?shù)的Objective-C類 441
定義一個(gè)處理分?jǐn)?shù)的C++類 446
定義一個(gè)處理分?jǐn)?shù)的C#類 448
附錄A C語言概要 453
1.0 雙字符組和標(biāo)識(shí)符 453
2.0 注釋 454
3.0 常量 455
4.0 數(shù)據(jù)類型和聲明 458
5.0 表達(dá)式 469
6.0 存儲(chǔ)類和作用域 482
7.0 函數(shù) 483
8.0 語句 486
9.0 預(yù)處理器 490
附錄B 標(biāo)準(zhǔn)C語言庫 497
標(biāo)準(zhǔn)頭文件 497
字符串函數(shù) 500
內(nèi)存函數(shù) 502
字符函數(shù) 503
I/O函數(shù) 503
內(nèi)存中的格式轉(zhuǎn)換函數(shù) 509
字符串轉(zhuǎn)換為數(shù)字 510
動(dòng)態(tài)內(nèi)存分配函數(shù) 512
數(shù)學(xué)函數(shù) 513
復(fù)數(shù)運(yùn)算 519
通用函數(shù) 521
附錄C 用gcc編譯程序 525
通用命令格式 525
命令行選項(xiàng) 526
附錄D 常見編程錯(cuò)誤 527
附錄E 資源 533
C程序設(shè)計(jì)語言 533
C編譯器和集成開發(fā)環(huán)境 534
其他 535