第0章 学习攻略 2
0.1 编程的魔力 2
0.2 C语言的来源及特点 2
0.3 让计算机开口说话 4
0.4 C语言的用途 5
0.5 学习C语言的方法 5
第Ⅰ篇 基础知识 9
第1章 步入C的世界——Hello C 9
1.1 C语言的开发环境 9
1.1.1 C语言常用的开发环境 9
1.1.2 VC++开发环境的安装 9
1.1.3 Turbo C 2.0开发环境的安装 12
1.2 认识常用开发环境 13
1.2.1 认识VC++开发环境 13
1.2.2 认识Turbo开发环境 14
1.3 开始C编程——我的第1个C程序 15
1.3.1 程序编写及运行流程 15
1.3.2 在Visual C++ 6.0中开发C程序 16
1.3.3 在Turbo C中开发C程序 18
1.4 高手点拨 20
1.5 实战练习 20
第2章 C程序的组成 22
2.1 简单例子 22
2.2 声明区 22
2.2.1 头文件 22
2.2.2 函数声明 23
2.2.3 变量声明 24
2.3 主函数 25
2.4 函数定义区 26
2.5 注释 26
2.6 代码的规矩 27
2.7 高手点拨 27
2.8 实战练习 28
第3章 C语言的基本构成元素——字符集、标识符和关键字 30
3.1 标识符和关键字 30
3.1.1 标识符 30
3.1.2 关键字 30
3.2 常量 30
3.2.1 什么是常量 30
3.2.2 常量的声明 32
3.3 常量的类别 32
3.3.1 数值常量 32
3.3.2 字符常量 33
3.3.3 字符串常量 34
3.3.4 符号常量 34
3.4 综合应用——常量指针与指针常量 36
3.5 高手点拨 36
3.6 实战练习 37
第4章 变量 40
4.1 变量 40
4.1.1 什么是变量 40
4.1.2 变量的定义与声明 41
4.2 变量的类别 41
4.2.1 局部变量 41
4.2.2 形式参数 42
4.2.3 全局变量 43
4.3 变量的存储类型 45
4.3.1 自动变量 45
4.3.2 静态变量 45
4.3.3 外部变量 46
4.3.4 寄存器变量 47
4.4 变量的赋值和初始化 48
4.5 综合应用——根据变量的不同决定运行的结果 50
4.6 高手点拨 52
4.7 实战练习 52
第5章 计算机如何识数——数制 54
5.1 二进制 54
5.2 八进制 55
5.3 十进制 55
5.4 十六进制 55
5.5 数制间的转换 56
5.6 综合应用——数制转换 57
5.7 高手点拨 57
5.8 实战练习 58
第6章 数据的种类——数据类型 60
6.1 数据类型的分类 60
6.1.1 基本数据类型 60
6.1.2 构造数据类型 60
6.1.3 指针数据类型 60
6.1.4 空类型 61
6.2 整型 61
6.3 字符型 63
6.4 浮点型 65
6.5 类型转换 67
6.5.1 隐式转换 67
6.5.2 显式转换 69
6.6 综合应用——类型转换 70
6.7 高手点拨 70
6.8 实战练习 71
第7章 C世界中的加减乘除——运算符和表达式 74
7.1 C中的运算符和表达式 74
7.1.1 运算符 74
7.1.2 表达式 74
7.2 算术运算符和表达式 75
7.2.1 算术运算符 75
7.2.2 算术表达式 75
7.2.3 应用举例 75
7.3 关系运算符和表达式 77
7.3.1 关系运算符 77
7.3.2 关系表达式 77
7.3.3 应用举例 77
7.4 逻辑运算符和表达式 78
7.4.1 逻辑运算符 78
7.4.2 逻辑表达式 79
7.4.3 应用举例 79
7.5 条件运算符和表达式 81
7.6 赋值运算符和表达式 82
7.6.1 赋值运算符 82
7.6.2 赋值表达式 82
7.6.3 应用举例 83
7.7 自增、自减运算符 84
7.8 逗号运算符和表达式 85
7.9 位运算符 86
7.9.1 按位与运算符 86
7.9.2 按位或运算符 87
7.9.3 按位异或运算符 87
7.9.4 按位取反运算符 88
7.9.5 左移运算符 88
7.9.6 右移运算符 89
7.9.7 位运算赋值运算符 90
7.9.8 位运算应用 90
7.10 优先级与结合性 93
7.10.1 算术运算符的优先级和结合性 93
7.10.2 关系运算符的优先级和结合性 93
7.10.3 逻辑运算符的优先级和结合性 93
7.10.4 赋值运算符的优先级与结合性 94
7.11 综合应用——根据输入值计算结果 94
7.12 高手点拨 95
7.13 实战练习 95
第8章 顺序结构与选择结构 98
8.1 程序流程概述 98
8.2 语句 98
8.2.1 基本赋值语句 98
8.2.2 表达式语句 99
8.2.3 基本输入/输出语句 99
8.2.4 控制语句 101
8.2.5 空语句和复合语句 101
8.3 顺序结构与语句 102
8.4 选择结构 103
8.4.1 选择结构 103
8.4.2 单分支选择结构——if语句 103
8.4.3 双分支选择结构——if-else语句 106
8.4.4 多分支选择结构——if-else的嵌套形式 107
8.4.5 多分支选择结构——switch语句 111
8.5 综合应用——根据不同的利润计算奖金 113
8.6 高手点拨 114
8.7 实战练习 115
第9章 C程序的流程——循环结构与转向语句 118
9.1 循环结构与语句 118
9.1.1 循环结构 118
9.1.2 当型循环语句——for语句 119
9.1.3 当型循环语句——while语句 122
9.1.4 直到型循环语句——do-while语句 123
9.1.5 循环的嵌套 125
9.2 转向语句 128
9.2.1 goto语句 129
9.2.2 break语句 129
9.2.3 continue语句 131
9.3 综合应用——简单计算器 132
9.4 高手点拨 134
9.5 实战练习 134
第10章 用户与计算机的交互——输入和输出 136
10.1 标准输入/输出 136
10.2 格式化输入/输出 136
10.2.1 格式化输出函数——printf() 136
10.2.2 格式控制字符 138
10.2.3 格式化输入函数——scanf() 142
10.3 字符输入/输出 144
10.3.1 字符输出函数——putchar() 144
10.3.2 字符输入函数——getchar() 146
10.4 字符串输入/输出 146
10.4.1 字符串输出函数——puts() 146
10.4.2 字符串输入函数——gets() 147
10.5 高手点拨 148
10.6 实战练习 148
第11章 数组 152
11.1 数组概述 152
11.2 一维数组 152
11.2.1 一维数组的定义 152
11.2.2 一维数组的初始化 155
11.2.3 一维数组元素的操作 156
11.2.4 数组作为参数传递 158
11.2.5 一维数组的应用举例 160
11.3 二维数组 162
11.3.1 二维数组的定义 162
11.3.2 二维数组的初始化 163
11.3.3 二维数组元素的操作 163
11.3.4 二维数组的应用举例 164
11.4 多维数组 165
11.5 综合应用——杨辉三角 166
11.6 高手点拨 167
11.7 实战练习 168
第12章 字符数组 170
12.1 字符数组概述 170
12.2 字符数组 170
12.2.1 字符数组的初始化 170
12.2.2 字符数组的引用 170
12.2.3 字符数组的输入与输出 171
12.3 字符串 172
12.3.1 字符串和字符数组 172
12.3.2 字符串的输入/输出 174
12.3.3 字符串应用举例 175
12.4 综合应用——自动分类字符 177
12.5 高手点拨 178
12.6 实战练习 179
第Ⅱ篇 算法应用 183
第13章 程序的灵魂——算法与流程图 183
13.1 算法基础 183
13.1.1 算法的概念 183
13.1.2 算法的特性 183
13.1.3 简单算法举例——解方程 184
13.2 流程图的基础 185
13.2.1 流程图中的元素及含义 185
13.2.2 流程图的绘制 186
13.3 如何表示一个算法 188
13.3.1 用自然语言表示算法 188
13.3.2 用流程图表示算法 190
13.3.3 用传统流程图表示3种基本结构 192
13.3.4 用N-S图表示算法 193
13.3.5 用伪代码表示算法 195
13.3.6 用计算机语言表示算法 195
13.4 结构化程序设计方法 196
13.5 综合应用——求解一元二次方程 197
13.6 高手点拨 199
13.7 实战练习 200
第14章 基础算法 202
14.1 排序算法 202
14.1.1 桶排序法 202
14.1.2 冒泡排序法 203
14.1.3 快速排序法 204
14.2 栈、队列、链表算法 206
14.2.1 队列 206
14.2.2 栈 209
14.2.3 链表 211
14.2.4 模拟链表 216
14.3 枚举算法 218
14.4 搜索算法 220
14.4.1 深度优先搜索 220
14.4.2 广度优化搜索 220
14.5 图的遍历算法 221
14.5.1 深度和广度的区别 221
14.5.2 图的深度优化遍历 221
14.5.3 图的广度优化遍历 223
14.6 综合应用——宝岛探险 225
14.7 高手点拨 227
14.8 实战练习 228
第15章 C世界中的高级算法 230
15.1 模拟算法 230
15.2 简单动态规划 231
15.3 用递归实现回溯算法 233
15.4 最短路径算法 236
15.4.1 只有五行的算法——Floyd-Warshall 236
15.4.2 Dijkstra算法——单源最短边 237
15.4.3 Bellman-Ford——解决负权边 237
15.4.4 Bellman-Ford的队列优化 238
15.4.5 最短路径算法对比分析 238
15.5 树算法 240
15.5.1 二叉树算法 240
15.5.2 堆算法 241
15.5.3 并查集 241
15.6 综合应用——镖局运镖 243
15.7 高手点拨 245
15.8 实战练习 246
第16章 数学在程序设计中的应用 248
16.1 常用数学函数 248
16.2 质因数分解 249
16.3 最大公约数的欧几里得算法 251
16.4 加法原理与乘法原理 252
16.5 排列与组合 253
16.6 综合应用——圆排列、可重集排列 254
16.7 高手点拨 255
16.8 实战练习 256
第17章 算法设计的常用思路 258
17.1 分治算法 258
17.2 动态规划算法 259
17.3 贪心算法 261
17.4 回溯算法 263
17.5 高手点拨 265
17.6 实战练习 265
第18章 算法竞赛实例 268
18.1 衡量程序质量的标准 268
18.2 Hilbert曲线 269
18.3 验证四色问题 271
18.4 n女王问题 273
18.5 跳马问题 274
18.6 生成全部排列及其应用 276
18.7 贪吃蛇游戏 278
18.8 快速排序 283
18.9 幻方 284
18.10 高精度计算 288
18.11 高手点拨 289
18.12 实战练习 290
第Ⅲ篇 核心技术 293
第19章 函数 293
19.1 函数概述 293
19.1.1 什么是函数 293
19.1.2 函数的分类 294
19.2 函数的定义 294
19.3 函数的返回值及类型 297
19.3.1 函数的返回值 297
19.3.2 函数的类型 298
19.4 函数的参数及传递方式 300
19.4.1 函数的参数 301
19.4.2 函数参数的传递方式 302
19.5 函数的调用 303
19.5.1 函数调用方式 304
19.5.2 函数的声明 305
19.5.3 函数的嵌套调用 307
19.5.4 函数的递归调用 308
19.6 内部函数和外部函数 312
19.6.1 内部函数 312
19.6.2 外部函数 313
19.7 main()函数 314
19.8 综合应用——用截弦法求方程的根 315
19.9 高手点拨 316
19.10 实战练习 318
第20章 函数中的变量 320
20.1 局部变量与全局变量 320
20.1.1 局部变量 320
20.1.2 全局变量 321
20.2 变量的存储类别 323
20.2.1 自动类型(auto) 324
20.2.2 寄存器类型(register) 324
20.2.3 静态类型(static) 325
20.2.4 外部类型(extern) 327
20.3 综合应用——日期判断 328
20.4 高手点拨 329
20.5 实战练习 330
第21章 文件 332
21.1 文件概述 332
21.1.1 文件类型 332
21.1.2 C如何操作文件——文件指针 332
21.1.3 文件缓冲区 333
21.2 文件的打开和关闭 333
21.2.1 文件的打开——fopen()函数 333
21.2.2 文件的关闭——fclose()函数 334
21.2.3 文件结束检测——feof()函数 335
21.3 文件的顺序读写 335
21.3.1 文本文件中字符的输入/输出 335
21.3.2 文本文件中字符串的输入/输出 337
21.3.3 格式化输入/输出 339
21.3.4 二进制文件的输入/输出——数据块读写 340
21.4 文件的随机读写 342
21.5 综合应用——文件操作 343
21.6 高手点拨 345
21.7 实战练习 346
第22章 库函数概览 348
22.1 标准C库函数 348
22.2 数学函数 348
22.2.1 绝对值函数 348
22.2.2 幂函数和开平方函数 349
22.2.3 指数函数和对数函数 350
22.2.4 三角函数 350
22.2.5 取整函数和取余函数 350
22.3 字符串处理函数 351
22.3.1 字符串长度函数 351
22.3.2 字符串连接函数 352
22.3.3 字符串复制函数 353
22.3.4 字符串比较函数 353
22.3.5 字符串查找函数 354
22.3.6 字符串填充函数 355
22.4 字符处理函数 356
22.4.1 字符类型判断函数 356
22.4.2 字符大小写转换函数 357
22.5 转换和存储管理函数 358
22.5.1 转换函数 358
22.5.2 存储管理函数 359
22.6 随机函数 360
22.6.1 初识随机函数 360
22.6.2 使用随机函数 361
22.7 日期和时间处理函数 362
22.8 诊断函数 363
22.9 命令行参数 364
22.10 其他函数 365
22.10.1 exit()函数 366
22.10.2 qsort()函数 366
22.11 综合应用——猜数字游戏 367
22.12 高手点拨 369
22.13 实战练习 370
第23章 合理利用内存——位运算 372
23.1 二进制数 372
23.1.1 二进制 372
23.1.2 无符号数和有符号数 372
23.2 位运算符 372
23.2.1 按位与运算符 373
23.2.2 按位或运算符 373
23.2.3 按位异或运算符 374
23.2.4 按位取反运算符 375
23.2.5 左移运算符 375
23.2.6 右移运算符 375
23.2.7 位运算赋值运算符 376
23.2.8 位运算应用 377
23.3 位域 379
23.4 综合应用——数制转换 380
23.5 高手点拨 381
23.6 实战练习 382
第24章 结构体和联合体 384
24.1 结构体 384
24.1.1 结构体类型 384
24.1.2 定义结构体变量 385
24.1.3 初始化结构体变量 386
24.1.4 结构体变量的引用 387
24.2 结构体数组 388
24.2.1 定义结构体数组 388
24.2.2 初始化结构体数组 390
24.2.3 结构体数组元素的引用 390
24.3 结构体与函数 392
24.3.1 结构体作为函数的参数 392
24.3.2 结构体作为函数的返回值 394
24.4 联合体 395
24.4.1 联合体类型 395
24.4.2 联合体变量的定义 396
24.4.3 联合体变量的初始化 397
24.4.4 联合体变量的引用 399
24.5 结构体和联合体的区别与联系 400
24.6 综合应用——计算学生成绩 400
24.7 高手点拨 402
24.8 实战练习 403
第25章 数据管理者——数据结构 406
25.1 数据结构概述 406
25.2 线性表 406
25.2.1 顺序表 407
25.2.2 单链表 410
25.3 栈 416
25.3.1 栈的基本运算 416
25.3.2 顺序栈的类型定义 417
25.3.3 链式栈的类型定义 417
25.4 队列 417
25.4.1 队列的基本运算 418
25.4.2 顺序队列类型定义 418
25.4.3 链队列类型定义 419
25.5 二叉树 419
25.6 查找 420
25.6.1 顺序查找 420
25.6.2 折半查找 422
25.7 排序 423
25.7.1 冒泡排序法 424
25.7.2 选择排序法 425
25.7.3 插入排序法 426
25.8 综合应用——链表的反转 427
25.9 高手点拨 430
25.10 实战练习 439
第Ⅳ篇 高级应用 443
第26章 内存的快捷方式——指针 443
26.1 指针概述 443
26.1.1 指针的类型 443
26.1.2 指针所指向的类型 443
26.1.3 指针的值 443
26.1.4 指针所占内存 443
26.2 指针的算术运算 444
26.2.1 指针与整数的运算 444
26.2.2 指针与指针的运算 445
26.3 运算符&和 446
26.4 指针表达式 447
26.5 综合应用——使用指针进行排序 448
26.6 高手点拨 449
26.7 实战练习 450
第27章 指针与数组 452
27.1 数组指针 452
27.2 数组指针作为函数参数 452
27.3 指针与字符数组 453
27.4 指针数组与指针的指针 454
27.5 综合应用——报数游戏 456
27.6 高手点拨 457
27.7 实战练习 457
第28章 指针与函数 460
28.1 函数指针 460
28.1.1 函数指针的定义 460
28.1.2 函数指针的赋值 461
28.1.3 通过函数指针调用函数 461
28.2 指针函数 462
28.3 指向函数的指针作为函数参数 463
28.4 综合应用——日期的输出 465
28.5 高手点拨 466
28.6 实战练习 466
第29章 指针与字符串 468
29.1 字符串指针 468
29.1.1 创建字符串 468
29.1.2 处理字符串 469
29.1.3 输出字符串 472
29.2 字符串指针作为函数参数 472
29.3 字符指针变量与字符数组的区别 474
29.4 综合应用——“回文”问题 474
29.5 实战练习 476
第30章 指针与结构体 478
30.1 结构体指针 478
30.1.1 定义结构体指针 478
30.1.2 初始化结构体指针 478
30.1.3 使用指针访问成员 478
30.1.4 给结构体指针赋值 479
30.2 指向结构体变量的指针 480
30.3 指向结构体数组的指针 481
30.4 综合应用——创建简单链表 482
30.5 高手点拨 484
30.6 实战练习 484
第31章 指针的高级应用与技巧 486
31.1 指向指针的指针 486
31.2 void操作 487
31.3 内存操作 489
31.4 指针的传递 491
31.5 综合应用——数值的降序排列 492
31.6 高手点拨 493
31.7 实战练习 494
第Ⅴ篇 趣味题解 497
第32章 K-均值聚类算法 497
32.1 问题描述 497
32.2 问题分析及实现 497
32.2.1 问题分析 497
32.2.2 问题实现 497
32.2.3 程序运行 499
32.3 开发过程常见问题及解决 500
第33章 哥德巴赫猜想 502
33.1 问题描述 502
33.2 问题分析及实现 502
33.2.1 问题分析 502
33.2.2 问题实现 502
33.2.3 程序运行 504
33.3 开发过程常见问题及解决 504
第34章 猴子选大王游戏 506
34.1 问题描述 506
34.2 问题分析及实现 506
34.2.1 问题分析 506
34.2.2 问题实现 506
34.2.3 程序运行 507
34.3 开发过程常见问题及解决 508
第35章 迷宫求解 510
35.1 问题描述 510
35.2 问题分析及实现 510
35.2.1 问题分析 510
35.2.2 问题实现 510
35.2.3 程序运行 513
35.3 开发过程常见问题及解决 514
第36章 背包问题求解 516
36.1 问题描述 516
36.2 问题分析及实现 516
36.2.1 问题分析 516
36.2.2 问题实现 516
36.2.3 程序运行 518
36.3 开发过程常见问题及解决 518
第37章 火车车厢重排 520
37.1 问题描述 520
37.2 问题分析及实现 520
37.2.1 问题分析 520
37.2.2 问题实现 520
37.2.3 程序运行 522
37.3 开发过程常见问题及解决 522
第38章 哈夫曼编码的实现 524
38.1 问题描述 524
38.2 问题分析及实现 524
38.2.1 问题分析 524
38.2.2 问题实现 524
38.2.3 程序运行 526
38.3 开发过程常见问题及解决 526
第39章 八皇后问题的实现 528
39.1 问题描述 528
39.2 问题分析及实现 528
39.2.1 问题分析 528
39.2.2 问题实现 528
39.2.3 程序运行 530
39.3 开发过程常见问题及解决 530
第40章 商人过河游戏 532
40.1 问题描述 532
40.2 问题分析及实现 532
40.2.1 问题分析 532
40.2.2 问题实现 532
40.2.3 程序运行 535
40.3 开发过程常见问题及解决 536
第41章 K阶斐波那契序列的实现 538
41.1 问题描述 538
41.2 问题分析及实现 538
41.2.1 问题分析 538
41.2.2 问题实现 538
41.2.3 程序运行 539
41.3 开发过程常见问题及解决 540
第42章 最短路径的实现 542
42.1 问题描述 542
42.2 问题分析及实现 542
42.2.1 问题分析 542
42.2.2 问题实现 542
42.2.3 程序运行 543
42.3 开发过程常见问题及解决 544