前 言 本书为不具备实际编程经验的学生讲授C++语言和面向对象的程序设计。本书适合于大学一年级、二年级的学生。学生最好具备高等数学、物理和化学方面的知识,但并非必须具备。 本书特色 ● 提供了30多个案例研究。这些应用示例说明了如何解决许多领域的实际问题。 ● 使用了多种方法便于学生阅读并理解源代码。每一个课堂教学部分都使用了多种技巧(代码注释、问题、主要内容,以及练习),以使学生理解代码。 ● 提前介绍程序的调试。在第2章的最后,向学生介绍了一些发现程序错误以及开发他们自己的程序的方法。 ● 给出了跟踪及调试循环的详细描述。在许多章中都包括了开发及检查简单或复杂循环的可靠性的方法。 ● 提供了许多图形。经常用图形来说明C++中比较难的概念。 ● 给出了从简单到复杂的应用示例。应用示例有很大的难度跨度,无论学生是否具有编程经验,都将面临挑战。 ● 逐步地介绍程序开发的方法。每一个应用示例都说明了开发程序的结构化方法。 ● 提前介绍类和对象。类和对象在第8章中就介绍了。但是,老师可以在第14章再讲解这些内容。 ● 提供了数值方法示例。应用示例包含了一些基本的数值方法的说明,以及为其编码的方式。 ● 提供了修改练习。这些练习适合于具有2~3个小时实验的课程。学生应该阅读特定的应用示例,为实验做准备。如果他们这样做了,许多这种练习都可以在2~3个小时内完成。 ● 介绍了UML。向学生描述了UML的基础知识,并且讲述了如何将UML图转换为C++代码。 ● 简单直观地介绍了C++标准模板库。其目的是让学生能够尽快使用标准模板库。书中没有使用强制理解的术语,因此学生可以很快地使用这个库的基础部分。 本书结构 本书的每一章都分为两个部分—— 课堂教学及应用示例。课堂教学部分讲述C++语言的基本内容和简单的编程技术,应用示例部分讲述程序设计。 课堂教学部分 课堂教学部分讲授了C++语言的各个方面,并让学生知道在编写程序的时候,什么是可以利用的。这些内容包括基本符号、如何获得输入输出、运算符的意义、可用的库函数,以及如何创建类并使用对象。还讲授了基本的编程操作,如查找一组数据的最大值、数组求和,以及使用随机数。 每一课堂教学部分都集中在一个示例程序上,并按顺序包含以下部分和一些教学观念。 各 个 部 分 教 学 观 念 主要内容—— 将要讲述的主题的列表 提醒学生将要学习的内容 引言—— 简要介绍主题的背景 让学生知道将要讲述内容的重要性,并让他们准备好阅读源代码 问题—— 向学生提出一些与程序有关的问题 在向学生解释代码之前,鼓励他们尝试着自己来解释代码 带注释的、源代码及输出—— 示例程序及输出,用来说明本课堂教学的主要内容 源代码说明要讲授的技巧,注释使学生关注新的程序设计内容中的重要细节。注释用方框括了起来,因为它们比“代码中的”说明更为突出,并且允许给出更多的细节。如果学生除了源代码之外没有阅读任何内容,至少可以学习该课堂教学的基本内容 说明—— 描述示例程序讲述的内容,以及如何将这些技巧应用于其他程序。提供了图解、表格,以及C++语言特性的列表 说明部分为了解详细的技术内容提供了“软”环境。使用图解向学生提供概念及操作的可视图像。为了方便后面使用,列出了表格及C++语言特性列表 每节练习(各章结尾)—— 判断对错、回答简短问题,以及基本程序任务 这些练习突出了课程的重点。问题相对简单,因此学生愿意在每一节的结尾做自我测试。这强化了所学的内容。程序任务非常简单。当学生仅关注语言部分而没有问题需要解决时,教师可以给他们分配这些任务 每节练习答案(各章结尾)—— 判断对错及简短问题的答案 答案很容易找到,这样便于给学生提供及时的反馈 总之,每个课堂教学的各个部分都鼓励学生阅读并理解C++代码。目标是提高学生理解他人编写的程序的技能。当学完了这些课程后,学生就可以熟练地使用C++语言,因为他们已经能够阅读并理解本书中的C++代码。 应用示例部分 因为学生仅知道语言的运行方式和简单的编程操作是不够的,所以本书使用应用示例来说明程序设计以及如何解决实际问题。 应用示例是用结构化的多步方法(structured multistep method)开发的。学生可以按照同样的方法来创建他们自己的程序。为了设计实际的程序,在整个过程中作了许多强调。并对多页的程序都做了解释。 应用示例包含如下部分及教学观念。 各 个 部 分 教 学 概 念 问题描述—— 描述输入输出要求的问题说明 这个问题是为了强调特定的技能,以及说明它们为什么在编程解决问题时是需要的。例如,在具体的问题中使用复合运算符。因为本书是针对大一/大二学生的,所以特意没有涉及高等数学 解决方案:相关方程—— 描述问题的技术层面,包括需要使用的方程 使学生深入了解如何处理方程以获得适用于计算机解决方案的形式。对于有可能稍微超过学生背景知识的问题,在概念上做了进一步的描述 解决方案:具体示例—— 使用具体的输入数据进行示例计算,获得数字结果 显示如何使用相关方程及需要的步骤来获得数字结果 解决方案:类和对象—— 讨论程序中的类、对象,以及所需要的面向对象设计特性。仅在强调类和对象的程序中使用 说明开发类的整个过程和方法 解决方案:算法及代码段—— 列出了解决问题所需的步骤,并显示各个步骤的代码(对于复杂的示例程序) 说明如何将步骤转化为源代码。为了说明面向对象设计,在这个部分将类和对象组合起来 解决方案:源代码—— 解决问题的源代码及注解 说明如何将良好构想的设计(及算法)转换为完整的可运行的代码 说明—— 说明源代码的含义,提示可以用相似的方法来开发其他程序。并指出所显示代码的缺点 这部分使得学生超越所编写的程序。其中指明了如何使程序的功能更强大,以及在这种情况下可能会出现的问题 修改练习—— 可以通过修改给定的源代码而完成的任务 本部分的目的是使学生能使用他人编写的代码工作。有些修改相当简单,另一些修改需要做的工作多一些。所有的情况都要求学生理解源代码以进行修改。这练习适合于2个或3个小时的实验课。学生可以在实验前阅读特定的应用示例。如果仔细阅读了应用示例,许多练习可以在2~3个小时内完成 应用练习(各章的最后)—— 这些练习都是技术上的面向对象程序设计任务 这些练习大概是1~3个星期的任务。学生必须从头开始编写一个程序。可以使用在应用示例中学到的技术来开发这个程序 结构化的多步方法的目的是使学生遵循与程序设计相一致的方法。即使指导老师有不同的方法,学生通过阅读本书也将发现程序不是以随意的方式开发的。 应用示例详细显示了利用复杂循环、数组、类和指针工作的思考过程。