《C语言程序设计(第4版)》将向你讲解如何使用C程序设计语言来编写程序。无论是新入门的初级程序员,还是经验丰富的资深程序员,都可以在本书的帮助下透彻理解这门语言,它是许多面向对象程序设计语言的基础,比如C++、Objective-C、C#和Java。
《C语言程序设计(第4版)》通过示例来教授C语言,每个新概念都有完整的C程序做演示。作者寇肯逐步解释了所有C函数。你不仅可以学习这门语言的基础知识,还能养成良好的程序设计习惯。每章最后的习题使本书非常适于课堂学习或自学。
《C语言程序设计(第4版)》涵盖了C语言的所有特性,包括C11标准中新增加的内容。附录中详尽总结了C语言和C语言库,两者的组织形式都便于快速参考。
《C语言程序设计(第4版)》全面介绍了C语言的各种特性,包括C11中增加的内容。书中包含大量完整的示例及详细的讲解。论是否拥有编程经验,你都可以通过本书透彻地理解C语言。每章最后附有习题,便于课堂学习或自学。
前言 1
1 基础知识 5
程序设计 5
高级语言 6
操作系统 7
编译程序 7
集成开发环境 10
语言解释器 11
2 编译和运行第一个程序 13
编译程序 14
运行程序 14
理解第一个程序 15
显示变量的值 17
注释 19
练习 21
3 变量、数据类型和算术表达式 23
理解数据类型和常量 23
整数类型int 24
浮点数值类型float 25
扩展精度类型double 26
单字符类型char 26
布尔数据类型_Bool 27
类型说明符:long、long long、short、unsigned和signed 28
使用变量 31
使用算术表达式 33
整数算术及一元减运算符 36
运算与赋值相结合:赋值运算符 42
_Complex和_Imaginary类型 43
练习 43
4 程序循环 45
三角数 45
for语句 46
关系运算符 48
输出的对齐 52
程序输入 53
嵌套for循环 55
for循环的变体 57
while语句 59
do语句 63
break语句 65
continue语句 65
练习 66
5 做出决策 69
if语句 69
if-else构造 73
复合关系测试 76
嵌套if语句 79
else if构造 81
switch语句 88
布尔变量 91
条件运算符 96
练习 97
6 使用数组 101
定义数组 102
以数组元素为计数器 106
生成斐波那契数 109
用数组生成质数 111
初始化数组 113
字符数组 115
使用数组的基数变换 116
const限定符 118
多维数组 120
变长数组 122
练习 124
7 使用函数 127
定义函数 127
参数和局部变量 131
函数原型声明 132
自动局部变量 132
返回函数结果 134
函数调用 139
声明返回类型和参数类型 142
检查函数参数 144
自上而下的程序设计 146
函数与数组 146
赋值运算符 151
数组排序 152
多维数组 155
全局变量 161
自动变量与静态变量 165
递归函数 168
练习 171
8 使用结构体 175
结构体的基础知识 175
用于存储日期的结构体 176
在表达式中使用结构体 178
函数与结构体 181
用于存储时间的结构体 187
初始化结构体 190
复合字面量 191
结构体的数组 192
包含结构体的结构体 196
包含数组的结构体 198
结构体变体 202
练习 203
9 字符串 205
复习字符串的基础知识 205
字符数组 206
变长字符串 209
字符串的初始化与显示 211
判断两个字符串是否相等 214
输入字符串 216
单字符输入 219
空字符串 224
转义字符 228
再论常量字符串 230
字符串、结构体和数组 231
一种更好的搜索方法 235
字符操作 240
练习 243
10 指针 247
指针和间接性 247
定义指针变量 248
在表达式中使用指针 252
使用指针和结构体 253
包含指针的结构体 256
链表 258
关键字const和指针 266
指针和函数 267
指针和数组 273
稍许离题:程序优化 277
是数组还是指针? 278
指向字符串的指针 280
常量字符串和指针 282
递增和递减运算符回顾 283
指针操作 287
指向函数的指针 288
指针和内存地址 289
练习 291
11 位运算 295
位的基础知识 295
位运算符 297
按位与运算符 297
按位或运算符 300
按位异或运算符 301
二进制求补运算符 301
左移运算符 304
右移运算符 304
移位函数 305
循环移位 307
位段 309
练习 314
12 预处理器 317
#define语句 317
程序可扩展性 322
程序可移植性 323
更高级的定义类型 324
#运算符 330
##运算符 331
#include语句 332
系统包含文件 335
条件编译 335
#ifdef、#endif、#else和#ifndef语句 336
#if和#elif预处理器语句 338
#undef语句 339
练习 339
13 用枚举数据类型、类型定义和数据类型转换扩展数据类型 341
枚举数据类型 341
typedef语句 345
数据类型转换 348
符号扩展 350
参数转换 350
练习 351
14 处理大型程序 353
将程序分为多个文件 353
由命令行编译多个源文件 354
模块之间的通信 356
外部变量 357
静态、动态变量与函数 359
有效使用头文件 362
其他处理大型程序的实用工具 364
make实用工具 364
cvs实用工具 366
Unix实用工具:ar、grep、sed等 366
15 C语言中的输入与输出操作 369
字符I/O:getchar()和putchar() 369
格式化I/O:printf()和scanf() 370
printf()函数 370
scanf()函数 377
文件输入与输出操作 382
将I/O重定向到文件 382
文件尾 385
处理文件的特殊函数 386
fopen函数 387
getc()和putc()函数 389
fclose()函数 389
feof函数 391
fprintf()和fscanf()函数 392
fgets()和fputs()函数 392
stdin、stdout和stderr 393
exit()函数 394
重命名和删除文件 395
练习 396
16 其他及高级特性 397
其他语言语句 397
goto语句 397
空语句 398
使用联合体 399
逗号运算符 402
类型限定符 403
register限定符 403
volatile限定符 403
restrict限定符 404
命令行参数 404
动态内存分配 408
calloc()和malloc()函数 409
sizeof运算符 410
free函数 413
练习 414
17 调试程序 415
用预处理器调试 415
用gdb调试程序 422
处理变量 425
源文件显示 426
控制程序的执行 427
获得栈轨迹 432
调试函数,设置数组和结构体 432
用gdb命令获取帮助 433
杂项 435
18 面向对象程序设计 437
到底什么是对象? 437
实例与方法 438
编写一个处理分数的C程序 440
定义一个处理分数的Objective-C类 441
定义一个处理分数的C++类 446
定义一个处理分数的C#类 448
附录A C语言概要 453
1.0 双字符组和标识符 453
2.0 注释 454
3.0 常量 455
4.0 数据类型和声明 458
5.0 表达式 469
6.0 存储类和作用域 482
7.0 函数 483
8.0 语句 486
9.0 预处理器 490
附录B 标准C语言库 497
标准头文件 497
字符串函数 500
内存函数 502
字符函数 503
I/O函数 503
内存中的格式转换函数 509
字符串转换为数字 510
动态内存分配函数 512
数学函数 513
复数运算 519
通用函数 521
附录C 用gcc编译程序 525
通用命令格式 525
命令行选项 526
附录D 常见编程错误 527
附录E 资源 533
C程序设计语言 533
C编译器和集成开发环境 534
其他 535目录
前言 1
1 基础知识 5
程序设计 5
高级语言 6
操作系统 7
编译程序 7
集成开发环境 10
语言解释器 11
2 编译和运行第一个程序 13
编译程序 14
运行程序 14
理解第一个程序 15
显示变量的值 17
注释 19
练习 21
3 变量、数据类型和算术表达式 23
理解数据类型和常量 23
整数类型int 24
浮点数值类型float 25
扩展精度类型double 26
单字符类型char 26
布尔数据类型_Bool 27
类型说明符:long、long long、short、unsigned和signed 28
使用变量 31
使用算术表达式 33
整数算术及一元减运算符 36
运算与赋值相结合:赋值运算符 42
_Complex和_Imaginary类型 43
练习 43
4 程序循环 45
三角数 45
for语句 46
关系运算符 48
输出的对齐 52
程序输入 53
嵌套for循环 55
for循环的变体 57
while语句 59
do语句 63
break语句 65
continue语句 65
练习 66
5 做出决策 69
if语句 69
if-else构造 73
复合关系测试 76
嵌套if语句 79
else if构造 81
switch语句 88
布尔变量 91
条件运算符 96
练习 97
6 使用数组 101
定义数组 102
以数组元素为计数器 106
生成斐波那契数 109
用数组生成质数 111
初始化数组 113
字符数组 115
使用数组的基数变换 116
const限定符 118
多维数组 120
变长数组 122
练习 124
7 使用函数 127
定义函数 127
参数和局部变量 131
函数原型声明 132
自动局部变量 132
返回函数结果 134
函数调用 139
声明返回类型和参数类型 142
检查函数参数 144
自上而下的程序设计 146
函数与数组 146
赋值运算符 151
数组排序 152
多维数组 155
全局变量 161
自动变量与静态变量 165
递归函数 168
练习 171
8 使用结构体 175
结构体的基础知识 175
用于存储日期的结构体 176
在表达式中使用结构体 178
函数与结构体 181
用于存储时间的结构体 187
初始化结构体 190
复合字面量 191
结构体的数组 192
包含结构体的结构体 196
包含数组的结构体 198
结构体变体 202
练习 203
9 字符串 205
复习字符串的基础知识 205
字符数组 206
变长字符串 209
字符串的初始化与显示 211
判断两个字符串是否相等 214
输入字符串 216
单字符输入 219
空字符串 224
转义字符 228
再论常量字符串 230
字符串、结构体和数组 231
一种更好的搜索方法 235
字符操作 240
练习 243
10 指针 247
指针和间接性 247
定义指针变量 248
在表达式中使用指针 252
使用指针和结构体 253
包含指针的结构体 256
链表 258
关键字const和指针 266
指针和函数 267
指针和数组 273
稍许离题:程序优化 277
是数组还是指针? 278
指向字符串的指针 280
常量字符串和指针 282
递增和递减运算符回顾 283
指针操作 287
指向函数的指针 288
指针和内存地址 289
练习 291
11 位运算 295
位的基础知识 295
位运算符 297
按位与运算符 297
按位或运算符 300
按位异或运算符 301
二进制求补运算符 301
左移运算符 304
右移运算符 304
移位函数 305
循环移位 307
位段 309
练习 314
12 预处理器 317
#define语句 317
程序可扩展性 322
程序可移植性 323
更高级的定义类型 324
#运算符 330
##运算符 331
#include语句 332
系统包含文件 335
条件编译 335
#ifdef、#endif、#else和#ifndef语句 336
#if和#elif预处理器语句 338
#undef语句 339
练习 339
13 用枚举数据类型、类型定义和数据类型转换扩展数据类型 341
枚举数据类型 341
typedef语句 345
数据类型转换 348
符号扩展 350
参数转换 350
练习 351
14 处理大型程序 353
将程序分为多个文件 353
由命令行编译多个源文件 354
模块之间的通信 356
外部变量 357
静态、动态变量与函数 359
有效使用头文件 362
其他处理大型程序的实用工具 364
make实用工具 364
cvs实用工具 366
Unix实用工具:ar、grep、sed等 366
15 C语言中的输入与输出操作 369
字符I/O:getchar()和putchar() 369
格式化I/O:printf()和scanf() 370
printf()函数 370
scanf()函数 377
文件输入与输出操作 382
将I/O重定向到文件 382
文件尾 385
处理文件的特殊函数 386
fopen函数 387
getc()和putc()函数 389
fclose()函数 389
feof函数 391
fprintf()和fscanf()函数 392
fgets()和fputs()函数 392
stdin、stdout和stderr 393
exit()函数 394
重命名和删除文件 395
练习 396
16 其他及高级特性 397
其他语言语句 397
goto语句 397
空语句 398
使用联合体 399
逗号运算符 402
类型限定符 403
register限定符 403
volatile限定符 403
restrict限定符 404
命令行参数 404
动态内存分配 408
calloc()和malloc()函数 409
sizeof运算符 410
free函数 413
练习 414
17 调试程序 415
用预处理器调试 415
用gdb调试程序 422
处理变量 425
源文件显示 426
控制程序的执行 427
获得栈轨迹 432
调试函数,设置数组和结构体 432
用gdb命令获取帮助 433
杂项 435
18 面向对象程序设计 437
到底什么是对象? 437
实例与方法 438
编写一个处理分数的C程序 440
定义一个处理分数的Objective-C类 441
定义一个处理分数的C++类 446
定义一个处理分数的C#类 448
附录A C语言概要 453
1.0 双字符组和标识符 453
2.0 注释 454
3.0 常量 455
4.0 数据类型和声明 458
5.0 表达式 469
6.0 存储类和作用域 482
7.0 函数 483
8.0 语句 486
9.0 预处理器 490
附录B 标准C语言库 497
标准头文件 497
字符串函数 500
内存函数 502
字符函数 503
I/O函数 503
内存中的格式转换函数 509
字符串转换为数字 510
动态内存分配函数 512
数学函数 513
复数运算 519
通用函数 521
附录C 用gcc编译程序 525
通用命令格式 525
命令行选项 526
附录D 常见编程错误 527
附录E 资源 533
C程序设计语言 533
C编译器和集成开发环境 534
其他 535
★“对于任何开始学习使用C语言编写程序的人来说,这本书绝对都是最好的。这是一本优秀的入门教科书,拥有丰富的示例、出色的文字……我就是用这本书来学习C语言的——这是一本很棒的书。”
——Vinit S. Carpenter,Learn C/C++ Today