本书是一本独立于编程语言的、介绍编程概念的入门书籍,它可以帮助学生学习以下
内容: 一般性的编程知识,例如数据类型、控制结构、数组、文件、函数和子程序; 结构化编程原理,例如自顶向下的模块化设计、书写规范的程序文档和面向对象编
程设计; 基本工具和算法,例如数据验证、防御性编程、求和与求平均值、搜索算法和排序
算法; 通过有选择地使用基于流程图的编程环境RAPTOR,锻炼实际编程经验; 整型和浮点型数值数据的表示。学习本书不需要读者具有任何计算机知识或编程经验,也不需要提前掌握特殊的数学
知识、财经知识或其他学科知识。
第5 版的变化
本书第5 版加强了对读者的编程概念学习和编程经验的培养。贯穿全书的思路是,从简单明了的概念介绍入手,然后讲解复杂的知识点,再讲解一些具有一定挑战性的例题,最后是复习题。本版的主要变化如下:
RAPTOR 是一款免费的流程图应用程序软件,它可以使读者在不必关注于具体编程语言语法的情况下创建和运行程序。整本书中,可以使用RAPTOR 的例题和自测题都用RAPTOR 的图标进行了标注。
大多数复习题都经过了重新设计,可以使用RAPTOR 来完成,这些题目也都用
RAPTOR 图标进行了标注。 所有的编程性题目也都进行了重新设计,都可以使用RAPTOR 来完成编程练习。 新增的附录D,完全是RAPTOR 的使用指南,它帮助读者学习使用RAPTOR 来完
成本书介绍的所有概念。 每章末尾的复习题和每节结尾的自测题都进行了重新设计和补充。 第4 章和第5 章中新增加的练习题用于介绍更多的关于循环结构方面的知识,并帮
助读者练习更高级的编程技术。 第4 章介绍了Do…While 循环结构、While 循环结构和Repeat…Until 循环结构。 第5 章中的随机数部分经过了重新设计,其中包含了Java 语言和C++语言中的随
机函数。 增加介绍了一些新的内建函数,包括ToUpper(),ToLower(),Floor()和Ceiling()。 先介绍第7 章的程序模块、子程序和函数内容,然后介绍第8 章的顺序数据文件。 对第7 章的子程序、函数、实参和形参部分内容进行了扩充。
本书组织结构
在内容覆盖方面,本书的编写和组织结构保持了足够的灵活性。知识点的介绍和组织方式适合于任何层次的入门级编程课程所使用。每个概念的讲解方式都是由浅入深,循序渐进的。是什么与为什么(What & Why)栏目帮助学生开阔思路,让学生的思考范围超越例题所讨论的内容本身,有利于课堂讨论和学生互动学习。例题、自测题和复习题的难度都是逐步增加的,从最基本的题目逐步过渡到非常有挑战性的题目。
第0 章介绍计算机基本概念和知识。
第1 章介绍最基本的问题解决策略和计算机程序的必要组成部分(数据输入、数据处理和数据输出)。本章内容还包括算术运算、计算机使用的运算优先级关系以及基本数据类型。另外,还介绍整型和浮点型数据的表示方式。
第2 章介绍程序开发流程、自顶向下模块化程序设计基本原理、伪代码和流程图。另外还介绍程序文档、程序测试、程序语法和逻辑错误以及程序中使用的基本控制结构的总揽。
第3 章介绍选择结构,包括单选择结构、双选择结构和多选一结构,关系和逻辑运算符、ASCII 编码方式、防御性编程技术以及菜单驱动式程序。
第4 章和第5 章对重复(循环)结构进行了全面的和补充式的介绍。第4 章主要关注于基本循环结构:前置检测循环结构、后置检测循环结构,条件控制循环、计数控制循环, 另外还介绍了循环数据输入、数据验证以及求和和求平均值计算。第5 章在第4 章介绍的基本内容基础之上,使用循环结构结合选择结构和内嵌循环以及随机数生成器来开发程序。该部分开发更长、更复杂的计算机程序。
第6 章介绍一维数组和平行数组,还有一个简短的、关于二维数组的可选节。另外还介绍两种查找技术(串行查找法和二分查找法)和两种排序技术(冒泡排序法和选择排序法),还讨论使用数组来表示字符串的相关内容。
第7 章介绍函数和模块,包括实参和形参的用法,值参数——数值传递,引用参数——引用传递,以及变量的作用域,另外还介绍内置函数和自定义函数。最后讨论一个高级主题——递归,该主题只介绍到一定的深度,读者可以跳过该节,继续阅读。
第8 章讨论顺序数据文件,包括记录和域,以及如何创建、写入和读出顺序文件。另外还介绍如何删除、修改和插入记录,如何合并文件。在文件维护中,经常会用到数组来进行数据文件的合并。在本章较长的示例程序中,使用到了控制中断处理技术。
第9 章深入介绍面向对象编程的概念,贯穿全章的示例程序有简单的,也有复杂的。另外还介绍建模语言,UML。面向对象程序设计包含的主题有类(父类和子类)、对象、继承、多态、公有和私有属性与方法以及构造函数的使用。
附录A、B 和C 对第1 章讨论的相关内容进行了详细的介绍,可以在课程开始阶段介绍这部分内容、也可以同第1 章一起介绍或作为独立的部分单独介绍。这几个附录中的内容独立于本书其余章节的内容。
附录A 介绍如何将整数从十进制表示转换为二进制表示和十六进制表示。
前 言
附录B 介绍整数表示的几种方法,包括无符号表示、符号数值表示法和二进制补码表示法。附录C 介绍数据的浮点表示,包括将带有小数位的十进制数据转换成二进制数据,以及使用IEEE 符号-指数-尾数表示法表示浮点数据。附录D 是一个完全的、可自行安排学习进度的RAPTOR 使用指南,它介绍了如何使用RAPTOR 软件,该部分包含了详细的软件界面截屏和示例。贯穿全书的许多个章节都讨论了比较高级的应用主题,这些内容是可选的。特别是,“问题求解”部分进行了相对复杂的程序设计练习,这部分内容对一些教师来说可能在讲解该章相关内容时是有用的,对另一些教师来说可以跳过以节省课时。
本书特色栏目
在日常生活中(In the Everyday World)
从第1 章开始,往后每一章开篇都将介绍本章内容是如何同我们日常生活中熟悉的事务相关的(例如,“数组在日常世界中”)。本栏目是每章的一个前言,使用一般的、容易理解的主题进行介绍,作为每章的开篇基础。
具体编程实现(Making It Work)
具体编程实现(Making It Work)栏目介绍如何使用实际编程语言将相关概念编写成实际程序代码,如使用C++、Java 或Visual Basic 等高级编程语言。这些带有方块阴影的栏目贯穿全书,这部分内容是自包含的,可选读的部分。
是什么与为什么(What & Why)
通常在一个示例结尾部分,会有一个简短的讨论,关于如果程序运行,会发生什么、有什么结果,或者如果程序中有某些改变,将发生什么。是什么与为什么(What & Why) 栏目引导读者对程序运行情况进行更深入的理解与思考,它能够帮助开展课堂小讨论。
RAPTOR
旁边带有RAPTOR 图标表明该示例、自测题或复习题可以非常容易的使用RAPTOR 来实现。读者可以使用RAPTOR 工具来学习程序编写而不必关注于具体编程语言的语法细节。RAPTOR 程序运行情况同C++ 或Java 编程语言编写的程序一样。读者可以使用查看窗口逐步查看程序的运行情况,并按照指令运行顺序查看变量值是如何变化的。读者可以排查逻辑错误。使用RAPTOR 工具可以更好地理解程序代码逻辑关系,它是一个非常重要的学习工具。
建议与代码风格建议(Pointer and Style Pointer)
第2 章介绍程序编码风格和文档化相关概念,这些内容在后续章节中都会有所强调。另外其他建议也将在全书中定期给出。这些简短注解是对相关主题内容的深度解析或者是一些更加深化的知识点。
示例
本书总共包含186 个示例,都按章节进行了编号。在本版中,新增示例贯穿全书,大部分包含流程图以方便解析伪代码。示例中的伪代码都标有行号以方便讨论,在小节中,每个示例的结尾部分是代码逐行讨论,该小节称为程序如何运行以及各行伪代码的意义
(What Happened)。本书结尾部分的附录A、B 和C 包含了许多二进制和十六进制转换示例。
问题求解
问题求解栏目首先给出一个编程问题,分析该问题,然后设计程序来解决该问题,并讨论程序编写时应该注意的问题,指出如何测试程序。通过这个过程,读者不仅可以回顾本章所学内容,而且可以锻炼解决有一定难度的编程问题。该栏目内容对于具体编程语言课程教学是非常有帮助的。通过使用C++ 、Java 、Visual Basic 和Python 编程语言进行编码实现可以学会如何将本书学习到的概念应用到实际编程工作中。所有程序代码,包括详细的文档将帮助读者理解代码每一部分的作用,并说明本书中伪代码和具体编程语言代码的一致性问题。另外还有一些可执行文件,这些程序可以运行,不过这些程序代码不用于教学目的。
练习题
本版本增加了超过60 个新的复习题。大多数复习题都是非常简单明了的,可以使用RAPTOR 工具进行实现。本书包含的练习题种类如下:
自测题(Self Check Questions) 每小节结尾部分都包含一些自测题目,可以测试读者对该小节内容的理解程度(自测题目的答案在学生CD 光盘上面可以找到,大多数解决方案都以伪代码和RAPTOR 方式给出)。
复习题(Review Questions) 每章的结尾部分包含有多种类别的题目,这些题目可以进一步回顾本章所学内容(奇数编号题目的答案可以在学生CD 光盘上面找到,偶数编号题目的答案在教师辅助网站上面可以找到)。
动手试一试(Try It Yourself )练习题和解决方案都在教师辅助网站上面可以找到,包括附录A、B 和C 的数据表示部分。
编程题目(Programming Problems) 每章结尾部分有一些程序设计题目,需要用到本章以及前面章节中的内容。所有的编程题目都可以在RAPTOR 中进行实现,所有编程题目的解决方案都可以在教师辅助网站上面找到。
附录
附录A、B 和C 分别介绍数据表示的3 个方面的内容。如果这3 个附录全部在课堂上面讲授的话,可以作为单独的一章(数据表示)进行介绍。另外,这部分内容也可以跳过去不讲,不会对本书其他内容造成任何影响的。
前 言
附录D 是本书第5 版的新增内容。这是一个非常容易理解的RAPTOR 使用指南,可
以帮助读者在不需要课程指导的情况下,独立学习如何使用RAPTOR 程序。如下内容和众多示例都包含在附录中。 附录A:十进制、二进制和十六进制表示介绍基数和幂数、扩展计数法、二进制
和十六进制系统、十进制到二进制或十六进制的转换(反过来转换)和二进制同十六进制转换。 附录B:整数表示介绍无符号整数格式、符号数值格式、1 的补码表示法和2 的补码表示法。特别要注意零的表示。
附录C:浮点数表示介绍浮点数的二进制转换(整数部分和小数部分)、单精度浮点数、科学计数法、使用符号-指数-尾数格式范化二进制浮点数、Excess_127 系统和单精度浮点二进制数的十六进制表示。
附录D:RAPTOR 使用指南介绍如何使用RAPTOR 完成本书介绍的内容,包括判断、循环、数组、子程序、函数和数据文件。另外使用指南还包括如何在面向对象模式下使用RAPTOR 。本部分包含大量详细步骤的屏幕截屏,读者完全可以参照这些步骤,进行独立学习。
其他补充材料
学生辅助网站
该网站提供了大量关于本书的辅助资料,读者可以从www.aw.com/cssupport 上面下载。
教师辅助材料
对于满足一定条件的教师可以从Addison-Wesley 教师资源中心获取到更多补充材料,
包括如下: 各章及附录A、B 和C 的PowerPoint 幻灯片文件; 所有自测题目的答案; 所有复习题的答案; RAPTOR 程序相关的RAPTOR 示例与自测题; RAPTOR 程序相关的RAPTOR 复习题; RAPTOR 程序相关的所有编程问题; 附录A、B 和C 的动手练习题及答案; 试题库。想要访问这些材料请登录www.pearsonhighered.com/irc 或联系Pearson 教育公司学校销
售代表。
致谢
正如没有唯一正确的方法来教授编程知识一样,也没有唯一正确的方法来写作关于编程内容的书籍。从创作本书初版到现在的第5 版,我感到非常荣幸,有以下经验丰富的教师提供了各式各样的观点和许多有益的建议。
他们是:Colin Archibald,Heather K. Bloom,William Bowers,David W. Boyd,Xiomara Casado,Diane Cassidy,Ashraful Chowdhury,Lall Comar,Isabeth Cominsky,Ramona Coveny, Linda Denney,Elizabeth Dickson,Kathie Doole,Nicholas Duchon,Judy Dunn,Daniel L. Edwards,Jaime Espinosa,Terry Felke-Morris,Terry Foty,Tom Friday,James Fuller,Susan Fulton,David T. Green,Carol Grimm,Bill Hammerschlag,Ric Heishman,Patrick Hogan, John Humphrey,Michael Kelly,Chung Lee,Mike Matuszek,John W. Miller,Robert Molnar, David Morgan,Michael Passalacqua,Colleen R. Pepin,Diane Perreault,Carol M. Peterson, Betty Reiter,Patty Santoianni,Judy Scholl,Joe Sherrill,Philip Soward,Catherine D. Stoughton, Dave Swickheimer,Daniel R. Terrian,Peggy Watkins,Melinda White,Marilyn Wildman,Janice
L. Williams,Julie Wright 和Michael D. Wright 。
“在日常生活中”短文段落,是本书的特色栏目,它是由Brookhaven 学院的Bill Hammerschlag 在本书的第二版时设想并起草的,本版中继续保留并进行了扩展和重新设计。
“问题求解”栏目的C++、Visual Basic 、Java 和Python 编程实现部分由Florida 大学的Anton Drake 完成。
另外,我要致以特别的感谢给总编Michael Hirsch ,是他把大家集合到这个项目中来,并一直给予我们指导并鼓励大家,另外也要感谢助理编辑Stephanie Sellinger ,在整个项目进行过程中回答了我们所有的问题并在项目的各个方面都提供了非常有价值的帮助,同时我们也得到了Addison-Wesley 整个教程团队的帮助,他们是Marilyn Lloyd,Gillian Hall, Kathy Cantwell,Holly McLean-Aldis 和Jack Lewis。
——Elizabeth Drake
Stewart Venit
我要感谢我的合作者Stewart Venit,同他一起工作我感到非常快乐。Gillian Hall 和Kathy Cantwell 对我特别有耐心并一直鼓励我,他们使我能够轻松面对交稿期限的压力。我同样要感谢Anton Drake 提供的重要技术支持。也特别感谢Martin Carlisle,是他开发了RAPTOR 并将该软件共享给每一个人,感谢他的支持和帮助。另外也要感谢Calhoun 社区大学的George Marshall Jr. 帮助我处理RAPTOR 中OOP 模式的内容以及在附录D 中创建的生动示例。最后,我要感谢我的家人,Severia,Anton,Justito 和Jacob,他们一直以来的鼓励和支持才能让我从事我喜欢的工作——写作。
——Elizabeth Drake
我要感谢我的妻子Corinne 和我的女儿Tamara,感谢她们的耐心和理解;当我写作本书时,我花费了无数小时伏案工作,就像是粘到计算机键盘上了一样,对此她们从没有抱怨过。
——Stewart Venit