第1篇 C语言入门篇 1
第1章 C语言与程序概述 1
1.1 C语言的历史沿革 1
1.1.1 C语言的诞生 1
1.1.2 C语言的发展历程 2
1.1.3 C语言的特点 2
1.1.4 第一个C程序——Hello, world! 3
1.2 数据结构与算法 4
1.2.1 什么是数据结构 4
1.2.2 什么是算法 6
1.3 程序设计概述 7
1.3.1 结构化程序设计 7
1.3.2 三种基本结构 8
1.3.3 算法描述方法 9
1.4 小结 11
1.5 习题 11
第2章 C语言编程准备 14
2.1 C程序简介 14
2.1.1 简单C程序示例 14
2.1.2 C程序的特点 16
2.1.3 标识符与关键字 16
2.1.4 C程序的执行步骤 17
2.2 C程序开发环境 18
2.2.1 Turbo C 18
2.2.2 Visual C++ 2017 20
2.2.3 GCC 3.2.2 21
2.3 小结 22
2.4 习题 22
第2篇 C语言基础篇 25
第3章 常量与变量 25
3.1 常量和变量概述 25
3.1.1 常量 25
3.1.2 变量 26
3.2 变量的使用 27
3.2.1 声明变量 27
3.2.2 定义变量 28
3.2.3 使用extern声明变量 28
3.2.4 变量赋值及初始化 29
3.2.5 地址操作符和指针操作符 30
3.3 格式化输入/输出 31
3.3.1 标准输出函数——printf函数 32
3.3.2 标准输入函数——scanf函数 32
3.4 数据类型简介 33
3.5 小结 34
3.6 习题 34
第4章 基本数据类型 37
4.1 整型数据类型 37
4.1.1 字节长度 37
4.1.2 符号修饰符 38
4.1.3 整型常量 38
4.1.4 整型变量 39
4.1.5 存储方式 40
4.1.6 数值范围 41
4.2 字符型数据类型 44
4.2.1 字节长度 44
4.2.2 字符常量 44
4.2.3 字符变量 46
4.2.4 存储方式 47
4.3 浮点型数据类型 47
4.3.1 字节长度 47
4.3.2 浮点型常量 48
4.3.3 浮点型变量 48
4.3.4 精度 49
4.3.5 数值范围 50
4.3.6 存储方式 51
4.4 用户自定义类型 53
4.4.1 typedef的标准形式 53
4.4.2 合理使用typedef 54
4.5 限定词const与volatile 55
4.5.1 使用const 55
4.5.2 使用volatile 56
4.6 小结 57
4.7 习题 57
第5章 表达式与操作符 61
5.1 表达式和语句 61
5.1.1 表达式 61
5.1.2 语句 63
5.1.3 复合语句 63
5.1.4 C语言的操作符 65
5.2 赋值操作符与赋值表达式 66
5.2.1 赋值操作符 66
5.2.2 赋值操作符的结合性 66
5.2.3 左值和右值 67
5.2.4 隐式类型转换 68
5.2.5 强制类型转换 69
5.3 运算操作符与运算表达式 71
5.3.1 运算操作符 71
5.3.2 符号操作符 72
5.3.3 优先级与结合性 73
5.3.4 数值运算中的类型转换 75
5.3.5 复合赋值操作符 76
5.4 自增、自减操作符 77
5.4.1 自增操作符 78
5.4.2 自减操作符 79
5.4.3 优先级与结合性 80
5.4.4 自增、自减操作符的编译过程 81
5.4.5 注意事项 83
5.5 关系操作符与关系表达式 84
5.5.1 关系操作符 84
5.5.2 关系表达式的值 86
5.5.3 优先级与结合性 87
5.6 逻辑操作符与逻辑表达式 88
5.6.1 逻辑操作符 88
5.6.2 逻辑表达式的值 89
5.6.3 优先级和结合性 89
5.6.4 逻辑表达式 90
5.7 逗号操作符与逗号表达式 91
5.7.1 逗号操作符 91
5.7.2 逗号表达式的值 92
5.8 操作符优先级和结合性 92
5.8.1 优先级和结合性 92
5.8.2 优先级的改变 94
5.8.3 注意事项 96
5.9 小结 97
5.10 习题 97
第3篇 结构编程篇 101
第6章 选择结构 101
6.1 if语句 101
6.1.1 if语句的基本形式 101
6.1.2 else和if的配对使用 104
6.1.3 选择结构中的不平等分支 105
6.1.4 条件表达式中的=与== 106
6.2 switch语句 107
6.2.1 switch语句的基本形式 107
6.2.2 break语句 108
6.2.3 else if语句和switch语句 110
6.2.4 switch中的标号 111
6.2.5 使用具名常量组成标号 113
6.3 条件操作符与条件表达式 114
6.3.1 条件操作符的基本形式 114
6.3.2 条件表达式与if-else 115
6.3.3 条件表达式中的类型转换 115
6.3.4 条件表达式的嵌套 116
6.4 逻辑表达式的隐式选择 116
6.4.1 逻辑表达式的特点 117
6.4.2 隐式选择的作用 117
6.4.3 巧用隐式选择 119
6.5 小结 120
6.6 习题 120
第7章 循环结构 124
7.1 for语句 124
7.1.1 for语句的基本形式 124
7.1.2 for头中的三个表达式 124
7.1.3 for头中的逗号表达式 126
7.1.4 for语句的嵌套 127
7.1.5 for语句示例 127
7.2 while语句 129
7.2.1 while语句的基本形式 129
7.2.2 while语句与for语句 129
7.2.3 while语句示例 131
7.3 do-while语句 133
7.3.1 do-while语句的基本形式 133
7.3.2 do-while语句与while语句 133
7.3.3 do-while语句示例 134
7.4 continue语句与break语句 136
7.4.1 continue语句 136
7.4.2 continue语句与if语句 137
7.4.3 break语句 138
7.4.4 使用break语句终止多层循环 138
7.5 goto语句 140
7.5.1 goto语句的基本形式 140
7.5.2 使用goto语句构成循环 141
7.5.3 注意事项 141
7.6 循环结构与选择结构的嵌套 144
7.6.1 if-while与while-if 144
7.6.2 使用选择结构包含循环结构 144
7.7 小结 146
7.8 习题 146
第4篇 数组和字符串篇 149
第8章 数组 149
8.1 一维数组 149
8.1.1 定义一维数组 149
8.1.2 访问一维数组元素 150
8.1.3 初始化一维数组 151
8.1.4 数组的存储形式 153
8.1.5 注意事项 154
8.1.6 一维数组示例 155
8.2 二维数组 158
8.2.1 定义二维数组 158
8.2.2 访问二维数组元素 158
8.2.3 二维数组的存储方式 160
8.2.4 初始化二维数组 160
8.2.5 二维数组示例 162
8.3 多维数组 163
8.3.1 定义多维数组 164
8.3.2 多维数组示例 164
8.4 小结 165
8.5 习题 166
第9章 字符串 170
9.1 字符数组 170
9.1.1 字符数组的定义 170
9.1.2 字符数组的初始化 172
9.1.3 二维字符数组 172
9.1.4 字符数组示例 174
9.2 字符串类型 176
9.2.1 字符串常量 177
9.2.2 字符串变量 178
9.2.3 格式化输出字符串 179
9.2.4 格式化输入字符串 180
9.3 字符串应用示例 181
9.3.1 取字符串长度 181
9.3.2 统计单词数 182
9.3.3 颠倒单词顺序 183
9.3.4 改进的颠倒单词顺序实现 184
9.4 小结 186
9.5 习题 187
第5篇 函数篇 191
第10章 函数 191
10.1 函数概述 191
10.1.1 模块化编程 191
10.1.2 定义函数 194
10.1.3 调用函数 195
10.1.4 函数使用示例 196
10.1.5 改进的算术运算函数 197
10.2 函数声明 198
10.2.1 声明的形式 199
10.2.2 声明与定义 199
10.3 函数值与形参列表 200
10.3.1 函数值类型 200
10.3.2 形参列表 202
10.3.3 函数返回值 203
10.3.4 const形参 206
10.4 函数体 207
10.4.1 函数体的变量定义 207
10.4.2 检查形参 208
10.4.3 return语句 209
10.5 main函数 210
10.5.1 main函数的声明 210
10.5.2 函数值类型 211
10.5.3 带参数的main函数 211
10.6 小结 214
10.7 习题 214
第11章 函数与文件 220
11.1 多文件的程序 220
11.1.1 文件的类型 220
11.1.2 C工程的组织结构 221
11.1.3 一个简单的多文件工程 222
11.2 实现多文件工程 224
11.2.1 Turbo C下实现多文件工程 224
11.2.2 Visual C++ 2017下实现多文件工程 224
11.2.3 GCC 3.2.2 下实现多文件工程 225
11.3 函数的调用 225
11.3.1 嵌套调用 225
11.3.2 递归调用 226
11.3.3 递归调用示例 228
11.4 外部函数与内部函数 231
11.4.1 外部函数 231
11.4.2 内部函数 232
11.4.3 应用示例 233
11.5 小结 235
11.6 习题 235
第12章 函数中的变量 239
12.1 生存期和作用域 239
12.1.1 变量的生存期 239
12.1.2 变量的作用域 240
12.2 局部变量和全局变量 242
12.2.1 局部变量 242
12.2.2 全局变量 244
12.2.3 初始化全局变量 245
12.2.4 合理使用全局变量 246
12.2.5 注意事项 248
12.3 变量的存储类别 250
12.3.1 内存存储区 250
12.3.2 auto变量 251
12.3.3 static变量 252
12.3.4 register变量 254
12.3.5 extern变量 254
12.4 小结 255
12.5 习题 256
第13章 字符串处理函数 259
13.1 输入/输出函数 259
13.1.1 字符输入/输出函数 259
13.1.2 字符串输入/输出函数 260
13.2 复制和拼接函数 261
13.2.1 字符串复制函数 261
13.2.2 字符串拼接函数 263
13.3 比较和转换函数 264
13.3.1 字符串比较函数 264
13.3.2 字符串转换函数 266
13.4 小结 267
13.5 习题 267
第6篇 指针篇 270
第14章 指针 270
14.1 指针概述 270
14.1.1 访问内存的两种方式 270
14.1.2 指针的概念 271
14.1.3 指针变量的定义 271
14.2 指针的使用 272
14.2.1 指针变量的赋值 272
14.2.2 将指针变量赋值为整数 275
14.2.3 初始化指针变量 276
14.2.4 const指针 277
14.3 指针与函数 277
14.3.1 指针形参 278
14.3.2 指针型函数 280
14.3.3 函数型指针 281
14.4 void型指针 282
14.5 小结 283
14.6 习题 284
第15章 再论指针 287
15.1 指针与数组 287
15.1.1 指向数组元素的指针 287
15.1.2 指针访问数组 287
15.1.3 数组指针和数组变量 289
15.1.4 数组指针作为函数形参 291
15.1.5 调用含数组形参的函数 292
15.2 指针与二维数组 293
15.2.1 二维数组的地址 293
15.2.2 指针法访问二维数组 296
15.2.3 二维数组形参 297
15.3 指针与字符 301
15.3.1 字符指针 301
15.3.2 字符指针应用示例 303
15.3.3 字符指针数组 305
15.4 小结 306
15.5 习题 306
第7篇 高级应用篇 311
第16章 堆管理 311
16.1 动态内存管理 311
16.1.1 分配内存空间 311
16.1.2 释放内存空间 312
16.2 其他分配函数 313
16.2.1 calloc函数 313
16.2.2 realloc函数 314
16.3 动态数组 315
16.4 小结 317
16.5 习题 317
第17章 位运算操作符 320
17.1 位运算概述 320
17.2 位运算操作符语法 321
17.2.1 取反操作符(~) 321
17.2.2 位或操作符(|) 322
17.2.3 位与操作符(&) 324
17.2.4 异或操作符(^) 326
17.2.5 右移操作符(>>) 328
17.2.6 左移操作符(<<) 329
17.2.7 位运算赋值操作符 331
17.3 位运算操作符使用示例 332
17.3.1 循环移位 332
17.3.2 使用子网掩码 333
17.4 小结 334
17.5 习题 334
第18章 结构体 337
18.1 初识结构体 337
18.1.1 声明结构体类型 337
18.1.2 定义结构体变量 338
18.1.3 结构体的存储形式 339
18.2 结构体的应用 341
18.2.1 访问结构体成员 341
18.2.2 初始化结构体变量 342
18.2.3 结构体变量的赋值 343
18.3 结构体数组 345
18.3.1 定义结构体数组 345
18.3.2 初始化结构体数组 346
18.3.3 结构体数组示例 347
18.4 结构体指针 348
18.4.1 指向结构体变量的指针 348
18.4.2 指向堆空间的结构体指针 349
18.4.3 指向结构体数组元素的指针 350
18.5 小结 351
18.6 习题 351
第19章 共用体、枚举和位域 355
19.1 共用体 355
19.1.1 声明共用体类型 355
19.1.2 定义共用体变量 356
19.2 枚举 357
19.2.1 声明枚举类型 357
19.2.2 使用枚举变量 359
19.3 位域 361
19.3.1 位域的概念 361
19.3.2 位域的字长 361
19.3.3 位域的存储形式 363
19.4 小结 364
19.5 习题 365
第20章 预处理 368
20.1 宏定义 368
20.2 宏对象 369
20.2.1 定义宏对象 369
20.2.2 替换字符串 370
20.2.3 说明形参属性 372
20.2.4 宏的作用域 372
20.2.5 标准宏对象 373
20.3 宏函数 373
20.3.1 定义宏函数 373
20.3.2 宏函数与函数 374
20.4 条件编译 376
20.4.1 #ifdef命令 376
20.4.2 #ifndef命令 378
20.4.3 #if命令 379
20.4.4 defined宏函数 380
20.5 文件包含 381
20.5.1 #include命令 381
20.5.2 注意事项 382
20.6 小结 383
20.7 习题 383
第8篇 综合案例篇 386
第21章 图书管理系统开发实例 386
21.1 需求分析 386
21.2 系统设计 386
21.2.1 概要设计 386
21.2.2 数据结构 387
21.3 主程序——main模块 388
21.4 用户界面模块 389
21.4.1 程序流程 389
21.4.2 代码实现 389
21.4.3 设计主界面 390
21.4.4 设计增加书籍菜单 391
21.4.5 设计删除书籍菜单 392
21.4.6 设计检索书籍菜单 393
21.4.7 设计导入书籍菜单 393
21.4.8 退出系统 394
21.5 日志模块 394
21.5.1 打开和关闭文件 394
21.5.2 文件的格式化读写 394
21.5.3 打开和关闭日志文件 395
21.5.4 记录日志 395
21.6 数据管理模块 396
21.6.1 处理时间数据 397
21.6.2 处理书籍数据 397
21.6.3 增加书籍 399
21.6.4 删除书籍 399
21.6.5 查询书籍 400
21.6.6 导入书籍数据 400
21.7 小结 401