第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
B.1.2
B.1.3
B.1.4
B.1.5
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