第0章 学习攻略 1
0.1 C语言的来源 2
0.2 C语言的特点 3
0.3 C语言无处不在 4
0.4 C语言的学习经验 4
0.5 C语言的学习路线 5
第1篇 基础知识 8
第1章 步入C的世界——Hello C 8
1.1 C语言的开发环境 9
1.1.1 C常用开发环境 9
1.1.2 VC++开发环境的安装 9
1.1.3 TurboC2.0开发环境的安装 12
1.2 认识常用开发环境 14
1.2.1 认识VC++开发环境 14
1.2.2 认识Turbo开发环境 16
1.3 开始C编程——我的第1个C程序 17
1.3.1 程序编写及运行流程 17
1.3.2 在VisualC++6.0中开发C程序 17
1.3.3 在TurboC中开发C程序 20
1.4 高手点拨 22
1.5 实战练习 22
第2章 C程序的组成 23
2.1 简单例子 24
2.2 声明区 25
2.2.1 头文件 25
2.2.2 函数声明 25
2.2.3 变量声明 26
2.3 主函数 28
2.4 函数定义区 29
2.5 注释 30
2.6 代码的规矩 30
2.7 高手点拨 31
2.8 实战练习 32
第3章 C语言的基本构成元素——字符集、标识符和关键字 33
3.1 标识符和关键字 34
3.1.1 标识符 34
3.1.2 关键字 34
3.2 常量 35
3.2.1 什么是常量 35
3.2.2 常量的声明 36
3.3 常量的类别 36
3.3.1 数值常量 36
3.3.2 字符常量 38
3.3.3 字符串常量 39
3.3.4 符号常量 40
3.4 综合应用——常量指针与指针常量 41
3.5 高手点拨 42
3.6 实战练习 43
第4章 变量 45
4.1 变量 46
4.1.1 什么是变量 46
4.1.2 变量的定义与声明 47
4.2 变量的类别 47
4.2.1 局部变量 48
4.2.2 形式参数 49
4.2.3 全局变量 50
4.3 变量的存储类型 52
4.3.1 自动变量 52
4.3.2 静态变量 52
4.3.3 外部变量 54
4.3.4 寄存器变量 55
4.4 变量的赋值和初始化 57
4.5 综合应用——根据变量的不同决定运行的结果 58
4.6 高手点拨 61
4.7 实战练习 62
第5章 计算机如何识数——数制 63
5.1 二进制 64
5.2 八进制 65
5.3 十进制 65
5.4 十六进制 66
5.5 数制间的转换 66
5.6 综合应用——数制转换 68
5.7 高手点拨 69
5.8 实战练习 70
第6章 数据的种类——数据类型 71
6.1 数据类型的分类 72
6.1.1 基本数据类型 72
6.1.2 构造数据类型 72
6.1.3 指针数据类型 73
6.1.4 空类型 73
6.2 整型 73
6.3 字符型 75
6.4 浮点型 78
6.5 类型转换 80
6.5.1 隐式转换 81
6.5.2 显式转换 83
6.6 综合应用——类型转换 83
6.7 高手点拨 85
6.8 实战练习 86
第7章 C世界中的加减乘除——运算符和表达式 87
7.1 C中的运算符和表达式 88
7.1.1 运算符 88
7.1.2 表达式 89
7.2 算术运算符和表达式 89
7.2.1 算术运算符 89
7.2.2 算术表达式 89
7.2.3 应用举例 90
7.3 关系运算符和表达式 92
7.3.1 关系运算符 92
7.3.2 关系表达式 92
7.3.3 应用举例 92
7.4 逻辑运算符和表达式 93
7.4.1 逻辑运算符 94
7.4.2 逻辑表达式 94
7.4.3 应用举例 94
7.5 条件运算符和表达式 97
7.6 赋值运算符和表达式 98
7.6.1 赋值运算符 98
7.6.2 赋值表达式 98
7.6.3 应用举例 99
7.7 自增、自减运算符 101
7.8 逗号运算符和表达式 102
7.9 位运算符 103
7.9.1 按位与运算符 104
7.9.2 按位或运算符 104
7.9.3 按位异或运算符 105
7.9.4 按位取反运算符 106
7.9.5 左移运算符 106
7.9.6 右移运算符 107
7.9.7 位运算赋值运算符 108
7.9.8 位运算应用 108
7.10 优先级与结合性 111
7.10.1 算术运算符的优先级和结合性 111
7.10.2 关系运算符的优先级和结合性 111
7.10.3 逻辑运算符的优先级和结合性 111
7.10.4 赋值运算符的优先级与结合性 112
7.11 综合应用——根据输入值计算结果 112
7.12 高手点拨 113
7.13 实战练习 114
第8章 顺序结构与选择结构 115
8.1 程序流程概述 116
8.2 语句 116
8.2.1 基本赋值语句 116
8.2.2 表达式语句 117
8.2.3 基本输入/输出语句 117
8.2.4 控制语句 120
8.2.5 空语句和复合语句 120
8.3 顺序结构与语句 121
8.4 选择结构 123
8.4.1 选择结构 123
8.4.2 单分支选择结构——if语句 123
8.4.3 双分支选择结构——if-else语句 126
8.4.4 多分支选择结构——if-else的嵌套形式 127
8.4.5 多分支选择结构——switch语句 132
8.5 综合应用——根据不同的利润计算资金 134
8.6 高手点拨 136
8.7 实战练习 137
第9章 C程序的流程——循环结构与转向语句 139
9.1 循环结构与语句 140
9.1.1 循环结构 140
9.1.2 当型循环语——for语句 141
9.1.3 当型循环语——while语句 145
9.1.4 直到型循环语句——do-while语句 146
9.1.5 循环的嵌套 148
9.2 转向语句 152
9.2.1 goto语句 152
9.2.2 break语句 154
9.2.3 continue语句 156
9.3 综合应用——简单计算器 157
9.4 高手点拨 159
9.5 实战练习 159
第10章 用户与计算机的交互——输入和输出 161
10.1 标准输入/输出 162
10.2 格式化输入/输出 162
10.2.1 格式化输出函数——printf() 162
10.2.2 格式控制字符 164
10.2.3 格式化输入函数——scanf() 169
10.3 字符输入/输出 171
10.3.1 字符输出函数——putchar() 171
10.3.2 字符输入函数——getchar() 173
10.4 字符串输入/输出 174
10.4.1 字符串输出函数——puts() 174
10.4.2 字符串输入函数——gets() 174
10.5 高手点拨 175
10.6 实战练习 176
第11章 数组 179
11.1 数组概述 180
11.2 一维数组 180
11.2.1 一维数组的定义 180
11.2.2 一维数组的初始化 183
11.2.3 一维数组元素的操作 185
11.2.4 数组作为参数传递 187
11.2.5 一维数组的应用举例 190
11.3 二维数组 192
11.3.1 二维数组的定义 192
11.3.2 二维数组的初始化 193
11.3.3 二维数组元素的操作 194
11.3.4 二维数组的应用举例 194
11.4 多维数组 196
11.5 综合应用——杨辉三角 197
11.6 高手点拨 199
11.7 实战练习 200
第12章 字符数组 201
12.1 字符数组概述 202
12.2 字符数组 202
12.2.1 字符数组的初始化 202
12.2.2 字符数组的引用 202
12.2.3 字符数组的输入与输出 203
12.3 字符串 205
12.3.1 字符串和字符数组 205
12.3.2 字符串的输入/输出 207
12.3.3 字符串应用举例 208
12.4 综合应用——自动分类字符 210
12.5 高手点拨 212
12.6 实战练习 213
第13章 程序的灵魂——算法与流程图 215
13.1 算法基础 216
13.1.1 算法的概念 216
13.1.2 算法的特性 217
13.1.3 简单算法举例——解方程 217
13.2 流程图的基础 218
13.2.1 流程图中的元素及含义 219
13.2.2 流程图的绘制 220
13.3 如何表示一个算法 222
13.3.1 用自然语言表示算法 222
13.3.2 用流程图表示算法 225
13.3.3 用传统流程图表示3种基本结构 227
13.3.4 用N-S图表示算法 228
13.3.5 用伪代码表示算法 229
13.3.6 用计算机语言表示算法 230
13.4 结构化程序设计方法 231
13.5 综合应用——求解一元二次方程 231
13.6 高手点拨 234
13.7 实战练习 234
第2篇 核心技术 236
第14章 函数 236
14.1 函数概述 237
14.1.1 什么是函数 237
14.1.2 函数的分类 238
14.2 函数的定义 239
14.3 函数的返回值及类型 242
14.3.1 函数的返回值 242
14.3.2 函数的类型 244
14.4 函数的参数及传递方式 247
14.4.1 函数的参数 247
14.4.2 函数参数的传递方式 249
14.5 函数的调用 251
14.5.1 函数调用方式 251
14.5.2 函数的声明 253
14.5.3 函数的嵌套调用 255
14.5.4 函数的递归调用 256
14.6 内部函数和外部函数 262
14.6.1 内部函数 262
14.6.2 外部函数 262
14.7 main()函数 264
14.8 综合应用——用截弦法求方程的根 266
14.9 高手点拨 267
14.10 实战练习 269
第15章 函数中的变量 271
15.1 局部变量与全局变量 272
15.1.1 局部变量 272
15.1.2 全局变量 273
15.2 变量的存储类别 276
15.2.1 自动类型(auto) 276
15.2.2 寄存器类型(register) 277
15.2.3 静态类型(static) 278
15.2.4 外部类型(extem) 280
15.3 综合应用——日期判断 282
15.4 高手点拨 283
15.5 实战练习 284
第16章 文件 285
16.1 文件概述 286
16.1.1 文件类型 286
16.1.2 C如何操作文件——文件指针 286
16.1.3 文件缓冲区 287
16.2 文件的打开和关闭 287
16.2.1 文件的打开——fopen()函数 287
16.2.2 文件的关闭——fclose()函数 289
16.2.3 文件结束检测——feof()函数 289
16.3 文件的顺序读写 290
16.3.1 文本文件中字符的输入/输出 290
16.3.2 文本文件中字符串的输入/输出 292
16.3.3 格式化输入/输出 295
16.3.4 二进制文件的输入/输出——数据块读写 296
16.4 文件的随机读写 298
16.5 综合应用——文件操作 300
16.6 高手点拨 301
16.7 实战练习 302
第17章 C语言如何被计算机识别——编译与预处理指令 303
17.1 什么是预处理指令 304
17.2 宏定义 304
17.2.1 变量式宏定义 305
17.2.2 宏定义嵌套 310
17.2.3 宏定义范围 312
17.2.4 函数式宏定义 313
17.2.5 多行宏定义 316
17.3 文件包含 317
17.3.1 什么是文件包含 317
17.3.2 使用文件包含 317
17.3.3 文件包含说明 319
17.4 条件编译 319
17.4.1 条件编译形式 320
17.4.2 调试中使用条件编译 323
17.4.3 文件嵌套包含和条件编译 324
17.5 assert()宏 325
17.6 综合应用——编译与预处理指令 325
17.7 高手点拨 328
17.8 实战练习 329
第18章 库函数 331
18.1 标准C库函数 332
18.2 数学函数 332
18.2.1 绝对值函数 333
18.2.2 幂函数和开平方函数 334
18.2.3 指数函数和对数函数 335
18.2.4 三角函数 335
18.2.5 取整函数和取余函数 335
18.3 字符串处理函数 337
18.3.1 字符串长度函数 337
18.3.2 字符串连接函数 337
18.3.3 字符串复制函数 338
18.3.4 字符串比较函数 339
18.3.5 字符串查找函数 341
18.3.6 字符串填充函数 342
18.4 字符处理函数 343
18.4.1 字符类型判断函数 343
18.4.2 字符大小写转换函数 344
18.5 转换和存储管理函数 345
18.5.1 转换函数 345
18.5.2 存储管理函数 346
18.6 随机函数 348
18.6.1 初识随机函数 348
18.6.2 使用随机函数 348
18.7 日期和时间处理函数 350
18.8 诊断函数 351
18.9 命令行参数 353
18.10 其他函数 354
18.10.1 exit()函数 354
18.10.2 qsort()函数 355
18.11 综合应用——猜数字游戏 356
18.12 高手点拨 358
18.13 实战练习 360
第19章 合理利用内存——位运算 361
19.1 二进制数 362
19.1.1 二进制 362
19.1.2 无符号数和有符号数 362
19.2 位运算符 363
19.2.1 按位与运算符 363
19.2.2 按位或运算符 364
19.2.3 按位异或运算符 364
19.2.4 按位取反运算符 365
19.2.5 左移运算符 365
19.2.6 右移运算符 366
19.2.7 位运算赋值运算符 367
19.2.8 位运算应用 367
19.3 位域 370
19.4 综合应用——数制转换 372
19.5 高手点拨 373
19.6 实战练习 374
第20章 结构体和联合体 375
20.1 结构体 376
20.1.1 结构体类型 376
20.1.2 定义结构体变量 377
20.1.3 初始化结构体变量 379
20.1.4 结构体变量的引用 379
20.2 结构体数组 381
20.2.1 定义结构体数组 381
20.2.2 初始化结构体数组 383
20.2.3 结构体数组元素的引用 384
20.3 结构体与函数 385
20.3.1 结构体作为函数的参数 385
20.3.2 结构体作为函数的返回值 388
20.4 联合体 389
20.4.1 联合体类型 389
20.4.2 联合体变量的定义 390
20.4.3 联合体变量的初始化 392
20.4.4 联合体变量的引用 394
20.5 结构体和联合体的区别与联系 395
20.6 综合应用——计算学生成绩 396
20.7 高手点拨 397
20.8 实战练习 399
第21章 数据管理者——数据结构 401
21.1 数据结构概述 402
21.2 线性表 403
21.2.1 顺序表 403
21.2.2 单链表 407
21.3 栈 414
21.3.1 栈的基本运算 415
21.3.2 顺序栈的类型定义 415
21.3.3 链式栈的类型定义 415
21.4 队列 416
21.4.1 队列的基本运算 416
21.4.2 顺序队列类型定义 416
21.4.3 链队列类型定义 417
21.5 二叉树 417
21.6 查找 418
21.6.1 顺序查找 419
21.6.2 折半查找 421
21.7 排序 423
21.7.1 冒泡排序法 423
21.7.2 选择排序法 425
21.7.3 插入排序法 426
21.8 综合应用——链表的反转 428
21.9 高手点拨 430
21.10 实战练习 442
第3篇 高级应用 446
第22章 内存的快捷方式——指针 446
22.1 指针概述 447
22.1.1 指针的类型 447
22.1.2 指针所指向的类型 447
22.1.3 指针的值 447
22.1.4 指针所占内存 448
22.2 指针的算术运算 448
22.2.1 指针与整数的运算 448
22.2.2 指针与指针的运算 450
22.3 运算符&和* 450
22.4 指针表达式 452
22.5 综合应用——使用指针进行排序 453
22.6 高手点拨 454
22.7 实战练习 454
第23章 指针与数组 455
23.1 数组指针 456
23.2 数组指针作为函数参数 456
23.3 指针与字符数组 458
23.4 指针数组与指针的指针 458
23.5 综合应用——报数游戏 460
23.6 高手点拨 462
23.7 实战练习 462
第24章 指针与函数 463
24.1 函数指针 464
24.1.1 函数指针的定义 464
24.1.2 函数指针的赋值 465
24.1.3 通过函数指针调用函数 465
24.2 指针函数 467
24.3 指向函数的指针作为函数参数 468
24.4 综合应用——日期的输出 470
24.5 高手点拨 472
24.6 实战练习 472
第25章 指针与字符串 473
25.1 字符串指针 474
25.1.1 创建字符串 474
25.1.2 处理字符串 475
25.1.3 输出字符串 478
25.2 字符串指针作为函数参数 479
25.3 字符指针变量与字符数组的区别 480
25.4 综合应用——“回文”问题 481
25.5 实战练习 482
第26章 指针与结构体 483
26.1 结构体指针 484
26.1.1 定义结构体指针 484
26.1.2 初始化结构体指针 484
26.1.3 使用指针访问成员 484
26.1.4 给结构体指针赋值 486
26.2 指向结构体变量的指针 486
26.3 指向结构体数组的指针 488
26.4 综合应用——创建简单链表 490
26.5 高手点拨 491
26.6 实战练习 492
第27章 指针的高级应用与技巧 493
27.1 指向指针的指针 494
27.2 void操作 495
27.3 内存操作 497
27.4 指针的传递 500
27.5 综合应用——数值的降序排列 500
27.6 高手点拨 502
27.7 实战练习 502
第4篇 项目实战 504
第28章 项目实战前的几点忠告——项目规划 504
28.1 项目开发流程 505
28.1.1 策划阶段 506
28.1.2 需求分析阶段 506
28.1.3 开发阶段 506
28.1.4 编码阶段 506
28.1.5 系统测试阶段 507
28.1.6 系统验收阶段 507
28.1.7 系统维护阶段 507
28.2 项目开发团队 507
28.2.1 项目团队组成 507
28.2.2 项目团队要求 508
28.3 项目的实际运作 508
28.4 项目规划常见问题及解决 509
28.4.1 如何满足客户需求 509
28.4.2 如何控制项目进度 509
28.4.3 如何控制项目预算 510
第29章 Linux下的C语言开发 511
29.1 开发背景 512
29.2 Linux系统的安装 512
29.2.1 安装虚拟机 512
29.2.2 安装Linux系统 514
29.3 Linux下的C语言开发环境 523
29.3.1 了解GCC编译器 523
29.3.2 GCC编译器的使用 524
29.4 编译小程序 525
第30章 通讯录 527
30.1 开发背景 528
30.2 需求及功能分析 528
30.2.1 总体功能分析 528
30.2.2 功能模块分析 529
30.3 系统功能的实现 529
30.3.1 系统选择菜单的实现 530
30.3.2 增加联系人功能的实现 530
30.3.3 删除联系人功能的实现 531
30.3.4 查找联系人模块的实现 532
30.3.5 插入联系人模块的实现 533
30.3.6 保存联系人文件模块的实现 533
30.3.7 从文件加载联系人信息模块的实现 534
30.3.8 显示所有联系人信息模块的实现 535
30.4 系统运行 535
30.5 开发过程常见问题及解决 536
第31章 图书管理系统 537
31.1 开发背景 538
31.2 需求及功能分析 538
31.2.1 总体功能分析 538
31.2.2 各模块功能分析 538
31.3 系统功能的实现 539
31.3.1 建立相关类及属性 539
31.3.2 系统选择菜单的实现 540
31.3.3 借书功能的实现 542
31.3.4 还书功能的实现 543
31.3.5 图书上架功能的实现 543
31.3.6 图书下架功能的实现 544
31.4 系统运行 546
31.5 开发过程常见问题及解决 547
第32章 信息管理系统 549
32.1 简易网络通信系统 550
32.1.1 系统分析 550
32.1.2 功能分析及实现 550
32.1.3 开发常见问题及解决 551
32.2 学生成绩管理系统 552
32.2.1 系统分析 552
32.2.2 功能分析及实现 552
32.2.3 开发常见问题及解决 557
32.3 酒店管理系统 557
32.3.1 系统分析 557
32.3.2 功能分析及实现 558
32.3.3 开发常见问题及解决 562
第5篇 趣昧题解 564
第33章 K-均值聚类算法 564
33.1 问题描述 565
33.2 问题分析及实现 565
33.2.1 问题分析 565
33.2.2 问题实现 565
33.2.3 程序运行 568
33.3 开发过程常见问题及解决 568
第34章 哥德巴赫猜想 569
34.1 问题描述 570
34.2 问题分析及实现 570
34.2.1 问题分析 570
34.2.2 问题实现 570
34.2.3 程序运行 572
34.3 开发过程常见问题及解决 572
第35章 猴子选大王游戏 573
35.1 问题描述 574
35.2 问题分析及实现 574
35.2.1 问题分析 574
35.2.2 问题实现 574
35.2.3 程序运行 576
35.3 开发过程常见问题及解决 576
第36章 迷宫求解 577
36.1 问题描述 578
36.2 问题分析及实现 578
36.2.1 问题分析 578
36.2.2 问题实现 578
36.2.3 程序运行 582
36.3 开发过程常见问题及解决 582
第37章 背包问题求解 583
37.1 问题描述 584
37.2 问题分析及实现 584
37.2.1 问题分析 584
37 2.2 问题实现 584
37.2.3 程序运行 586
37.3 开发过程常见问题及解决 586
第38章 火车车厢重排 587
38.1 问题描述 588
38.2 问题分析及实现 588
38.2.1 问题分析 588
38.2.2 问题实现 588
38.2.3 程序运行 591
38.3 开发过程常见问题及解决 592
第39章 哈夫曼编码的实现 593
39.1 问题描述 594
39.2 问题分析及实现 594
39.2.1 问题分析 594
39.2.2 问题实现 594
39.2.3 程序运行 596
39.3 开发过程常见问题及解决 596
第40章 八皇后问题的实现 597
40.1 问题描述 598
40.2 问题分析及实现 598
40.2.1 问题分析 598
40.2.2 问题实现 598
40.2.3 程序运行 600
40.3 开发过程常见问题及解决 600
第41章 商人过河游戏 601
41.1 问题描述 602
41.2 问题分析及实现 602
41.2.1 问题分析 602
41.2.2 问题实现 602
41.2.3 程序运行 605
41.3 开发过程常见问题及解决 606
第42章 K阶斐波那契序列的实现 607
42.1 问题描述 608
42.2 问题分析及实现 608
42.2.1 问题分析 608
42.2.2 问题实现 608
42.2.3 程序运行 610
42.3 开发过程常见问题及解决 610
第43章 最短路径的实现 611
43.1 问题描述 612
43.2 问题分析及实现 612
43.2.1 问题分析 612
43.2.2 问题实现 612
43.2.3 程序运行 614
43.3 开发过程常见问题及解决 614