第1章 初识C语言 1
1.1 C语言与贝尔实验室 1
1.2 C程序的开发步骤 2
1.3 使用VC++开发环境 4
1.3.1 配置VC++6.0 5
1.3.2 使用VC++6.0的步骤 7
1.4 C语言的地位 10
1.5 小结 11
习题1 11
第2章 C程序的基本结构 13
2.1 用函数封装代码 13
2.1.1 问题的提出 13
2.1.2 函数封装代码的思想 15
2.2 C程序的基本结构 16
2.2.1 基本结构 16
2.2.2 main函数 16
2.2.3 源文件的结构 18
2.3 编程风格 20
2.3.1 Allmans风格 20
2.3.2 Kernighan风格 21
2.3.3 注释 21
2.4 小结 21
习题2 21
第3章 标识符与基本数据类型 23
3.1 标识符与关键字 23
3.1.1 标识符 23
3.1.2 关键字 24
3.2 变量与内存 25
3.2.1 了解内存 25
3.2.2 为变量分配内存 25
3.2.3 为变量赋值 25
3.2.4 使用变量的基本原则 27
3.3 整型类型 28
3.3.1 整型常量 28
3.3.2 int型变量 29
3.3.3 shott型变量 33
3.3.4 long型变量 34
3.3.5 无符号整型变量 34
3.4 浮点类型 37
3.4.1 浮点型常量 37
3.4.2 float型变量 38
3.4.3 double型变量 42
3.5 字符型 43
3.5.1 字符常量 43
3.5.2 char型变量 44
3.6 常量 46
3.6.1 字面常量 46
3.6.2 符号常量 46
3.6.3 const常量 47
3.7 数据转换 48
3.8 变量的地址和大小 49
3.9 输出数据 51
3.9.1 printf函数 51
3.9.2 putchar函数 53
3.10 输入数据 54
3.10.1 scanf函数 54
3.10.2 getchar函数 58
3.11 小结 60
习题3 60
第4章 运算符、表达式与语句 63
4.1 运算符概述 63
4.2 算术运算符与算术表达式 64
4.3 赋值运算符与赋值表达式 65
4.4 自增、自减运算符 66
4.5 关系运算符与关系表达式 69
4.6 逻辑运算符与逻辑表达式 71
4.7 类型转换运算符 72
4.8 逗号运算符 73
4.9 运算符与表达式小结 74
4.10 语句 75
4.11 小结 76
习题4 77
第5章 分支语句 80
5.1 if条件分支语句 80
5.2 if-else条件分支语句 85
5.3 if-else if-else条件分支语句 90
5.4 switch开关语句 93
5.5 条件运算符 95
5.6 exit函数与程序的输入错误 96
5.7 小结 97
习题5 97
第6章 循环语句 101
6.1 while循环语句 101
6.2 do-while循环语句 109
6.3 for循环语句 111
6.4 break和continue语句 115
6.5 循环嵌套 116
6.6 小结 118
习题6 118
第7章 函数的结构与调用 123
7.1 函数概述 123
7.2 有关函数的重要术语 124
7.2.1 函数头 124
7.2.2 函数原型 124
7.2.3 函数定义 125
7.3 无参函数与有参函数的定义 127
7.3.1 无参函数的定义 127
7.3.2 有参函数的定义 127
7.4 函数的类型与return语句 128
7.4.1 基本类型 128
7.4.2 void型 130
7.5 函数的调用与参数传值 131
7.5.1 调用无参数函数 132
7.5.2 调用有参数函数 132
7.6 函数封装代码的思想 135
7.7 函数的递归调用 138
7.7.1 递归调用的发生 138
7.7.2 递归的应用 139
7.7.3 递归的缺点 142
7.8 局部变量与全局变量 143
7.8.1 局部变量 143
7.8.2 全局变量 144
7.9 变量的存储方式 147
7.9.1 局部变量 147
7.9.2 全局变量 149
7.10 限制全局变量的有效范围 149
7.11 小结 149
习题7 150
第8章 数组 154
8.1 一维数组 154
8.1.1 一维数组的定义 154
8.1.2 一维数组的结构 155
8.1.3 一维数组的使用 157
8.1.4 怎样获取一维数组的长度 158
8.1.5 一维数组的初始化 159
8.1.6 避免下标越界 160
8.2 数组名作参数 161
8.2.1 一个重要的结论 161
8.2.2 形参与数组 162
8.3 起泡法 164
8.4 二维数组 167
8.4.1 二维数组的定义 167
8.4.2 二维数组的结构 168
8.4.3 二维数组的初始化 169
8.4.4 二维数组的使用 169
8.5 const数组 171
8.6 综合举例 173
8.6.1 选择排序法 173
8.6.2 折半法 174
8.6.3 存储并输出杨辉三角形 176
8.6.4 计算矩阵的乘积 177
8.7 小结 178
习题8 178
第9章 指针 181
9.1 概述 181
9.2 指针变量 182
9.2.1 指针变量的声明 182
9.2.2 指针变量与取地址运算符 183
9.3 指针访问所指向的变量 184
9.3.1 间接访问运算符 184
9.3.2 间接访问与直接访问 184
9.3.3 注意事项 185
9.4 指针的加减运算 186
9.4.1 指针递增 186
9.4.2 指针递减 187
9.4.3 两个指针作减法 187
9.4.4 指针自增(自减)的重要结论 188
9.5 指针作参数 188
9.5.1 函数的原型与实现 188
9.5.2 传递变量的值 190
9.5.3 传递变量的地址 190
9.6 指针与函数之间的交互 192
9.7 指向指针的指针 193
9.8 const指针 194
9.9 综合举例 195
9.10 小结 196
习题9 196
第10章 指针与数组 199
10.1 指向数组元素的指针 199
10.2 数组名与间接访问运算符 201
10.2.1 数组名的自增、自减运算 201
10.2.2 间接访问运算符作用于数组名 202
10.3 指针作参数访问数组 203
10.4 指针与下标运算 204
10.5 指针与二维数组 205
10.5.1 指向二维数组元素的指针 205
10.5.2 二维数组的名字与间接访问运算符 206
10.6 指针数组 207
10.7 指向行的指针 209
10.8 综合举例 210
10.8.1 旋转数组 210
10.8.2 围圈留一 212
10.9 小结 213
习题10 213
第11章 指针与函数 216
11.1 函数的入口地址与指针变量 216
11.1.1 函数的入口地址 216
11.1.2 指向函数的指针变量 217
11.2 指向函数的指针作参数 219
11.3 让函数更易维护 220
11.3.1 显示广告词的函数 221
11.3.2 间接调用的好处 222
11.4 返回地址的函数 222
11.5 指针的分类 224
11.6 小结 225
习题11 225
第12章 处理字符串 228
12.1 字符串常量 228
12.2 char型数组与字符串 229
12.2.1 字符数组及初始化 230
12.2.2 puts函数与gets函数 232
12.3 指针与字符串 233
12.4 复制字符串 234
12.5 连接字符串 235
12.6 比较字符串 236
12.7 检索字符串 237
12.8 字符串转换为数字 240
12.9 综合举例 241
12.9.1 统计单词 241
12.9.2 排序字符串 242
12.9.3 输出商品列表 243
12.9.4 将字符串转换为整数 246
12.9.5 加密字符串 247
12.10 小结 248
习题12 248
第13章 结构体、共用体与枚举 252
13.1 结构体类型与结构体变量 252
13.1.1 描述商品信息 252
13.1.2 结构体类型 253
13.1.3 结构体变量 253
13.1.4 访问结构体变量的成员 255
13.1.5 结构体变量的赋值操作 256
13.2 使用typedef关键字 256
13.3 指针与结构体变量 257
13.3.1 指向结构体变量的指针 257
13.3.2 通过指针访问结构体变量的成员 258
13.4 结构体变量的初始化 259
13.5 结构体数组 260
13.6 结构体的嵌套 261
13.7 结构体与函数 261
13.8 共用体 262
13.8.1 共用体类型与共用体类型变量 263
13.8.2 共用体类型变量的特点 263
13.8.3 通过指针访问共用体变量的成员 264
13.9 枚举 265
13.9.1 定义枚举类型 265
13.9.2 声明枚举变量 265
13.10 综合举例 266
13.11 小结 268
习题13 268
第14章 读写文件 271
14.1 什么是文件 271
14.1.1 二进制文件 271
14.1.2 文本文件 272
14.2 打开与关闭文件 273
14.2.1 FILE指针 273
14.2.2 打开文件 273
14.2.3 关闭文件 274
14.3 读写文本文件 274
14.3.1 按文本方式打开文件 274
14.3.2 按文本方式读文件 275
14.3.3 按文本方式写文件 277
14.4 读写二进制文件 279
14.4.1 按二进制方式打开文件 279
14.4.2 按二进制方式写文件 280
14.4.3 按二进制方式读文件 281
14.5 读写位置与随机读写 283
14.5.1 rewind和ftell函数 283
14.5.2 fseek函数 284
14.6 复制文件 285
14.7 综合举例 286
14.7.1 标准化考试 286
14.7.2 保存商品信息 287
14.7.3 加密、解密文件 289
14.8 小结 290
习题14 290
第15章 链表 293
15.1 初识链表 293
15.2 链表与节点 294
15.2.1 空链表 295
15.2.2 链表的节点 295
15.2.3 创建一个简单的链表 296
15.3 头插法创建链表 297
15.4 尾插法创建链表 299
15.5 链表的插入操作 300
15.6 链表的删除操作 303
15.7 综合举例 305
15.7.1 旋转链表 305
15.7.2 围圈留一 308
15.8 小结 309
习题15 309
第16章 预处理指令 310
16.1 宏指令 310
16.1.1 不带参数的宏指令 310
16.1.2 带参数的宏指令 311
16.2 文件包含指令 312
16.2.1 包含源文件 313
16.2.2 包含头文件 314
16.2.3 math.h和time.h 314
16.3 条件编译指令 317
16.3.1 #ifdef条件编译指令 317
16.3.2 #ifndef条件编译指令 318
16.3.3 #if常量表达式 319
16.4 小结 320
习题16 320
第17章 位运算 323
17.1 位运算符和位运算 323
17.1.1 “按位与”运算符 324
17.1.2 “按位或”运算符 325
17.1.3 “按位非”运算符 325
17.1.4 “按位异或”运算符 326
17.1.5 左移位运算符 327
17.1.6 右移位运算符 327
17.2 位段 328
17.2.1 结构体与位段 328
17.2.2 隔开位段 329
17.3 小结 330
习题17 330
附录A 标准ASCⅡ表 332
附录B 运算符表 333
附录C math与string库函数 334
参考文献 336