第1章 C语言程序设计概念 1
1.1 C语言程序概念 1
1.1.1 C语言程序入门实例 1
1.1.2 C语言程序组成要素 3
1.2 算法与程序设计方法学 4
1.2.1 算法的概念 4
1.2.2 算法设计原则 7
1.2.3 算法设计的基本方法和策略 7
1.2.4 一般编程步骤 7
1.3 习题 9
第2章 C语言快速入门 10
2.1 标示符命名规则 10
2.2 数据类型、变量和常量 10
2.2.1 数据类型 11
2.2.2 常量的使用 12
2.2.3 变量的定义和使用 13
2.2.4 类型长度运算符 14
2.2.5 类型重定义 15
2.3 运算符和表达式 15
2.3.1 赋值运算符 15
2.3.2 算术运算符 17
2.3.3 增量运算符 18
2.3.4 关系运算符 19
2.3.5 逻辑运算符 20
2.3.6 复合赋值运算符 21
2.3.7 表达式求值过程 22
2.3.8 表达式的数据类型及类型转换 23
2.3.9 逗号表达式 24
2.4 基本输入输出 24
2.4.1 格式化输出 25
2.4.2 格式化输入 27
2.5 过程控制结构 28
2.5.1 语句概述 28
2.5.2 结构化程序设计 29
2.6 顺序结构 29
2.7 选择结构 30
2.7.1 基本选择结构 31
2.7.2 条件运算符 32
2.7.3 多分支选择结构 33
2.8 循环结构 35
2.8.1 for循环结构 36
2.8.2 while循环语句 37
2.8.3 循环辅助语句 38
2.8.4 goto语句 39
2.9 函数的定义与使用 40
2.10 数据存储特性 46
2.10.1 变量修饰符 46
2.10.2 变量的作用域 48
2.10.3 变量的生存期 48
2.11 预处理指令 50
2.11.1 宏定义指令 50
2.11.2 文件包含指令 51
2.12 穷举法程序设计 51
2.13 穷举法求解逻辑推理问题 54
2.14 习题 58
2.14.1 语法练习 58
2.14.2 编程练习 64
第3章 基本程序设计 68
3.1 选择结构程序设计 68
3.1.1 条件语句基本编程模式 68
3.1.2 浮点数的相等性比较 70
3.1.3 条件选择语句的嵌套 72
3.1.4 嵌套条件语句与多分支语句的比较 76
3.2 循环结构程序设计 78
3.2.1 3种基本循环结构的比较 78
3.2.2 循环嵌套 80
3.3 综合编程实例 83
3.4 基本数论算法 89
3.4.1 整数与整除 89
3.4.2 素数 89
3.4.3 最大公约数和最小公倍数 91
3.5 穷举法求解数论的相关问题 94
3.6 递推与迭代算法Ⅰ 98
3.7 习题 104
第4章 数组 108
4.1 一维数组 108
4.1.1 定义格式 108
4.1.2 一维数组的使用 110
4.2 二维及多维数组 113
4.2.1 定义格式 113
4.2.2 二维数组初始化 114
4.2.3 二维数组的使用 114
4.3 数组作为函数参数 118
4.3.1 数组元素作函数参数 118
4.3.2 一维数组名作为函数参数 119
4.3.3 二维数组作函数参数 127
4.4 程序阅读与理解 129
4.5 数据统计程序设计 132
4.6 排序算法程序设计 134
4.6.1 数据的有序插入算法 134
4.6.2 插入排序 135
4.6.3 选择排序 137
4.6.4 冒泡排序 139
4.7 查找算法程序设计 141
4.7.1 顺序查找算法 141
4.7.2 二分查找算法 141
4.8 集合运算程序设计 143
4.8.1 集合的表示 143
4.8.2 求两个集合的并集算法 143
4.8.3 求两个集合的交集算法 145
4.9 矩阵程序设计 147
4.9.1 矩阵乘法 147
4.9.2 矩阵鞍点 147
4.9.3 螺旋矩阵 150
4.9.4 魔方矩阵 153
4.10 递推与迭代算法Ⅱ 155
4.11 习题 161
4.11.1 填空题 161
4.11.2 编程问题 163
第5章 指针 168
5.1 指针的概念 168
5.1.1 指针和内存地址 168
5.1.2 指针变量的定义 170
5.1.3 变量取地址运算 170
5.1.4 间接寻址(取内容运算) 171
5.1.5 指针变量赋值、加减及比较运算 172
5.2 指针与数组的关系 175
5.2.1 指针与一维数组 175
5.2.2 指针与多维数组 177
5.3 指针数组与多级指针 180
5.3.1 指针数组 180
5.3.2 多级指针 181
5.4 动态存储分配 183
5.4.1 malloc函数与free函数 184
5.4.2 动态内存分配实现可变长数组 184
5.4.3 动态内存分配实现二维数组 187
5.5 指针作为函数参数 190
5.6 返回值为指针的函数 193
5.7 指向函数的指针 195
5.7.1 问题的提出 195
5.7.2 指向函数的指针 197
5.8 void型指针 199
5.8.1 void指针概念 199
5.8.2 用void指针实现通用排序程序 200
5.9 习题 203
5.9.1 语法练习 203
5.9.2 编程练习 205
第6章 字符串 206
6.1 字符数据 206
6.1.1 字符常量 206
6.1.2 转义字符 206
6.1.3 字符型变量 207
6.1.4 字符的输入与输出 208
6.2 字符串 209
6.2.1 字符串概念及其常量 209
6.2.2 字符串的存储 209
6.2.3 字符串的结束标志 210
6.3 字符串的表示 210
6.3.1 用一维数组表示字符串 210
6.3.2 用指针表示字符串变量 211
6.3.3 两种表示的区别 212
6.4 字符串数组 214
6.4.1 用字符型二维数组表示字符串数组 215
6.4.2 用字符型指针数组表示字符串数组 215
6.5 字符串的输入和输出 216
6.5.1 字符串的输入 216
6.5.2 字符串的输出 217
6.6 字符串的基本运算 218
6.6.1 字符串操作的基本库函数 218
6.6.2 几个基本运算的实现 223
6.7 字符串应用举例 225
6.7.1 字符串插入 225
6.7.2 字符串逆置 227
6.7.3 数制转换 228
6.7.4 整数转换成字符串 229
6.7.5 单词分离 231
6.8 大整数的数学运算 233
6.8.1 大整数的表示 233
6.8.2 大整数的算术运算 234
6.8.3 大整数的应用 240
6.9 习题 242
第7章 结构体、链表与文件系统7.1 结构体 245
7.1.1 问题的提出 245
7.1.2 结构体类型说明及变量定义 245
7.1.3 结构体变量的使用 249
7.1.4 结构体与函数 250
7.2 联合体 252
7.2.1 类型说明、变量定义及成员引用 252
7.2.2 联合体变量的特点 253
7.3 枚举类型 253
7.4 链表 255
7.4.1 链表概念 256
7.4.2 链表的基本运算 258
7.4.3 链表的插入排序 263
7.4.4 链表的倒置 267
7.4.5 其他类型链表 268
7.5 文件系统 269
7.5.1 文件系统的使用方式 269
7.5.2 文件的打开和关闭 269
7.5.3 文件的读/写 271
7.5.4 文件定位操作 276
7.6 习题 279
第8章 位处理 282
8.1 整数的计算机表示 282
8.2 位运算符 283
8.2.1 位逻辑运算 283
8.2.2 移位运算 285
8.2.3 位运算赋值运算符 285
8.3 位域 286
8.3.1 位域的定义 286
8.3.2 位域的使用 287
8.4 位运算的应用 288
8.4.1 位运算实现整数值的交换 288
8.4.2 二进制GCD算法 288
8.4.3 均匀二分查找 290
8.5 习题 291
第9章 算法设计策略 293
9.1 函数的递归调用 293
9.1.1 函数调用原理 293
9.1.2 递归调用 294
9.2 分治算法设计策略 299
9.3 回溯算法设计策略 302
9.4 习题 305
第10章 程序调试 308
10.1 语法错误 308
10.1.1 常见语法错误的英语解释 308
10.1.2 常见语法错误 308
10.2 连接错误 314
10.3 逻辑算法错误 315
10.3.1 调试方法 315
10.3.2 算法错误调试举例 315
10.3.3 常见逻辑错误举例 318
10.3.4 调试方法总结 320
10.4 运行错误 321
附录 322
附录A 运算符的优先级 322
附录B ASCII表 323
附录C C语言主要标准库函数 324
参考文献 329