第1章 计算机、Internet和万维网导论 1
         1.1 引言 2
         1.2 什么是计算机 3
         1.3 计算机的基本组成 3
         1.4 早期的操作系统 4
         1.5 个人计算、分布式计算和客户/服务器计算 4
         1.6 机器语言、汇编语言和高级语言 5
         1.7 著名的高级语言FORTRAN,COBOL,Pascal和Ada 6
         1.8 C语言的发展历史 7
         1.9 C语言标准库 8
         1.10 C++语言 8
         1.11 Java 9
         1.12 BASIC语言,Visual Basic语言,Visual C++语言,Visual C#语言和.NET编程平台 9
         1.13 软件发展的重要趋势:对象技术 10
         1.14 典型的C语言程序开发环境 11
         1.15 硬件的发展趋势 13
         1.16 Internet的发展历史 13
         1.17 万维网(WWW)的发展历史 14
         1.18 关于C语言和本书的一些注解 14
         1.19 有价值的Web站点 15
         第2章 C语言程序设计入门 26
         2.1 引言 26
         2.2 一个简单的C程序:输出一行文字 27
         2.3 另一个简单的C程序:两个整数求和 30
         2.4 存储单元的基本概念 34
         2.5 C语言中的算术运算 34
         2.6 做出判断:相等和关系运算符 37
         第3章 结构化的C程序设计 50
         3.1 引言 50
         3.2 算法 51
         3.3 伪码 51
         3.4 控制结构 52
         3.5 if选择语句 53
         3.6 if...else选择语句 54
         3.7 while循环语句 57
         3.8 算法设计案例1:计数控制的循环 58
         3.9 算法设计案例2:自顶向下、逐步求精的标记控制循环 60
         3.10 算法设计案例3:自顶向下、逐步求精的嵌套控制结构 65
         3.11 赋值运算符 69
         3.12 增1和减1运算符 69
         第4章 C程序控制 86
         4.1 引言 86
         4.2 循环的基本原理 87
         4.3 计数控制的循环 87
         4.4 for循环语句 89
         4.5 for循环语句:注意事项 91
         4.6 应用for循环语句的例子 92
         4.7 switch多重选择语句 94
         4.8 do...while循环语句 99
         4.9 break和continue语句 100
         4.10 逻辑运算符 102
         4.11 区分相等运算符(==)和陚值运算符(=) 104
         4.12 结构化程序设计总结 105
         第5章 C函数 120
         5.1 引言 121
         5.2 C语言中的程序模块 121
         5.3 数学库函数 122
         5.4 函数 123
         5.5 函数定义 123
         5.6 函数原型 127
         5.7 函数调用栈及活动记录 129
         5.8 头文件 129
         5.9 主调函数:按值调用与按引用调用 130
         5.10 随机数的生成 130
         5.11 程序案例:运气游戏 134
         5.12 存储类型 137
         5.13 标识符作用域的规定 139
         5.14 递归 142
         5.15 使用递归的例子:Fibonacci数列 144
         5.16 递归与迭代 147
         第6章 C数组 165
         6.1 引言 165
         6.2 数组 166
         6.3 数组的定义 167
         6.4 数组的应用举例 167
         6.5 将数组传递给函数的方法 178
         6.6 数组元素的排序 182
         6.7 案例分析:釆用数组来计算平均值、中值和众数 184
         6.8 数组元素的查找 187
         6.9 多维数组 191
         第7章 C指针 213
         7.1 引言 213
         7.2 指针变量的定义和初始化 214
         7.3 指针运算符 214
         7.4 使用按引用调用方法向函数传递实参 216
         7.5 对指针使用const限定符 219
         7.6 使用按引用调用方法实现冒泡法排序 224
         7.7 sizeof运算符 227
         7.8 指针表达式和指针运算 228
         7.9 指针和数组之间的关系 230
         7.10 指针数组 234
         7.11 案例学习:扑克牌洗牌和发牌模拟 234
         7.12 函数指针 238
         第8章 C字符和字符串 258
         8.1 引言 258
         8.2 字符串和字符基础 259
         8.3 字符处理函数库 260
         8.4 字符串转换函数 264
         8.5 标准输入输出库函数 268
         8.6 字符串处理函数库中的字符串处理函数 271
         8.7 字符串处理函数库中的比较函数 273
         8.8 字符串处理函数库中的查找函数 274
         8.9 字符串处理函数库中的内存函数 279
         8.10 字符串处理函数库中的其他函数 282
         第9章 格式化输入输出 294
         9.1 引言 294
         9.2 流 295
         9.3 用printf函数实现格式化输出 295
         9.4 打印整数 295
         9.5 打印浮点数 296
         9.6 打印字符串或字符 298
         9.7 其他的转换说明符 299
         9.8 带域宽和精度的打印 300
         9.9 在printf函数的格式控制字符串中使用标记 301
         9.10 打印文本和转义序列 304
         9.11 用scanf函数读取格式化的输入 304
         第10章 结构体、共用体、位操作和枚举类型 316
         10.1 引言 316
         10.2 结构体的定义 317
         10.3 结构体的初始化 319
         10.4 对结构体成员的访问 319
         10.5 在函数中使用结构体 321
         10.6 typedef的使用 321
         10.7 实例:高性能的洗牌与发牌模拟程序 322
         10.8 共用体 324
         10.9 位运算符 326
         10.10 位域 332
         10.11 枚举常贵 335
         第11章 文件处理 345
         11.1 引言 345
         11.2 数据的层次结构 346
         11.3 文件与流 347
         11.4 顺序存取文件的创建 348
         11.5 从顺序存取文件中读取数据 352
         11.6 随机存取文件 355
         11.7 随机存取文件的创建 356
         11.8 向一个随机存取文件中随机地写入数据 357
         11.9 从一个随机存取文件中读取数据 360
         11.10 案例学习:事务处理程序 361
         第12章 数据结构 374
         12.1 引言 374
         12.2 自引用结构体 375
         12.3 动态内存分配 376
         12.4 链表 377
         12.5 堆栈 384
         12.6 队列 388
         12.7 树 392
         第13章 C预处理 418
         13.1 引言 418
         13.2 #include预处理命令 419
         13.3 #define预处理命令:符号常量 419
         13.4 #define预处理命令:宏 419
         13.5 条件编译 421
         13.6 #error和#pragma预处理命令 422
         13.7 #和##运算符 422
         13.8 行号 423
         13.9 预定义的符号常景 423
         13.10 断言 423
         第14章 C语言的其他专题 428
         14.1 引言 428
         14.2 Linux/UNIX和Windows系统中输入/输出的重定向 429
         14.3 可变长的实参列表 429
         14.4 使用命令行实参 431
         14.5 由多个源文件组成的程序的编译问题 432
         14.6 使用exit和atexit终止程序 433
         14.7 volatile类型限定符 434
         14.8 整型和浮点型常量的后缀 434
         14.9 关于文件的深入讨论 435
         14.10 信号处理 436
         14.11 动态内存分配:calloc函数和realloc函数 438
         14.12 用goto实现无条件转移 439
         第15章 基于Allegro C函数库的游戏编程 444
         15.1 引言 445
         15.2 安装Allegro库 445
         15.3 一个简单的Allegro库程序 445
         15.4 简单的图形:位图的导入和块传送 446
         15.5 双缓冲动画显示技术 450
         15.6 导入和播放声音 455
         15.7 键盘输入 457
         15.8 字体和文本显示 461
         15.9 实现Pong游戏 465
         15.10 Allegro库的定时器 470
         15.11 Allegro库的Grabber工具和数据文件 473
         15.12 Allegro库的其他功能 480
         15.13 Allegro库的网络资源 480
         第16章 排序:更深入的透视 487
         16.1 引言 487
         16.2 大O记号 488
         16.3 选择排序 488
         16.4 插入排序 491
         16.5 归并排序 493
         第17章 C99简介 502
         17.1 引言 503
         17.2 对C99的支持 503
         17.3 新的C99头文件 504
         17.4 //单行注释符 504
         17.5 声明语句和可执行代码的混合使用 504
         17.6 在for语句头声明一个变量 505
         17.7 指派初始化和复合文本 506
         17.8 布尔类型 508
         17.9 函数声明中的隐式int类型 509
         17.10 复数 510
         17.11 可变长数组 511
         17.12 C99其他的特征 512
         17.13 因特网和万维网上的资源 515
         第18章 C++,一个更好的C;介绍对象技术 519
         18.1 引言 520
         18.2 C++ 520
         18.3 简单程序:两个整数相加 520
         18.4 C++标准库 522
         18.5 头文件 522
         18.6 内联函数 523
         18.7 引用和引用形参 525
         18.8 空形参列表 528
         18.9 默认实参 529
         18.10 一元作用域运算符 530
         18.11 函数重载 531
         18.12 函数模板 533
         18.13 对象技术与UML简介 535
         18.14 本章小结 539
         第19章 类与对象简介 544
         19.1 引言 544
         19.2 类、对象、成员函数以及数据成员 545
         19.3 本章实例概述 545
         19.4 定义一个具有成员函数的类 546
         19.5 定义一个有参成员函数 548
         19.6 数据成员、set函数与get函数 551
         19.7 用构造函数初始化对象 556
         19.8 将类放在单独的文件中以增强重用性 558
         19.9 将接口与实现分离 561
         19.10 用set函数验证数据 565
         19.11 本章小结 569
         第20章 类:深入剖析(第1部分) 574
         20.1 引言 574
         20.2 Time类的案例学习 575
         20.3 类域和访问类的成员 580
         20.4 将接口与实现分离 581
         20.5 访问函数和工具函数 581
         20.6 Time类的案例学习:具有默认实参的构造函数 584
         20.7 析构函数 587
         20.8 构造函数与析构函数的调用时间 588
         20.9 Time类的案例学习:隐蔽陷阱——返回private数据成员的引用 590
         20.10 默认按成员赋值 592
         20.11 软件重用性 594
         20.12 本章小结 594
         第21章 类:深入剖析(第2部分) 599
         21.1 引言 600
         21.2 const对象和const成员函数 600
         21.3 组合:对象作为类的成员 607
         21.4 友元函数和友元类 612
         21.5 使用this指针 614
         21.6 用new和delete运算符进行动态内存管理 618
         21.7 static类成员 620
         21.8 数据抽象和信息隐藏 624
         21.9 容器类和迭代器 626
         21.10 代理类 626
         21.11 本章小结 628
         第22章 运算符重载 633
         22.1 引言 633
         22.2 运算符重载基础 634
         22.3 运算符重载的限制 635
         22.4 作为类的成员和作为全局函数的运算符函数的比较 636
         22.5 重载流插入和流读取运算符 637
         22.6 重载一元运算符 640
         22.7 重载二元运算符 640
         22.8 案例学习:Array类 640
         22.9 类型转换 649
         22.10 重载++和-- 650
         22.11 explicit构造函数 651
         22.12 本章小结 653
         第23章 面向对象编程:继承 663
         23.1 引言 664
         23.2 基类和派生类 664
         23.3 protected成员 666
         23.4 基类和派生类的关系 667
         23.5 派生类的构造函数与析构函数 689
         23.6 public,protected和private继承 695
         23.7 关于继承的软件工程 696
         23.8 本章小结 696
         第24章 面向对象编程:多态 701
         24.1 引言 702
         24.2 多态的实例 703
         24.3 继承层次结构中对象间的关系 703
         24.4 类型域和switch语句 716
         24.5 抽象类和纯虚函数 716
         24.6 案例学习:利用多态的工资系统 718
         24.7 (选修)多态、虚函数以及动态绑定 730
         24.8 案例学习:利用多态的和运行时类型信息的工资系统,通过向下类型转换、dynamic_cast、typeid 以及type_info 使用运行时类型信息 733
         24.9 虚析构函数 736
         24.10 本章小结 736
         第25章 模板 740
         25.1 引言 740
         25.2 函数模板 741
         25.3 重载函数模板 743
         25.4 类模板 744
         25.5 类模板的非类型形参和默认类型 748
         25.6 模板与继承 749
         25.7 模板与友元 749
         25.8 模板与static成员 750
         25.9 本章小结 750
         第26章 输入/输出流 755
         26.1 引言 756
         26.2 流 756
         26.3 输出流 759
         26.4 输入流 760
         26.5 用read,write和gcount进行无格式I/O 763
         26.6 流操纵符简介 764
         26.7 流格式状态和流操纵符 768
         26.8 流错误状态 775
         26.9 将输出流绑定到输入流上 777
         26.10 本章小结 777
         第27章 异常处理 786
         27.1 引言 787
         27.2 异常处理概述 787
         27.3 实例:处理除数为0的异常 788
         27.4 何时使用异常处理 792
         27.5 重新拋出异常 793
         27.6 异常规范 794
         27.7 处理未预料的异常 794
         27.8 栈展开 795
         27.9 构造函数、析构函数与异常处理 796
         27.10 异常与继承 796
         27.11 处理new故障 797
         27.12 auto_ptr类与动态内存分配 800
         27.13 标准库的异常层次结构 801
         27.14 其他错误处理技术 802
         27.15 本章小结 803
         附录A 因特网和Web资源 809
         附录B 运算符优先级表 822
         附录C ASCII字符集 825
         附录D 数制系统 826
         附录E 游戏编程:求解Sudoku问题 836
         索引 843
      · · · · · ·     (
收起)