第O章 引言 1
第1章 C程序的创建及其基本结构 7
1.1 C程序的创建过程 7
1.2 C程序的基本组成 9
1.3 调试初步——语法错误的定位 14
1.4 数据的输入/输出和标准文件 17
习题 18
第2章 常量、变量和表达式 19
2.1 常量 19
2.1.1 数字常量 19
2.1.2 字符常量 21
2.1.3 字符串字面量 22
2.2 变量 23
2.2.1 变量名和变量类型 23
2.2.2 变量的赋值和类型转换 25
2.2.3 变量的初始化 26
2.2.4 类型限定符const 26
2.3 算术表达式 26
2.3.1 算术运算符 27
2.3.2 增量和减量运算符 29
2.3.3 位运算 29
2.3.4 复合赋值运算符 30
2.4 强制类型转换 31
2.5 数据输出/输入函数printf()和scanf() 34
2.5.1 数值的输出函数printf 34
2.5.2 数值的输入函数scanf 35
2.6 常量的符号表示方法 37
2.6.1 常量宏 37
2.6.2 枚举常量 38
习题 39
第3章 条件语句和开关语句 42
3.1 关系运算符和逻辑运算符 42
3.2 运算符的优先级 44
3.3 从实际问题中的条件到逻辑表达式 45
3.4 条件语句 46
3.4.1 条件语句中的条件 46
3.4.2 复合语句 47
3.4.3 条件语句的嵌套和级联 48
3.4.4 使用条件语句时的注意事项 51
3.4.5 条件运算符和条件表达式 53
3.5 switch语句 53
习题 56
第4章 循环语句和goto语句 59
4.1 while语句 59
4.2 for语句 61
4.3 do while语句 65
4.4 循环语句的选择和使用 67
4.5 逗号表达式 67
4.6 循环语句的嵌套 68
4.7 循环语句中的非常规控制 71
4.8 goto语句 74
习题 75
第5章 函数 78
5.1 函数的基本概念 78
5.2 函数的调用 79
5.3 函数的结构 82
5.4 函数的定义 83
5.5 函数的调用关系和返回值 87
5.6 局部变量和全局变量 88
5.6.1 局部变量 88
5.6.2 全局变量 90
5.6.3 对全局变量的访问 91
5.7 函数参数的传递 92
5.8 标准库函数 93
5.8.1 常用的头文件 93
5.8.2 常用的数据输入/输出函数 94
5.8.3 字符类型判断函数 96
5.8.4 字符串处理函数 97
5.8.5 其他常用函数 98
5.9 递归初步 99
习题 102
第6章 数组 104
6.1 一维数组 104
6.1.1 一维数组的定义和初始化 104
6.1.2 一维数组元素的使用 106
6.1.3 数组的复制 109
6.1.4 作为函数参数的一维数组 109
6.1.5 数组元素的排序和查找 112
6.2 使用一维数组的常用数据结构 116
6.2.1 散列表 116
6.2.2 栈 118
6.2.3 队 120
6.3 字符串和字符数组 123
6.3.1 字符串 123
6.3.2 字符数组 124
6.4 常用的标准字符串函数 125
6.4.1 字符串输出函数 125
6.4.2 字符串输入函数 127
6.4.3 字符串复制和追加函数 129
6.4.4 字符串比较函数 130
6.4.5 字符串检查函数 131
6.4.6 字符串扫描函数sscanf() 132
6.5 二维数组 133
6.5.1 二维数组的定义 133
6.5.2 二维数组元素的引用 134
6.5.3 二维数组元素的遍历 135
6.5.4 二维数组元素的排列方式 135
6.5.5 作为参数的二维数组 137
习题 140
第7章 指针初步 143
7.1 地址与指针 143
7.2 指针变量 144
7.2.1 指针变量的定义和赋值 144
7.2.2 通过指针访问数据 145
7.2.3 作为函数参数的指针 147
7.2.4 返回指针的函数 149
7.3 指针运算 150
7.3.1 指针与整数的加减 150
7.3.2 指针相减 152
7.3.3 指针的比较 152
7.3.4 指针的强制类型转换和void 155
7.3.5 不合法的指针运算 156
7.3.6 指针类型与数组类型的差异 156
7.4 指针与数组 157
7.5 指向二维数组的指针 158
7.6 多重指针 160
7.7 指针数组 161
7.7.1 一维指针数组 161
7.7.2 命令行参数 163
7.8 函数指针 164
7.8.1 函数指针变量的定义 164
7.8.2 具有函数指针参数的库函数 165
习题 168
第8章 程序设计的基本方法 171
8.1 程序设计的基本过程 171
8.2 问题分析 172
8.2.1 程序功能和输入/输出数据 172
8.2.2 对程序性能的要求 174
8.2.3 程序中的错误处理 174
8.2.4 程序的测试 174
8.2.5 问题分析的结果 175
8.3 方案设计 176
8.3.1 解题思路 177
8.3.2 算法的描述 178
8.3.3 数据结构和算法的选择 182
8.4 编码:从算法到代码 187
8.4.1 代码的结构 188
8.4.2 代码的检查 194
8.4.3 代码中的注释 195
8.5 程序的调试 195
8.5.1 调试的基本方法 196
8.5.2 调试工具的基本功能和使用 197
8.5.3 标准输入/输出的重新定向 198
习题 200
第9章 结构和联合 202
9.1 结构(struct) 202
9.1.1 结构类型的定义 202
9.1.2 结构成员的访问 204
9.1.3 包含结构的结构 207
9.2 联合(union) 209
9.2.1 联合类型的定义 210
9.2.2 联合成员的访问 210
9.3 类型定义(typedef)语句 214
9.4 复杂类型的解读 216
习题 217
第10章 输入/输出和文件 220
10.1 输入/输出的基本过程和文件类型 220
10.2 文件的打开、创建和关闭 221
10.3 文件数据的正文格式读写 223
10.4 读写操作中的定位 226
10.5 文件数据的二进制格式读写 229
习题 231
附录A 不同版本的C语言标准之间的主要区别 234
附录B vi/vim的常用命令 236
附录C 使用MS VC++6.0 IDE创建C程序的基本过程 237
附录D cc/gcc的常用命令行选项 242
附录E 常用的标准库函数名及其头文件 243
附录F ASCII编码 245
附录G 调试工具GDB的常用命令 246
参考文献和推荐书目 247