《C++精解和程序设计》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:(美)弗里德曼(Friedman,F L),(美)考夫曼(Koffman,E.B.)著;温秀梅等译
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2008
  • ISBN:9787111238942
  • 页数:509 页
图书介绍:本书介绍C++这一程序设计语言。

第1章 计算机、问题求解及程序设计导言 1

1.1计算机概述 1

1.1.1早期的计算机 1

1.1.2计算机的分类 2

1.1.3计算机资源共享 2

1.2计算机硬件 3

1.2.1存储器 4

1.2.2中央处理器CPU 6

1.2.3输入/输出设备 7

1.2.4计算机网络 7

1.2.5万维网 8

1.3计算机软件 9

1.3.1操作系统 9

1.3.2应用软件 11

1.3.3程序设计语言 11

1.3.4面向对象程序设计 12

1.4高级语言程序设计的处理 13

1.5软件开发方法 16

1.5.1明确问题需求阶段 16

1.5.2分析问题阶段 16

1.5.3设计阶段 17

1.5.4实现 17

1.5.5测试 18

1.5.6维护 18

1.5.7如何面对软件开发过程中的失败 18

1.6应用软件开发方法 18

1.7计算机程序员的职业道德 20

1.7.1隐私和数据误用 20

1.7.2计算机黑客 20

1.7.3剽窃和软件盗版 21

1.7.4计算机资源的误用 21

本章小结 22

快速检测习题 22

复习题 23

采访Bjarne Stroustrup 23

第2章C++概述 26

2.1 C++语言基本语法成分 26

2.1.1注释 27

2.1.2编译预处理命令#include 27

2.1.3命名空间Namespace std 28

2.1.4 main函数 28

2.1.5声明语句 29

2.1.6可执行语句 29

2.2保留字和标识符 30

2.2.1保留字 30

2.2.2标识符 31

2.2.3大写字母和小写字母 31

2.2.4程序风格——选择标识符的名称 31

2.3数据类型和声明 32

2.3.1数据类型 32

2.3.2 string类 34

2.3.3数据类型的意义 35

2.3.4声明 35

2.3.5常量声明 36

2.4可执行语句 38

2.4.1内存中的程序 38

2.4.2赋值语句 38

2.4.3输入/输出操作 39

2.4.4输入语句 40

2.4.5程序输出 41

2.4.6 return语句 42

2.5 C++程序的一般形式 43

2.5.1程序风格——程序中的空格 44

2.5.2程序中的注释 44

2.5.3程序风格——使用注释 44

2.6算术表达式 46

2.6.1“/和“%”运算符 46

2.6.2混合类型表达式的数据类型 47

2.6.3混合类型的赋值语句 47

2.6.4包含多个运算符的表达式 48

2.6.5C++中数学公式的写法 50

2.7交互模式、批处理模式和数据文件 54

2.7.1输入重定向 55

2.7.2程序风格——提示与回显输出 55

2.7.3输出重定向 56

2.8常见的程序设计错误 57

2.8.1语法错误 57

2.8.2运行时错误 58

2.8.3未检测到的错误 59

2.8.4逻辑错误 59

本章小结 60

快速检测习题 61

复习题 62

程序设计题 62

采访Josée Lajoie 64

第3章 使用函数和类进行自顶向下设计 66

3.1根据已有信息构建程序 66

3.2库函数 72

3.2.1程序风格——加下划线强调新结构 73

3.2.2 C++库函数 74

3.2.3预习 75

3.3自顶向下设计和结构图 76

3.4无参函数 77

3.4.1函数原型 78

3.4.2函数定义 78

3.4.3函数在程序中的布局 79

3.4.4程序风格——在函数声明和定义中使用注释 81

3.4.5函数的执行顺序 81

3.4.6使用函数子程序的优点 81

3.5带输入参数的函数 84

3.5.1带输入参数的void函数 84

3.5.2带输入参数并有一个返回值的函数 85

3.5.3程序风格——函数接口注释 87

3.5.4程序风格——问题输入与输入参数 87

3.5.5带多个参数的函数 88

3.5.6实参和形参列表的对应 89

3.5.7函数的数据区 89

3.5.8使用驱动程序测试函数 90

3.6名称作用域 91

3.7通过类扩展C++:使用string类 93

3.7.1 string类 93

3.7.2声明string对象 94

3.7.3读取和显示string对象 94

3.7.4字符串的赋值和连接 94

3.7.5运算符重载 95

3.7.6点表示法(函数length和at的调用) 95

3.7.7用于字处理操作的成员函数 95

3.7.8把子串赋给string对象 96

3.8常见程序设计错误 97

本章小结 99

快速检测习题 100

复习题 101

程序设计题 101

采访Mark Hall 103

第4章 选择结构:if和switch语句 105

4.1控制结构 105

4.2逻辑表达式 106

4.2.1使用关系和相等运算符的逻辑表达式 106

4.2.2使用逻辑运算符的逻辑表达式 107

4.2.3运算符的优先级 108

4.2.4书写C++条件 109

4.2.5字符和字符串的比较 110

4.2.6布尔类型赋值 110

4.2.7布尔类型值的表示 111

4.2.8用整数表示逻辑值 111

4.3 if控制语句概述 112

4.3.1带两个分支的if语句 112

4.3.2简单if语句 113

4.3.3带有字符和字符串的if语句条件 114

4.3.4 if语句的格式 115

4.4带复合选项的if语句 116

4.4.1程序风格——使用复合的true或false语句编写if语句 117

4.4.2跟踪if语句 117

4.5算法的决策步骤 119

4.5.1程序风格——使用全局常量增强程序的可读性和可维护性 124

4.5.2关于标识符作用域的注意事项 124

4.5.3在结构图中添加数据流信息 124

4.5.4关于软件开发方法的说明 125

4.6检查算法的正确性 125

4.7嵌套if语句和多分支条件判断 127

4.7.1嵌套if语句和if语句序列的比较 127

4.7.2把嵌套if语句写成多分支条件判断语句 128

4.7.3条件顺序 128

4.7.4程序风格——验证变量值 130

4.7.5逻辑表达式的短路检测 131

4.8 switch控制语句 132

4.8.1正确使用break关键字 134

4.8.2嵌套if语句和switch语句的比较 134

4.8.3使用switch语句选择候选函数 134

4.9常见的程序设计错误 136

本章小结 136

快速检测习题 138

复习题 139

程序设计题 140

第5章 重复和循环语句 143

5.1计数循环和while语句 143

5.1.1while语句 144

5.1.2while语句的语法规则 145

5.2在循环中累计求和或乘积 147

5.2.1程序风格——编写通用的循环 148

5.2.2求一组数据的乘积 149

5.2.3复合赋值运算符 149

5.3 for语句 151

5.3.1程序风格——for语句的格式 152

5.3.2自增/自减运算符 152

5.3.3程序风格——局部变量的声明 153

5.3.4步长不为1的自增/自减 154

5.3.5将结果以表格形式显示 154

5.4条件循环 156

5.4.1循环控制变量递减的循环 157

5.4.2执行次数为零的循环 160

5.4.3程序风格——在函数子程序中执行循环 160

5.4.4更为通用的条件循环 160

5.5循环设计和循环模式 161

5.5.1哨兵值控制的循环 161

5.5.2计算平均值 162

5.5.3标志控制的循环 162

5.6 do-while语句 166

5.7 while、for和do-while循环回顾 169

5.8循环嵌套 171

5.9调试、测试程序 174

5.9.1使用调试器 174

5.9.2不使用调试器调试程序 175

5.9.3差1错误 176

5.9.4测试 176

5.10常见的程序设计错误 176

本章小结 178

快速检测习题 180

复习题 181

程序设计题 182

采访Mike Weisert 184

第6章 模块化程序设计 186

6.1值和引用参数 186

6.1.1值调用参数与引用调用参数 188

6.1.2 void类型的函数能够返回结果 189

6.1.3使用引用参数或值参数的时机 189

6.1.4程序风格——书写形参列表 189

6.1.5值参数和引用参数的比较 190

6.1.6值参数提供的保护 190

6.1.7实参/形参列表对应关系回顾 190

6.2具有输入和输出参数的函数 193

6.3使用函数进行逐步设计 198

6.3.1程序中标识符的多次声明 204

6.3.2程序风格——使用函数实现相对简单的算法步骤 204

6.3.3程序风格——内聚函数 204

6.4在函数中使用对象 205

6.5程序系统的调试和测试 207

6.5.1自顶向下测试和桩模块 207

6.5.2自底向上测试和驱动器 207

6.5.3程序系统的调试提示 208

6.5.4标识符的作用域和观察窗口变量 209

6.5.5黑盒测试与白盒测试 209

6.6递归函数(选学) 210

6.7常见程序设计错误 212

本章小结 213

快速检测习题 214

复习题 215

程序设计题 215

采访Robert Sebesta 218

第7章 简单数据类型 220

7.1常量复习 220

7.2数值数据类型的内部表示 221

7.2.1数据类型的定点表示和浮点表示 221

7.2.2整型 222

7.2.3浮点类型 222

7.2.4数值型值常量的数据类型 222

7.2.5整型和浮点类型的取值范围 222

7.2.6数值误差 223

7.2.7混合类型:类型提升 223

7.2.8类型转换 224

7.2.9强制类型转换 224

7.3字符数据和函数 225

7.4布尔类型数据和逻辑表达式 228

7.4.1逻辑表达式求补 228

7.4.2布尔类型函数 229

7.4.3布尔类型数据的输入与输出 230

7.5枚举类型 231

7.5.1字符作为枚举元素值 232

7.5.2枚举类型的比较 232

7.5.3整数类型之间的差别 232

7.5.4读写枚举类型值 233

7.5.5程序风格——在switch语句中使用return语句 234

7.5.6枚举类型声明语句的放置位置 234

7.5.7枚举类型的强制类型转换 235

7.6常见程序设计错误 236

本章小结 237

快速检测习题 238

复习题 239

程序设计题 239

第8章 流和文件 242

8.1标准输入/输出流 242

8.1.1每次读取一个字符 244

8.1.2程序风格——使用流作为条件 246

8.2外部文件 247

8.2.1交互式与批处理 247

8.2.2外部文件的目录名 248

8.2.3将流连接到文件 248

8.2.4copyLine函数 250

8.2.5换行符的更多信息 250

8.2.6使用getline处理文件流 251

8.2.7程序风格——读取文件名 252

8.3使用外部文件进行程序间的通信 252

8.4关于读取字符串数据的更多信息 256

8.5输入/输出控制符 258

8.6常见程序设计错误 260

本章小结 261

快速检测习题 262

复习题 262

程序设计题 263

采访Anita Borg 266

第9章 数据结构:数组和结构体 268

9.1数组数据类型 268

9.1.1数组声明 268

9.1.2数组的初始化 270

9.1.3数组下标 271

9.2数组元素的顺序存取 273

9.3数组参数 277

9.3.1数组元素作为函数参数 277

9.3.2传递数组参数 278

9.4读取部分数组元素 281

9.5查找和排序数组 283

9.5.1查找数组中的最小值 283

9.5.2程序风格——作为注释的断言 284

9.5.3数组查找 285

9.5.4对数组按升序进行排序 286

9.6 Big-O方法分析算法 288

9.6.1查找算法的分析 288

9.6.2排序算法的分析 288

9.7结构体数据类型 289

9.7.1声明结构体类型和结构体变量 289

9.7.2访问结构体成员 291

9.8结构体作为操作数和参数 292

9.8.1结构体复制或赋值 292

9.8.2结构体作为参数进行传递 292

9.8.3读取结构体 293

9.8.4引用参数的效率 294

9.9字符串作为字符数组(选学) 294

9.9.1声明和初始化字符数组 295

9.9.2读写字符数组 295

9.9.3一些有用的字符数组函数 296

9.10常见的程序设计错误 297

本章小结 297

快速检测习题 298

复习题 299

程序设计题 300

第10章 用户自定义类 304

10.1类的定义和使用 304

10.1.1 counter类 304

10.1.2 counter类的定义 305

10.1.3头文件counter.h中的编译预处理命令 307

10.1.4使用counter类 307

10.1.5文件CounterTest.cpp中的编译预处理命令 308

10.2类的实现 309

10.2.1构造函数 311

10.2.2访问器和修改器函数 311

10.2.3文件counter.cpp中的编译预处理命令 311

10.3类和对象的使用规则总结 312

10.3.1对象作为类的实例 312

10.3.2公有访问和私有访问 312

10.3.3类和成员函数定义的语法 313

10.3.4结构体和类的比较 314

10.3.5工程文件和独立编译 315

10.3.6数组、结构体和类的组合 315

10.3.7函数重载和多态性 315

10.4类对象作为操作数和参数 316

10.5fraction类 317

10.5.1fraction类的设计 317

10.5.2使用fraction类 319

10.5.3fraction类的实现文件 320

10.6circle类 323

10.6.1circle类的设计 323

10.6.2使用circle类 325

10.6.3circle类的实现文件 325

10.7SimpleString类 327

10.7.1simplestring类的设计 327

10.7.2simpleString类的定义 328

10.7.3测试simplestring类的成员函数 329

10.7.4simplestring类的实现文件 330

10.8储蓄账户类 338

10.9常见的程序设计错误 338

本章小结 339

快速检测习题 340

复习题 340

程序设计题 341

采访Timothy Budd 343

第11章 数据抽象和面向对象设计 345

11.1多维数组 345

11.1.1声明二维数组 345

11.1.2初始化二维数组 346

11.1.3使用循环嵌套处理二维数组 346

11.1.4二维数组作为函数参数 347

11.1.5多维数组 348

11.2结构体数组 349

11.3模板类 351

11.3.1模板类的定义 351

11.3.2模板类的实现 353

11.3.3支持独立编译的编译指令 355

11.4索引表抽象数据类型 355

11.4.1为何使用索引表类 355

11.4.2索引表类的分析和设计 356

11.4.3使用indexList类 358

11.5实现索引表类 360

11.6面向对象设计举例 365

11.7运算符重载和友元 371

11.7.1运算符重载 371

11.7.2友元 372

11.7.3实现电话号码簿entry类 373

11.8 vector类 375

11.8.1 vector类的成员函数 376

11.8.2通过迭代器访问向量 376

11.8.3标准算法 377

11.8.4在电话号码簿程序中使用vector和algorithm类 378

11.9常见的程序设计错误 381

本章小结 382

快速检测习题 383

复习题 383

程序设计题 384

采访John Lakos 387

第12章 递归 389

12.1递归的特点 389

12.2跟踪递归函数 391

12.2.1跟踪递归函数 391

12.2.2逆序显示字符 392

12.2.3函数调用中的栈 394

12.2.4 C++中参数栈的实现 395

12.3递归的数学函数 396

12.4带有数组参数的递归函数 400

12.5使用递归方法解决问题 404

12.6常见的程序设计错误 408

本章小结 409

快速检测习题 409

复习题 410

程序设计题 410

采访Marshall Cline 411

第13章 指针和动态数据结构 414

13.1指针和new运算符 414

13.1.1通过指针访问数据 415

13.1.2指针操作 415

13.1.3指向结构体的指针 416

13.2堆操作 418

13.2.1 new运算符对堆的影响 418

13.2.2将内存单元返还给堆 418

13.3链表和list类 419

13.3.1声明结点 420

13.3.2链接结点 420

13.3.3在链表中插入结点 421

13.3.4在表头插入结点 422

13.3.5在表尾插入结点 422

13.3.6删除结点 422

13.3.7遍历链表 423

13.3.8循环链表和双向链表(选学) 424

13.3.9 list类 425

13.4栈抽象数据类型 427

13.4.1 C++的stack类 427

13.4.2实现stack模板类 430

13.4.3实现栈操作 431

13.4.4测试栈ADT 432

13.5队列抽象数据类型 433

13.5.1 C++中的queue类 434

13.5.2实现队列ADT 434

13.6二叉树 438

13.6.1二叉搜索树 439

13.6.2在二叉搜索树中进行查找 439

13.6.3创建二叉搜索树 440

13.6.4显示二叉搜索树 441

13.7二叉搜索树的抽象数据类型 443

13.7.1二又树类的设计 443

13.7.2二叉树类的实现 444

13.8二又搜索树的效率 448

13.9常见的程序设计错误 449

13.9.1语法错误 449

13.9.2运行时错误 449

本章小结 450

快速检测习题 450

复习题 451

程序设计题 453

第14章 使用进程和线程进行多重处理 456

14.1多任务处理 456

14.1.1串行程序设计和并行程序设计 456

14.1.2时间共享多任务处理 457

14.1.3抢占式多任务处理 457

14.1.4时间片与并行关系 458

14.1.5并发程序设计 459

14.2进程 459

14.2.1创建进程 460

14.2.2等待线程 461

14.2.3由进程执行另一程序 462

14.3进程间通信与管道 463

14.3.1管道 463

14.3.2使用管道 464

14.3.3使用标准输入进行进程间通信 465

14.3.4举例说明父进程与子进程间的通信 466

14.4线程 469

14.4.1创建线程 469

14.4.2线程同步 471

14.4.3互斥锁 472

14.4.4死锁 474

14.5常见程序设计错误 486

本章小结 486

C++结构复习 487

快速检测习题 488

复习题 488

程序设计题 488

附录AASCII字符集 490

附录B保留字和特殊字符 491

附录CC++库函数精选 492

附录D运算符 496

附录E继承和多态性简介 497