目录 1
译者序 1
前言 1
第1章 基本概念 1
1.1 引言 1
1.2 计算机是什么 3
1.3 计算机的结构 3
1.4 批处理、多道程序设计和分时 4
1.5 个人计算、分布式计算和客户/服务器计算 4
1.6 机器语言、汇编语言和高级语言 4
1.7 C语言的历史 5
1.8 C标准库 6
1.9 其它高级语言 7
1.10 结构化程序设计 7
1.11 C环境的基本知识 8
1.12 对C语言和本书的总的说明 9
1.14 面向对象的程序设计和C++语言 10
1.13 ConcurrentC 10
第2章 C语言程序设计入门 19
2.1 引言 19
2.2 一个简单的C语言程序:打印一行文本 19
2.3 另一个简单的C语言程序:求两个整数的和 23
2.4 内存的概念 27
2.5 C语言的算术运算符 28
2.6 判断语句:相等测试运算符和关系运算符 31
3.2 算法 48
第3章 结构化程序的开发 48
3.1 引言 48
3.3 伪码 49
3.4 控制结构 49
3.5 if选择结构 51
3.6 if/else选择结构 52
3.7 while循环结构 56
3.8 制定算法:实例研究1(计数器控制的循环) 58
3.9 用自顶向下、逐步求精的方法制定算法:实例研究2(标记控制的循环) 59
3.10 用自顶向下、逐步求精的方法制定算法:实例研究3(嵌套控制结构) 65
3.11 赋值运算符 68
3.12 自增和自减运算符 69
第4章 程序控制 90
4.1 引言 90
4.2 循环的本质 90
4.3 计数器控制的循环 91
4.4 for循环结构 93
4.5 for结构:说明和评述 95
4.6 for结构用法举例 96
4.7 switch多路选择结构 99
4.8 do/while循环结构 104
4.9 break和continue语句 106
4.10 逻辑运算符 108
4.11 容易混淆的相等测试运算符(==)和赋值运算符(=) 110
4.12 结构化程序设计小结 112
第5章 函数 129
5.1 引言 129
5.3 数学库函数 130
5.2 C语言的程序模块 130
5.4 函数 132
5.5 函数定义 132
5.6 函数原型 137
5.7 头文件 139
5.8 函数调用:传值调用和传引用调用 140
5.9 随机数的产生 140
5.10 范例:碰运气游戏 145
5.11 存储类别 147
5.12 作用域规则 150
5.13 递归 152
5.14 递归应用举例:斐波纳契(Fibonacci)数列 155
5.15 递归与迭代的比较 159
第6章 数组 180
6.1 引言 180
6.2 数组 180
6.3 数组的声明 182
6.4 数组使用举例 182
6.5 把数组传递给函数 195
6.6 数组排序 199
6.7 实例研究:用数组计算均值(mean)、中位值(median)和众数(mode) 201
6.8 数组查找 205
6.9 多维数组 210
第7章 指针 234
7.1 引言 234
7.2 指针变量的声明和初始化 234
7.3 指针运算符 235
7.4 函数的传引用调用 238
7.5 对指针使用const限定符 241
7.6 使用传引用调用的泡沫排序法 247
7.7 指针表达式和指针的算术运算 251
7.8 指针和数组的关系 254
7.9 指针数组 258
7.10 实例研究:洗牌和发牌模拟 258
7.11 指向函数的指针 263
专题:建立自己的编译器 278
8.2 字符串和字符的基本知识 290
第8章 字符和字符串 290
8.1 引言 290
8.3 字符处理函数库 291
8.4 字符串转换函数 296
8.5 标准输入/输出库函数 301
8.6 字符串处理库中的字符操作函数 304
8.7 字符串处理库中的比较函数 306
8.8 字符串处理库中的查找函数 308
8.9 字符串处理库中的内存函数 314
8.10 字符串处理库中的其它函数 318
专题:高级字符串操作练习 327
第9章 格式化输入/输出 332
9.1 引言 332
9.2 流 332
9.3 printf的格式化输出 333
9.4 打印整数 333
9.5 打印浮点数 335
9.6 打印字符串和字符 336
9.7 其它转换说明符 337
9.8 打印的域宽和精度 339
9.9 在printf的格式控制串中使用标志 341
9.10 打印直接量和转义序列 344
9.11 scanf函数的格式化输入 345
第10章 结构、联合、位运算和枚举 359
10.1 引言 359
10.2 结构的定义 359
10.3 结构的初始化 361
10.4 访问结构成员 362
10.5 结构和函数 363
10.6 类型定义:typedef 364
10.7 范例:高效的洗牌和发牌模拟 365
10.8 联合 367
10.9 位运算符 370
10.10 位段 377
10.11 枚举常量 381
11.2 数据的层次结构 393
11.1 引言 393
第11章 文件处理 393
11.3 文件和流 395
11.4 建立顺序存取文件 396
11.5 读取顺序存取文件中的数据 401
11.6 随机存取文件 405
11.7 建立随机存取文件 406
11.8 向随机存取文件中随机地写入数据 408
11.9 从随机存取文件中随机地读取数据 410
11.10 实例研究:事务处理程序 411
第12章 数据结构 426
12.1 引言 426
12.2 自引用结构 427
12.3 动态内存分配 427
12.4 链表 429
12.5 堆栈 437
12.6 队列 442
12.7 树 448
13.1 引言 476
13.2 预处理指令#include 476
第13章 预处理程序 476
13.3 预处理指令#define:符号常量 477
13.4 预处理指令#define:宏 477
13.5 条件编译 479
13.6 预处理指令#error和#program 480
13.7 运算符#和 480
13.9 预定义的符号常量 481
13.10 宏assert 481
13.8 行号 481
第14章 高级话题 486
14.1 引言 486
14.2 UNIX和DOS系统中的输入/输出重定向 486
14.3 变长参数列表 487
14.4 使用命令行参数 489
14.5 对编译多个源文件程序的说明 490
14.6 用exit和atexit终止程序的执行 492
14.8 整数和浮点数常数的后缀 494
14.9 再谈文件 494
14.7 类型限定符volatile 494
14.10 信号处理 497
14.11 动态内存分配:函数calloc和realloc 499
14.12 无条件转移:goto语句 499
第15章 把C++看作更好的C 507
15.1 引言 507
15.2 C++的单行注释 508
15.3 C++的输入/输出流 509
15.4 C++中的声明 510
15.5 在C++中建立新的数据类型 511
15.6 函数原型和类型检查 512
15.7 内联函数 513
15.8 引用参数 517
15.9 const限定符 521
15.10 动态内存分配:new和delete运算符 523
15.11 默认参数 524
15.12 单目作用域运算符 525
15.13 函数重载 526
15.15 函数模板 529
15.14 连接说明 529
第16章 类和数据抽象(第一部分) 539
16.1 引言 539
16.2 结构的定义 541
16.3 访问结构的成员 541
16.4 用结构实现用户定义的类型Time 542
16.5 用类实现抽象数据类型Time 544
16.6 类的作用域和访问类的成员 550
16.7 接口和实现的分离 550
16.8 控制对成员的访问 553
16.9 访问函数和工具函数 557
16.10 初始化类的对象:构造函数 558
16.11 在构造函数中使用默认参数 561
16.12 析构函数的使用 561
16.13 调用析构函数和构造函数的时机 565
16.14 数据成员和成员函数的使用 567
16.15 微妙的陷阱:返回对私有数据成员的引用 572
16.16 拷贝逐个成员的默认赋值方式 575
16.17 软件的可重用性 576
第17章 类和数据抽象(第二部分) 584
17.1 引言 584
17.2 const对象和const成员函数 584
17.3 复合:把类作为其它类的成员 592
17.4 友元函数和友元类 596
17.5 使用this指针 599
17.6 动态内存分配:运算符new和delete 604
17.7 类的静态成员 605
17.8 数据抽象和信息隐藏 609
17.8.1 范例:数组抽象数据类型 610
17.8.2 范例:字符串抽象数据类型 611
17.8.3 范例:队列抽象数据类型 611
17.9 包容器类和递取类 612
17.10 模板类 612
第18章 运算符重载 620
18.1 引言 620
18.2 运算符重载的基本知识 621
18.3 运算符重载的限制 622
18.4 用作类成员的运算符函数和用作友元函数的运算符函数 623
18.5 重载流插入和流提取运算符 624
18.6 重载单目运算符 627
18.7 重载双目运算符 628
18.8 实例研究:数组类Array 628
18.9 类型之间的转换 638
18.10 实例研究:字符串类String 639
18.11 重载++和-- 649
18.12 实例研究:类Date 650
第19章 继承 667
19.1 引言 667
19.2 基类和派生类 668
19.3 受保护的成员 670
19.4 把基类指针强制转换为派生类指针 670
19.5 使用成员函数 675
19.6 在派生类中重定义基类成员 675
19.9 在派生类中使用构造函数和析构函数 680
19.8 直接基类和间接基类 680
19.7 公有的、受保护的和私有的基类 680
19.10 把派生类对象隐式转换为基类对象 684
19.11 关于继承的软件工程 685
19.12 复合与继承的比较 686
19.13 对象的“使用”关系和“知道”关系 686
19.14 实例研究:类Point、Circle和Cylinder 687
19.15 多重继承 694
20.2 类型域和switch语句 704
20.1 引言 704
第20章 虚函数和多态性 704
20.3 虚函数 705
20.4 抽象基类和具体类 706
20.5 多态性 707
20.6 实例研究:利用多态性的工资单系统 708
20.7 新类和动态联编 718
20.8 虚析构函数 718
20.9 实例研究:继承接口和实现 719
第21章 C++输入/输出流 730
21.1 引言 731
21.2 流 732
21.2.1 iostream类库的头文件 732
21.2.2 输入/输出流类和对象 732
21.3 输出流 734
21.3.1 流插入运算符 734
21.3.2 连续使用流插入/提取运算符 736
21.3.3 输出char*类型的变量 737
21.3.4 用成员函数put输出字符和put函数的连续调用 737
21.4.1 流提取运算符 738
21.4 输入流 738
21.4.2 成员函数get和getline 740
21.4.3 类istream中的其它成员函数(peek、putback和ignore) 743
21.4.4 类型安全的I/O 743
21.5 成员函数read、gcount和write的无格式输入/输出 743
21.6 流操纵算子 745
21.6.1 整数流的基数:流操纵算子dec、oct、hex和setbase 745
21.6.2 设置浮点数精度(precision、setprecision) 746
21.6.3 设置域宽(setw、width) 747
21.7 流格式状态 748
21.6.4 用户自定义的操纵算子 748
21.7.1 格式状态标志 750
21.7.2 尾数零和小数点(ios::showpoint) 751
21.7.3 对齐(ios::left、ios::right、ios::internal) 751
21.7.4 设置填充字符(fill、setfill) 753
21.7.5 整数流的基数(ios::dec,ios::oct, 754
ios::hex,ios::showbase) 754
21.7.6 浮点数和科学记数法(ios::scientific,ios::fixed) 755
21.7.7 大/小写控制(ios::uppercase) 756
21.7.8 设置及清除格式标志(flags,setios-flags,resetiosflags) 757
21.8 流错误状态 758
21.9 用户自定义类型的I/O 760
21.10 把输出流系到输入流上 762
附录A C语法 777
附录B 标准库 789
附录C 运算符的优先级与结合性 818
附录D ASCII字符集 819
附录E 数值系统 820