第Ⅰ篇 基础入门 3
第1章 C语言概述 3
1.1 初学编程首选C语言 3
1.1.1 程序设计语言 3
1.1.2 C语言在计算机领域的地位 3
1.1.3 C语言的特点和应用领域 4
1.1.4 C语言学习路线 4
1.2 快速学会看懂C程序 5
1.2.1 一个简单的C程序 5
1.2.2 C程序的基本结构 6
1.2.3 C程序从编写到运行的过程 8
第2章 C程序开发环境和开发步骤 10
2.1 Windows下开发C程序 10
2.1.1 安装配置运行环境 10
2.1.2 使用Visual Studio 2015编写、运行C程序 16
2.1.3 使用Code::Blocks编写和运行C程序 18
2.2 Linux下开发C程序 19
2.2.1 GCC使用介绍 19
2.2.2 GCC编译C程序 19
2.3 制作我的第一个C程序 21
第Ⅱ篇 基础知识 25
第3章 C语言基本语法 25
3.1 标识符和关键字 25
3.1.1 标识符 25
3.1.2 关键字 25
3.2 数据类型 25
3.2.1 常量 26
3.2.2 变量 29
3.2.3 整型数据 31
3.2.4 实型数据 33
3.2.5 字符型数据 34
3.2.6 数据类型转换 35
3.3 运算符与表达式 38
3.3.1 运算符 38
3.3.2 表达式 39
3.3.3 算术运算符和表达式 39
3.3.4 关系运算符和表达式 40
3.3.5 逻辑运算符和表达式 41
3.3.6 赋值运算符 43
3.3.7 自增、自减运算符 44
3.3.8 逗号运算符 45
3.3.9 条件运算符 46
3.3.10 位运算符 47
3.4 运算符的优先级与结合方向 52
3.4.1 算术运算符的优先级和结合性 52
3.4.2 关系运算符的优先级和结合性 52
3.4.3 逻辑运算符的优先级和结合性 53
3.4.4 赋值运算符的优先级和结合性 53
3.5 综合案例——四则运算计算器 53
3.6 疑难解答 54
第4章 养成良好的编程习惯 56
4.1 C程序的格式 56
4.2 良好的编程风格 57
4.2.1 命名规则 57
4.2.2 程序的版式 59
4.2.3 表达式和基本语句 61
4.2.4 函数 65
4.2.5 内存管理 66
4.2.6 注释 67
第5章 数据的输入和输出 70
5.1 C语句介绍 70
5.2 赋值语句 71
5.3 输入和输出 73
5.3.1 字符输入和输出函数 73
5.3.2 格式输入和输出函数 75
5.4 综合案例——学生基本信息的输入和输出 83
5.5 疑难解答 84
第6章 结构化程序设计 86
6.1 结构化程序开发的过程 86
6.1.1 核心思想 86
6.1.2 流程图 86
6.2 顺序结构程序设计 88
6.3 选择结构程序设计 90
6.3.1 单分支结构语句 90
6.3.2 双分支结构语句 92
6.3.3 多分支结构语句 93
6.3.4 分支语句的嵌套 95
6.3.5 switch选择语句 96
6.4 循环结构程序设计 98
6.4.1 while循环结构与执行流程 98
6.4.2 for循环结构与执行流程 100
6.4.3 do-while循环结构与执行流程 104
6.4.4 循环结构嵌套 106
6.4.5 辅助语句break和continue 107
6.5 综合案例——改良版的计算器 110
6.6 疑难解答 113
第7章 数组 116
7.1 数组概述 116
7.2 一维数组 116
7.2.1 一维数组的定义 116
7.2.2 一维数组的初始化 118
7.2.3 一维数组元素的操作 118
7.2.4 一维数组应用举例 122
7.3 二维数组 125
7.3.1 二维数组的定义 125
7.3.2 二维数组的初始化 127
7.3.3 二维数组元素的操作 127
7.3.4 二维数组应用举例 129
7.3.5 多维数组 131
7.4 字符数组 132
7.4.1 字符数组的定义与初始化 132
7.4.2 字符串和字符串结束标志 134
7.4.3 字符数组的输入与输出 135
7.4.4 字符串处理函数 137
7.4.5 字符数组应用举例 141
7.5 综合案例——加减运算考试程序 142
7.6 疑难解答 144
第8章 模块化设计——函数 146
8.1 为什么使用函数 146
8.2 函数的定义与分类 146
8.2.1 函数的定义 146
8.2.2 函数的分类 147
8.2.3 无参函数 148
8.2.4 有参函数 148
8.3 函数的参数和返回值 149
8.3.1 实参与形参 149
8.3.2 函数的返回值 152
8.4 函数的调用 153
8.4.1 函数原型 154
8.4.2 函数的一般调用 155
8.4.3 函数的嵌套调用 156
8.4.4 函数的递归调用 158
8.5 数组作为函数参数 161
8.5.1 数组元素作为函数参数 161
8.5.2 数组名作为函数参数 162
8.6 变量的作用域 163
8.6.1 局部变量 164
8.6.2 全局变量 164
8.7 变量的存储类别 165
8.7.1 自动变量 165
8.7.2 静态变量 166
8.7.3 寄存器变量 168
8.7.4 外部变量 168
8.8 内部函数和外部函数 169
8.9 综合案例——在给定区间内解方程 171
8.10 疑难解答 172
第Ⅲ篇 进阶提高 177
第9章 内存的快捷方式——指针 177
9.1 指针和地址 177
9.1.1 指针的含义 177
9.1.2 目标单元与间接存取 177
9.2 指针变量 178
9.2.1 定义指针变量 179
9.2.2 引用指针变量 181
9.2.3 指针变量作为函数参数 183
9.3 指针与数组 184
9.3.1 指向数组元素的指针 184
9.3.2 指向数组的指针 185
9.3.3 通过指针引用多维数组 186
9.3.4 指向数组的指针作为函数参数 187
9.4 指针与字符串 188
9.4.1 字符串指针 188
9.4.2 指针访问字符串 190
9.4.3 字符串指针作为函数参数 193
9.5 指针与函数 194
9.5.1 函数指针 194
9.5.2 指针型函数 196
9.5.3 函数指针作为函数参数 197
9.5.4 void指针 199
9.6 指针的指针 200
9.7 使用const修饰指针变量 201
9.8 使用指针的注意事项 202
9.9 综合案例——数值排序 202
9.10 疑难解答 204
第10章 结构体与联合体 206
10.1 结构体的使用场景 206
10.2 结构体类型与结构体变量 206
10.2.1 定义结构体类型 207
10.2.2 结构体变量的定义 208
10.2.3 结构体变量的初始化 210
10.2.4 结构体变量的引用 211
10.2.5 指向结构体变量的指针 213
10.3 结构体数组 215
10.3.1 结构体数组的定义 215
10.3.2 结构体数组的初始化和引用 217
10.3.3 指向结构体数组的指针 219
10.4 结构体与函数 221
10.4.1 结构体作为函数的参数 221
10.4.2 结构体作为函数的返回值 223
10.5 联合体 224
10.5.1 联合体类型 224
10.5.2 联合体变量的定义 225
10.5.3 联合体变量的引用 226
10.6 枚举类型的定义和使用 228
10.7 综合案例——教师基本信息的组织与管理 230
10.8 疑难解答 232
第11章 链表 234
11.1 链表的特点和原理 234
11.1.1 为什么使用链表 234
11.1.2 动态内存分配 235
11.2 链表的定义 238
11.3 单链表的操作 239
11.3.1 创建链表 240
11.3.2 输出链表 242
11.3.3 查找操作 242
11.3.4 插入操作 243
11.3.5 删除操作 245
11.4 综合案例——学生信息管理系统 245
11.5 疑难解答 250
第12章 编译预处理 252
12.1 什么是预处理指令 252
12.2 宏定义 252
12.2.1 变量式宏定义 252
12.2.2 宏定义嵌套 256
12.2.3 宏定义范围 257
12.2.4 函数式宏定义 258
12.2.5 多行宏定义 259
12.3 文件包含 260
12.3.1 什么是文件包含 260
12.3.2 使用文件包含 261
12.3.3 文件包含说明 262
12.4 条件编译 262
12.4.1 条件编译形式 263
12.4.2 调试中使用条件编译 266
12.4.3 文件嵌套包含和条件编译 266
12.5 综合案例——根据月用电量计算用户应缴电费 266
12.6 疑难解答 267
第13章 文件 270
13.1 文件的概念 270
13.1.1 文本流与二进制流 270
13.1.2 文件类型指针 271
13.2 文件的打开和关闭 271
13.3 文件的顺序读写 273
13.3.1 文件读写字符 273
13.3.2 文件读写字符串 275
13.3.3 格式化方式读写文件 278
13.3.4 二进制文件的读写 279
13.4 文件的随机读写 283
13.5 综合案例——对文件进行加解密 285
13.6 疑难解答 288
第14章 常见错误及调试 290
14.1 常见错误的类型 290
14.1.1 语法错误 290
14.1.2 语义错误 293
14.1.3 内存错误 296
14.2 使用Visual Studio 2015调试C程序 299
14.3 使用Code::Blocks调试C程序 301
14.4 常用调试技巧及纠错 304
第Ⅳ篇 高级应用 309
第15章 简单的数据结构 309
15.1 数据结构概述 309
15.2 栈 310
15.2.1 栈的基本运算 310
15.2.2 顺序栈 310
15.2.3 链栈 311
15.2.4 栈的应用 311
15.3 队列 316
15.3.1 队列的基本运算 316
15.3.2 顺序队列 316
15.3.3 链队列 317
15.3.4 队列的应用 317
15.4 树 321
15.4.1 树的基本概念 321
15.4.2 二叉树及其基本性质 322
15.4.3 二叉树的遍历 322
15.5 查找 324
15.5.1 顺序查找 324
15.5.2 折半查找 326
15.5.3 二叉查找树 328
15.6 排序 330
15.6.1 冒泡排序 330
15.6.2 快速排序 331
15.6.3 堆排序 333
15.7 综合案例——利用栈进行数据的遍历、排序等操作 335
15.8 疑难解答 338
第16章 常用算法 340
16.1 算法的概念 340
16.1.1 算法的特征 340
16.1.2 算法设计的基本方法 340
16.1.3 算法的描述 340
16.2 算法复杂度 342
16.2.1 时间复杂度 342
16.2.2 空间复杂度 343
16.3 递归算法及示例 344
16.4 穷举算法及示例 345
16.5 分治算法及示例 346
16.6 贪心算法及示例 348
16.7 动态规划算法及示例 352
第17章 高级编程技术 356
17.1 屏幕文本输出 356
17.1.1 文本方式的控制 356
17.1.2 窗口设置和文本输出 356
17.1.3 清屏和光标控制 359
17.1.4 文本移动和存取 359
17.2 图形编程 361
17.2.1 图形系统初始化 361
17.2.2 基本图形函数 364
17.2.3 颜色函数 370
17.2.4 填充函数 373
17.3 中断 376
17.3.1 编写中断服务程序 376
17.3.2 安装中断服务程序 377
17.3.3 中断服务程序的激活 377
第18章 网络编程 380
18.1 网络基础知识 380
18.1.1 计算机网络 380
18.1.2 TCP/IP协议 380
18.1.3 端口 382
18.1.4 套接字 382
18.2 基于TCP的网络编程 383
18.2.1 服务器端实现 384
18.2.2 客户端实现 384
18.3 基于UDP的网络编程 386
18.3.1 服务器端实现 387
18.3.2 客户端实现 387
第Ⅴ篇 项目实战 393
第19章 停车场收费管理系统 393
19.1 需求分析 393
19.2 概要设计 393
19.2.1 系统目标 393
19.2.2 功能结构 393
19.2.3 数据结构 394
19.3 详细设计 394
19.3.1 主函数模块 395
19.3.2 停车管理模块 397
19.3.3 取车管理模块 399
19.3.4 收费标准管理模块 401
19.3.5 查询统计模块 402
19.4 程序调试及系统测试 407
第20章 小型超市进销存管理系统 410
20.1 需求分析 410
20.2 概要设计 410
20.2.1 系统目标 410
20.2.2 功能结构 410
20.2.3 数据结构 410
20.3 详细设计 412
20.3.1 主函数模块 413
20.3.2 用户管理模块 417
20.3.3 进货管理模块 422
20.3.4 销售管理模块 425
20.3.5 库存管理模块 429
20.3.6 查询统计模块 430
20.4 程序调试及系统测试 433