第1部分 C语言基础 1
第1课 初识C语言 1
1.1 C语言发展简史 1
1.2 为何要使用C语言 1
1.3 准备编程 2
1.4 程序开发周期 3
1.4.1 创建源代码 3
1.4.2 使用编辑器 3
1.4.3 编译源代码 4
1.4.4 链接以创建可执行文件 4
1.4.5 完成开发周期 5
1.5 第1个C程序 6
1.5.1 输入并编译hello.c 7
1.5.2 编译错误 8
1.5.3 链接器错误消息 9
1.6 小 结 9
1.7 答疑 9
1.8 课后研习 10
1.8.1 小测验 10
1.8.2 练习题 11
第2课 C程序的组成部分 12
2.1 简短的C程序 12
2.2 程序的组成部分 13
2.2.1 main()函数 13
2.2.2 #include和#define指令 13
2.2.3 变量定义 14
2.2.4 函数原型 14
2.2.5 程序语句 14
2.2.6 函数定义 15
2.2.7 程序的注释 15
2.2.8 使用花括号 16
2.2.9 运行程序 16
2.2.10 补充说明 16
2.3 学以致用 17
2.4 小结 18
2.5 答疑 19
2.6 课后研习 19
2.6.1 小测验 19
2.6.2 练习题 19
第3课 储存信息:变量和常量 21
3.1 计算机的内存 21
3.2 用变量储存信息 22
3.3 数值类型 23
3.3.1 变量声明 26
3.3.2 typedef关键字 26
3.3.3 初始化变量 26
3.4 常 量 27
3.4.1 字面常量 27
3.4.2 符号常量 28
3.5 小 结 31
3.6 答疑 32
3.7 课后研习 32
3.7.1 小测验 32
3.7.2 练习题 33
第4课 语句、表达式和运算符 34
4.1 语 句 34
4.1.1 在语句中留白 34
4.1.2 创建空语句 35
4.1.3 复合语句 35
4.2 理解表达式 36
4.2.1 简单表达式 36
4.2.2 复杂表达式 36
4.3 运算符 37
4.3.1 赋值运算符 37
4.3.2 数学运算符 37
4.3.3 运算符优先级和圆括号 41
4.3.4 子表达式的计算顺序 43
4.3.5 关系运算符 43
4.4 if语句 44
4.5 对关系表达式求值 49
4.6 逻辑运算符 51
4.7 详议真/假值 52
4.7.1 运算符的优先级 52
4.7.2 复合赋值运算符 54
4.7.3 条件运算符 54
4.7.4 逗号运算符 55
4.8 运算符优先级归纳 55
4.9 小 结 56
4.10 答疑 56
4.11 课后研习 57
4.11.1 小测验 57
4.11.2 练习题 57
第5课 函数 59
5.1 理解函数 59
5.1.1 函数定义 59
5.1.2 函数示例 59
5.2 函数的工作原理 61
5.3 函数和结构化程序设计 62
5.3.1 结构化程序设计的优点 63
5.3.2 规划结构化程序 63
5.3.3 自上而下的方法 64
5.4 编写函数 65
5.4.1 函数头 65
5.4.2 函数体 67
5.4.3 函数原型 71
5.5 给函数传递实参 72
5.6 调用函数 72
5.7 函数的位置 75
5.8 内联函数 75
5.9 小 结 76
5.10 答疑 76
5.11 课后研习 76
5.11.1 小测验 76
5.11.2 练习题 77
第6课 基本程序控制 78
6.1 数组:基本概念 78
6.2 控制程序的执行 79
6.2.1 for语句 79
6.2.2 嵌套for语句 83
6.2.3 while语句 85
6.2.4 嵌套while语句 88
6.2.5 do...while循环 89
6.3 嵌套循环 92
6.4 小 结 93
6.5 答疑 94
6.6 课后研习 94
6.6.1 小测验 94
6.6.2 练习题 94
第7课 信息读写基础 96
7.1 在屏幕上显示信息 96
7.1.1 print()函数 96
7.1.2 printf()的格式字符串 97
7.1.3 使用puts()显示消息 103
7.2 使用scanf()输入数值数据 104
7.3 三字符序列 108
7.4 小 结 109
7.5 答疑 109
7.6 课后研习 109
7.6.1 小测验 109
7.6.2 练习题 110
第2部分 C语言应用 112
第8课 数值数组 112
8.1 什么是数组 112
8.1.1 一维数组 113
8.1.2 多维数组 116
8.2 命名和声明数组 116
8.2.1 初始化数组 119
8.2.2 初始化多维数组 120
8.3 小 结 123
8.4 答疑 123
8.5 课后研习 124
8.5.1 小测验 124
8.5.2 练习题 124
第9课 指针 126
9.1 什么是指针 126
9.1.1 计算机的内存 126
9.1.2 创建指针 127
9.2 指针和简单变量 127
9.2.1 声明指针 127
9.2.2 初始化指针 128
9.2.3 使用指针 128
9.3 指针和变量类型 130
9.4 指针和数组 131
9.4.1 数组名 131
9.4.2 储存数组元素 131
9.4.3 指针算术 134
9.5 指针的注意事项 137
9.6 数组下标表示法和指针 137
9.7 给函数传递数组 137
9.8 小结 141
9.9 答疑 142
9.10 课后研习 142
9.10.1 小测验 142
9.10.2 练习题 143
第10课 字符和字符串 144
10.1 char数据类型 144
10.2 使用字符变量 145
10.3 使用字符串 147
10.3.1 字符数组 147
10.3.2 初始化字符数组 148
10.4 字符串和指针 148
10.5 未储存在数组中的字符串 148
10.5.1 在编译期分配字符串的空间 149
10.5.2 malloc()函数 149
10.5.3 malloc()函数的用法 150
10.6 显示字符串和字符 153
10.6.1 puts()函数 153
10.6.2 printf()函数 154
10.7 读取从键盘输入的字符串 154
10.7.1 用gets()函数输入字符串 154
10.7.2 用scanf()函数输入字符串 157
10.8 小 结 159
10.9 答疑 160
10.10 课后研习 160
10.10.1 小测验 160
10.10.2 练习题 161
第11课 结构、联合和typedef 163
11.1 简单结构 163
11.1.1 声明和定义结构 163
11.1.2 访问结构的成员 164
11.2 复杂结构 166
11.2.1 包含结构的结构 166
11.2.2 包含数组的结构 169
11.3 结构数组 171
11.4 初始化结构 173
11.5 结构和指针 175
11.5.1 包含指针成员的结构 175
11.5.2 创建指向结构的指针 177
11.5.3 使用指针和结构数组 179
11.5.4 给函数传递结构实参 181
11.6 联合 182
11.6.1 声明、定义并初始化联合 182
11.6.2 访问联合成员 183
11.7 用typedef创建结构的别名 187
11.8 小 结 187
11.9 答疑 187
11.10 课后研习 188
11.10.1 小测验 188
11.10.2 练习题 188
第12课 变量作用域 190
12.1 什么是作用域 190
12.1.1 演示作用域 190
12.1.2 作用域的重要性 192
12.2 创建外部变量 192
12.2.1 外部变量作用域 192
12.2.2 何时使用外部变量 192
12.2.3 extern关键字 193
12.3 创建局部变量 194
12.3.1 静态变量和自动变量 194
12.3.2 函数形参的作用域 196
12.3.3 外部静态变量 196
12.3.4 寄存器变量 197
12.4 局部变量和main()函数 197
12.5 如何使用存储类别 198
12.6 局部变量和块 198
12.7 小 结 199
12.8 答疑 200
12.9 课后研习 200
12.9.1 小测验 200
12.9.2 练习题 201
第13课 高级程序控制 203
13.1 提前结束循环 203
13.1.1 break语句 203
13.1.2 continue语句 205
13.2 goto语句 206
13.3 无限循环 208
13.4 switch语句 211
13.5 退出程序 218
13.6 小 结 219
13.7 答疑 219
13.8 课后研习 219
13.8.1 小测验 220
13.8.2 练习题 220
第14课 输入和输出 221
14.1 C语言和流 221
14.1.1 程序的输入/输出 221
14.1.2 什么是流 221
14.1.3 文本流和二进制流 222
14.1.4 预定义流 222
14.2 C语言的流函数 222
14.3 键盘输入 224
14.3.1 字符输入 224
14.3.2 行输入 228
14.3.3 格式化输入 230
14.4 屏幕输出 236
14.4.1 使用putchar()、putc()和fputc()输出字符 236
14.4.2 使用puts()和fputs()输出字符串 238
14.4.3 使用printf()和fprintf()格式化输出 239
14.5 何时使用fprinf() 243
14.6 小结 244
14.7 答疑 245
14.8 课后研习 245
14.8.1 小测验 245
14.8.2 练习题 246
第3部分 C语言进阶 247
第15课 指向指针的指针和指针数组 247
15.1 声明指向指针的指针 247
15.2 指针和多维数组 248
15.3 指针数组 254
15.3.1 复习字符串和指针 255
15.3.2 声明指向char类型的指针数组 255
15.3.3 示例 257
15.4 小 结 261
15.5 答疑 262
15.6 课后研习 262
15.6.1 小测验 262
15.6.2 练习题 262
第16课 函数指针和链表 264
16.1 函数指针 264
16.1.1 声明函数指针 264
16.1.2 初始化函数指针及其用法 265
16.2 链表 271
16.2.1 链表的基本知识 272
16.2.2 使用链表 273
16.2.3 简单链表示例 277
16.2.4 实现链表 279
16.3 小 结 285
16.4 答疑 285
16.5 课后研习 285
16.5.1 小测验 285
16.5.2 练习题 286
第17课 磁盘文件 287
17.1 将流与磁盘文件相关联 287
17.2 磁盘文件的类型 287
17.3 文件名 288
17.4 打开文件 288
17.5 读写文件数据 291
17.5.1 格式化输入和输出 291
17.5.2 字符输入和输出 294
17.5.3 直接文件输入/输出 296
17.6 文件缓冲:关闭和刷新文件 299
17.7 顺序文件访问和随机文件访问 300
17.7 1ftell()函数和rewind()函数 301
17.7.2 fseek()函数 303
17.8 检测文件末尾 305
17.9 文件管理函数 307
17.9.1 删除文件 307
17.9.2 重命名文件 308
17.9 3拷贝文件 308
17.10 临时文件 310
17.11 小 结 312
17.12 答疑 312
17.13 课后研习 313
17.13.1 小测验 313
17.13.2 练习题 313
第18课 操纵字符串 315
18.1 确定字符串长度 315
18.2 拷贝字符串 316
18.2.1 strcpy()函数 316
18.2.2 strncpy()函数 317
18.3 拼接字符串 319
18.3.1 strcat()函数 319
18.3.2 strncat()函数 320
18.4 比较字符串 321
18.4.1 比较字符串本身 322
18.4.2 比较部分字符串 323
18.5 查找字符串 324
18.5.1 strchr()函数 324
18.5.2 strrchr()函数 325
18.5.3 strcspn()函数 326
18.5.4 strspn()函数 327
18.5.5 strpbrk()函数 328
18.5.6 strstr()函数 328
18.6 将字符串转换为数字 329
18.6.1 将字符串转换为整型值 329
18.6.2 将字符串转换为long 330
18.6.3 将字符串转换为long long类型值 330
18.6.4 将字符串转换为浮点值 330
18.7 字符测试函数 331
18.8 小结 335
18.9 答疑 335
18.10 课后研习 336
18.10.1 小测验 336
18.10.2 练习题 336
第19课 函数的高级主题 338
19.1 给函数传递指针 338
19.2 void指针 341
19.3 带可变数目参数的函数 344
19.4 返回指针的函数 346
19.5 小结 348
19.6 答疑 348
19.7 课后研习 348
19.7.1 小测验 348
19.7.2 练习题 349
第20课 C语言的函数库 350
20.1 数学函数 350
20.1.1 三角函数 350
20.1.2 指数函数和对数函数 350
20.1.3 双曲线函数 351
20.1.4 其他数学函数 351
20.1.5 演示数学函数 351
20.2 处理时间 352
20.2.1 表示时间 352
20.2.2 时间函数 353
20.2.3 使用时间函数 355
20.3 错误处理 357
20.3.1 assert(()宏 357
20.3.2 errno.h头文件 359
20.3.3 perror()函数 359
20.4 查找和排序 361
20.4.1 用bsearch()函数进行查找 361
20.4.2 用qsort()函数进行排序 362
20.4.3 演示查找和排序 362
20.5 小 结 367
20.6 答疑 367
20.7 课后研习 367
20.7.1 小测验 367
20.7.2 练习题 368
第21课 管理内存 370
21.1 类型转换 370
21.1.1 自动类型转换 370
21.1.2 显示转换 372
21.2 分配内存存储空间 373
21.2.1 用malloc()函数分配内存 374
21.2.2 用calloc()函数分配内存 374
21.2.3 用realloc()函数分配更多内存 375
21.2.4 用free()函数释放内存 377
21.3 操控内存块 378
21.3.1 用memset()函数初始化内存 378
21.3.2 用memcpy()函数拷贝内存的数据 379
21.3.3 用memmove()函数移动内存的数据 379
21.4 位 380
21.4.1 移位运算符 381
21.4.2 按位逻辑运算符 382
21.4.3 求反运算符 383
21.4.4 结构中的位字段 383
21.5 小 结 384
21.6 答疑 384
21.7 课后研习 385
21.7.1 小测验 386
21.7.2 练习题 386
第22课 编译器的高级用法 388
22.1 多源代码文件编程 388
22.1.1 模块化编程的优点 388
22.1.2 模块化编程技术 388
22.1.3 模块化的组成部分 392
22.1.4 外部变量和模块化编程 392
22.2 C预处理器 393
22.2.1 #define预处理器指令 393
22.2.2 #include指令 397
22.2.3 #if、#elif、#else和#endif 397
22.2.4 使用#if...#endif帮助调试 398
22.2.5 避免多次包含头文件 399
22.2.6 #undef指令 399
22.3 预定义宏 400
22.4 命令行参数 400
22.5 小 结 402
22.6 答疑 402
22.7 课后研习 403
22.7.1 小测验 403
22.7.2 练习题 403
第4部分 附录 405
附录A ASCII表 405
附录B C/C++关键字 409
附录C 常用函数 411
附录D 参考答案 415