第1章 计算机、Internet和万维网入门 1
1.1 简介 1
1.2 计算机是什么 3
1.3 计算机的组织 3
1.4 操作系统的演变 4
1.5 个人计算、分布计算和客户/服务器
计算 5
1.6 机器语言、汇编语言和高级语言 5
1.7 C语言的历史 7
1.8 C语言的标准库 8
1.9 重要的软件发展趋势:面向对象的
技术 8
1.10 C++语言以及C++编程 10
1.11 Java语言以及Java编程 11
1.12 其他高级语言 11
1.13 结构化编程 12
1.14 C程序开发环境基础 12
1.15 硬件趋势 15
1.16 Internet的历史 15
1.17 万维网的历史 17
1.18 C语言及本书的注意事项 17
自测练习 18
练习 19
第2章 C程序设计入门 21
2.1 简介 21
2.2 一个简单的C程序:显示一行文本 21
2.3 另一个简单的C程序:两个整数相加 25
2.4 内存的概念 29
2.5 C的算术运算 30
2.6 判断:等式和关系运算符 34
自测练习 37
练习 41
第3章 C语言结构化程序开发 46
3.1 简介 46
3.2 算法 46
3.3 伪代码 47
3.4 控制结构 47
3.5 if 选择结构 49
3.6 if/else选择结构 51
3.7 while循环结构 55
3.8 表述算法:案例研究1(计数器控制
的循环) 56
3.9 使用自顶向下、逐步求精方法表述
算法:案例研究2(标记控制循环) 58
3.10 使用自顶向下、逐步求精方法表述
算法:案例研究3(嵌套控制结构) 64
3.11 赋值运算符 68
3.12 递增运算符和递减运算符 68
自测练习 71
练习 75
第4章 C程序控制 85
4.1 简介 85
4.2 循环的本质 85
4.3 计数器控制的循环 86
4.4 for循环结构 88
4.5 for结构:说明和观察 90
4.6 使用for结构的示例 91
4.7 switch多重选择结构 95
4.8 do/while循环结构 100
4.9 break和continue语句 102
4.10 逻辑运算符 103
4.11 相等运算符(==)和赋值运算符
(=) 106
4.12 结构化编程小结 108
自测练习 113
练习 116
第5章 C函数 123
5.1 简介 123
5.2 C语言的程序模块 123
5.3 数学库函数 124
5.4 函数 126
5.5 函数的定义 126
5.6 函数原型 130
5.7 头文件 133
5.8 调用函数:按值调用和按引用调用 134
5.9 随机数的生成 134
5.10 示例:运气游戏 139
5.11 存储类别 142
5.12 作用域的规则 144
5.13 递归 147
5.14 递归实例:斐波纳契数列 150
5.15 递归与迭代 154
自测练习 156
练习 161
第6章 C数组 171
6.1 简介 171
6.2 数组 171
6.3 声明数组 173
6.4 数组使用示例 173
6.5 数组传递给函数 185
6.6 排序数组 190
6.7 案例研究:用数组计算平均值、中值
和最频值 192
6.8 查找数组 196
6.9 多维数组 201
自测练习 207
练习 210
第7章 C指针 222
7.1 简介 222
7.2 指针变量声明和初始化 222
7.3 指针运算符 223
7.4 按引用调用函数 226
7.5 使用指针的const限定符 229
7.6 使用按引用调用的冒泡排序 235
7.7 指针表达式和指针算法 240
7.8 指针和数组的关系 243
7.9 指针数组 247
7.10 案例研究:洗牌和发牌模拟 248
7.11 函数指针 253
自测练习 257
练习 260
第8章 C字符和字符串 275
8.1 简介 275
8.2 字符串和字符的基本知识 275
8.3 字符处理库 277
8.4 字符串转换函数 282
8.5 标准输入/输出库函数 287
8.6 字符串处理库的字符串处理函数 291
8.7 字符处理库的比较函数 293
8.8 字符串处理库的查找函数 295
8.9 字符串处理库的内存函数 301
8.10 字符串处理库的其他函数 305
自测练习 306
练习 309
第9章 C格式化的输入/输出 316
9.1 简介 316
9.2 流 316
9.3 用printf格式化输出 316
9.4 打印整数 317
9.5 打印浮点数 318
9.6 打印字符串和字符 320
9.7 其他转换说明符 321
9.8 用字段宽度和精度打印 323
9.9 在printf格式控制字符串中使用标记 325
9.10 打印字面量和转义序列 328
9.11 用scanf格式化输入 329
自测练习 335
练习 337
第10章 C结构、联合、位操作和枚举 340
10.1 简介 340
10.2 结构定义 340
10.3 初始化结构 343
10.4 访问结构成员 343
10.5 在函数中使用结构 345
10.6 typedef 345
10.7 示例:高性能洗牌和发牌仿真程序 346
10.8 联合 349
10.9 位运算符 351
10.10 位字段 359
10.11 枚举常量 362
自测练习 363
练习 366
第11章 C文件处理 370
11.1 简介 370
11.2 数据层次结构 370
11.3 文件和流 372
11.4 创建顺序存取文件 373
11.5 从顺序存取文件中读取数据 377
11.6 随机存取文件 382
11.7 创建随机存取文件 383
11.8 随机向随机存取文件中写入数据 385
11.9 随机从随机存取文件中读取数据 387
11.10 案例研究:事务处理程序 389
自测练习 394
练习 396
第12章 C数据结构 401
12.1 简介 401
12.2 自引用结构 402
12.3 动态内存分配 402
12.4 链表 403
12.5 堆栈 412
12.6 队列 417
12.7 树 424
自测练习 429
练习 432
第13章 C预处理器 452
13.1 简介 452
13.2 #include预处理器伪指令 452
13.3 #define预处理器伪指令:符号常量 453
13.4 #define预处理器伪指令:宏 453
13.5 条件编译 455
13.6 #error和#pragma预处理器伪指令 456
13.7 #和##运算符 456
13.8 行号 457
13.9 预定义符号常量 457
13.10 断言 458
自测练习 458
练习 460
第14章 C语言高级技术 461
14.1 简介 461
14.2 在UNIX和DOS系统上重定向
输入/输出 461
14.3 变长参数列表 462
14.4 使用命令行参数 464
14.5 编译多个源文件程序的注释 465
14.6 使用exit和atexit终止程序 467
14.7 volatile类型限定符 469
14.8 整数和浮点常量的前缀 469
14.9 其他文件问题 469
14.10 信号处理 471
14.11 动态内存分配:函数calloc和
realloc 474
14.12 无条件分支:goto 474
自测练习 476
练习 476
第2部分 C++编程
第15章 C的增强版本C++ 479
15.1 简介 479
15.2 C++ 479
15.3 简单的程序:两个整数相加 480
15.4 C++标准库 483
15.5 头文件 483
15.6 嵌入函数 485
15.7 引用和引用参数 487
15.8 默认参数和空参数列表 491
15.9 一元作用域解析运算符 493
15.10 函数重载 495
15.11 函数模板 497
自测练习 499
练习 500
第16章 C++类和数据抽象 502
16.1 简介 502
16.2 用类实现时间抽象数据类型 503
16.3 类作用域和访问类成员 509
16.4 从实现中分离接口 511
16.5 控制访问成员 515
16.6 访问函数和实用函数 517
16.7 初始化类对象:构造函数 520
16.8 通过构造函数使用默认参数 521
16.9 使用析构函数 525
16.10 何时调用构造函数和析构函数 526
16.11 使用数据成员和成员函数 529
16.12 微妙的陷阱:返回private数据
成员的引用 534
16.13 使用默认的按成员复制来赋值 536
16.14 软件重用性 538
自测练习 538
练习 539
第17章 C++类:第二部分 542
17.1 简介 542
17.2 const(常量)对象和const成员函数 542
17.3 复合:作为类成员的对象 551
17.4 friend函数和friend类 556
17.5 使用this指针 560
17.6 使用运算符new和delete动态
分配内存 565
17.7 static类成员 566
17.8 数据抽象和信息隐藏 572
17.8.1 示例:数组抽象数据类型 573
17.8.2 示例:字符串抽象数据类型 574
17.8.3 示例:队列抽象数据类型 574
17.9 容器类和迭代器 575
自测练习 575
练习 576
第18章 C++运算符重载 578
18.1 简介 578
18.2 运算符重载的基础知识 579
18.3 运算符重载的限制 580
18.4 作为类成员和友元函数的运算符函数 581
18.5 重载流插入和流提取运算符 582
18.6 重载一元运算符 585
18.7 重载二元运算符 586
18.8 案例研究:数组类 587
18.9 类型转换 600
18.10 重载++和 601
自测练习 602
练习 603
第19章 C++继承 607
19.1 简介 607
19.2 继承:基类和派生类 608
19.3 Protected 成员 610
19.4 基类指针转换为派生类指针 611
19.5 使用成员函数 616
19.6 在派生类中覆盖基类成员 617
19.7 公共、受保护和私有继承 621
19.8 直接基类和间接基类 622
19.9 在派生类中使用构造函数和析构
函数 622
19.10 隐含派生类对象到基类对象的
转换 626
19.11 使用继承的软件工程 627
19.12 复合与继承 628
19.13 “使用一个”和“了解一个”
的关系 628
19.14 案例研究:点、圆和圆柱 629
自测练习 637
练习 637
第20章 C++虚拟函数和多态性 639
20.1 简介 639
20.2 类型字段和switch语句 639
20.3 虚拟函数 640
20.4 抽象基类和具体类 640
20.5 多态性 641
20.6 新类和动态绑定 643
20.7 虚拟析构函数 643
20.8 案例研究:继承接口和实现 644
20.9 多态性、虚拟函数和动态绑定内幕 652
自测练习 655
练习 655
第21章 C++流输入/输出 657
21.1 简介 657
21.2 流 658
21.2.1 iostream库头文件 658
21.2.2 流输出/输入类和对象 658
21.3 流输出 660
21.3.1 流插入运算符 660
21.3.2 级联流插入/提取运算符 662
21.3.3 char *变量的输出 663
21.3.4 用成员函数put输出字符:
级联多个put 664
21.4 流输入 664
21.4.1 流提取运算符 664
21.4.2 get和getline成员函数 667
21.4.3 istream成员函数peek、
putback和ignore 670
21.4.4 类型安全的输入/输出 670
21.5 用read、gcount和write的非格式
化输入/输出 670
21.6 流操纵符 671
21.6.1 整数流基数:dec、oct、hex
和setbase 672
21.6.2 浮点精度(precision,
setprecision) 673
21.6.3 字段宽度(setw, width) 674
21.6.4 用户定义操纵符 676
21.7 流格式状态 677
21.7.1 格式状态标记 677
21.7.2 尾部0和小数点
(ios::showpoint) 678
21.7.3 对齐(ios::left,ios::right,
ios::internal) 679
21.7.4 填充(fill, setfill) 681
21.7.5 整数流基数(ios::dec,ios::oct,
ios::hex,ios::showbase) 682
21.7.6 浮点数:科学记数法
(ios::scientific, ios::fixed) 683
21.7.7 大写/小写控制
(ios::uppercase) 684
21.7.8 设置和重新设置状态标记
(flags, setiosflags,
resetiosflags) 685
21.8 流错误状态 687
21.9 将输出流转移到输入流 689
自测练习 689
练习 694
第22章 C++模板 697
22.1 简介 697
22.2 类模板 697
22.3 类模板与非类型参数 703
22.4 模板与继承 704
22.5 模板与友元 704
22.6 模板与static成员 706
自测练习 706
练习 707
第23章 C++异常处理 708
23.1 简介 708
23.2 何时使用异常处理 710
23.3 其他错误处理技术 710
23.4 C++异常处理基础知识:
try、throw、catch 711
23.5 异常处理的简单例子:零除 712
23.6 引发异常 714
23.7 捕获异常 715
23.8 重新引发异常 718
23.9 异常规约 720
23.10 处理无法预料的异常 720
23.11 堆栈展开 721
23.12 构造函数、析构函数与异常处理 722
23.13 异常与继承 723
23.14 处理new错误 723
23.15 auto_ptr类与动态内存分配 727
23.16 标准库异常层次 729
自测练习 730
练习 731
第3部分 Java编程
第24章 Java应用程序与小程序入门 733
24.1 简介 733
24.2 典型的Java环境基础 734
24.3 Java和本书的总说明 737
24.4 简单的程序:打印文本行 738
24.5 另一个Java应用程序:整数相加 745
24.6 Java 2 SDK的小程序示例 751
24.6.1 TicTacToe小程序 751
24.6.2 DrawTest小程序 754
24.6.3 Java2D小程序 755
24.7 一个简单的Java小程序:绘制
字符串 756
24.8 另外两个示例:绘制字符串与线 762
24.9 另一个Java小程序:整数相加 764
自测练习题 771
练习 773
第25章 独特的Java运算符、
方法与数组 775
25.1 简介 775
25.2 基本数据类型与关键字 775
25.3 逻辑运算符 777
25.4 方法定义 782
25.5 Java API 包 787
25.6 随机数生成 791
25.7 示例:运气游戏 794
25.8 JApplet类的方法 802
25.9 数组的声明与分配 804
25.10 数组应用示例 804
25.11 引用和引用参数 815
25.12 多维数组 815
自测练习 819
练习 821
第26章 基于对象的Java编程 826
26.1 简介 826
26.2 用类实现时间抽象数据类型 827
26.3 类的作用域 834
26.4 创建包 835
26.5 类对象的初始化:构造函数 839
26.6 使用Set和Get方法 840
26.7 使用this引用 847
26.8 结束函数 850
26.9 静态类成员 850
自测练习 854
练习 855
第27章 面向对象的Java编程 859
27.1 简介 859
27.2 超类和子类 861
27.3 protected成员 863
27.4 超类对象和子类对象的关系 863
27.5 子类对象向超类对象的隐式转换 870
27.6 具有继承的软件工程 871
27.7 复合与继承的比较 872
27.8 多态简介 872
27.9 类型字段和switch语句 872
27.10 动态方法绑定 873
27.11 final方法和类 873
27.12 抽象超类和具体类 874
27.13 多态示例 875
27.14 新类和动态绑定 876
27.15 案例研究:继承接口和实现 877
27.16 案例研究:创建和使用接口 883
27.17 内部类定义 889
27.18 内部类定义的说明 900
27.19 基本类型的类型包装类 900
自测练习 901
练习 901
第28章 Java图形和Java2D 904
28.1 简介 904
28.2 图形环境和图形对象 906
28.3 颜色控制 907
28.4 字体控制 914
28.5 绘制直线、矩形和椭圆 920
28.6 绘制弧 923
28.7 绘制多边形和折线 926
28.8 Java2D API 929
28.9 Java2D形状 929
自测练习 937
练习 938
第29章 Java GUI组件 941
29.1 简介 941
29.2 Swing概述 942
29.3 JLabel 944
29.4 事件处理模型 948
29.5 JTextField和JPasswordField 950
29.6 JTextArea 956
29.7 JButton 959
29.8 JCheckBox 963
29.9 JComboBox 966
29.10 鼠标事件处理 969
29.11 布局管理器 974
29.11.1 FlowLayout 974
29.11.2 BorderLayout 977
29.11.3 GridLayout 980
29.12 面板 983
29.13 创建自包含的Jpanel子类 984
29.14 窗口 990
29.15 使用有边框的菜单 992
自测练习 999
练习 1001
第30章 Java多媒体:图像、
动画及音频 1004
30.1 简介 1004
30.2 加载、显示和缩放图像 1005
30.3 加载和播放音频剪辑 1008
30.4 使一系列图像动起来 1011
30.5 动画问题 1016
30.6 通过param HTML标记自定义
小程序 1017
30.7 图像映射 1022
30.8 Java插件 1025
30.9 Internet和万维网资源 1027
自测练习 1027
练习 1028
第4部分 附 录
附录A Internet与Web资源 1031
A.1 C/C++资源 1031
A.2 C++教程 1033
A.3 C/C++ FAQ 1034
A.4 Visual C++ 1034
A.5 comp.lang.c++ 1035
A.6 C/C++编译程序 1037
A.7 C++开发工具 1039
A.8 Java资源 1039
A.9 Java产品 1041
A.10 Java FAQ 1042
A.11 Java教程 1042
A.12 Java期刊 1043
A.13 Java 小程序 1043
A.14 多媒体 1044
A.15 Java 新闻组 1045
附录B C99 Internet与Web资源 1047
附录C 运算符优先级 1050
附录D ASCII字符集 1055
附录E 数制系统 1056
E.1 简介 1056
E.2 将二进制数缩写为八进制和
十六进制数 1059
E.3 将八进制数和十六进制数
转换成二进制数 1060
E.4 从二进制、八进制、十六进制
转换成十进制 1060
E.5 从十进制转换为八进制、十六进制
或二进制 1061
E.6 负二进制数:补码记数法 1063
自测练习 1064
练习 1066