C++是一种既能进行过程化程序设计,又能进行面向对象程序设计的高级程序设计语言。C++语言在计算机研究和应用领域有着广泛的应用,已成为软件开发中最为流行的一种编程语言。\r\n 本书以应用为主线安排教学内容, 由浅入深地介绍C++编程语言,主要目的是讲述如何用计算机和C++编程语言解决问题的基本方法和技术,在介绍传统的结构化编程的同时,介绍了面向对象编程的基本思想。本书所附光盘中包含各章的练习和一些实例,帮助读者自学和进一步理解书中内容。\r\n 本书内容安排合理,深入浅出,读者不需要具备计算机方面的预备知识,可作为高等院校学生学习程序设计语言的入门教材,同时可以作为相关计算机等级考试的参考书,也可作为其他人员学习C++语言的自学教材或培训教材。
第一部分 基本概念\r\n\r\n第1章 计算机系统初步知识\r\n\r\n1.1 引言\r\n1.2 计算机基础知识概论\r\n1.2.1 计算机与信息社会\r\n1.2.2 电子计算机的发展\r\n1.2.3 电子计算机的特点\r\n1.3 计算机的基本组成\r\n1.4 计算机中信息的表示\r\n1.4.1 进位计数制\r\n1.4.2 计算机采用二进制的原因\r\n1.4.3 不同计数制之间的转换\r\n1.4.4 信息单位及机器数\r\n1.4.5 字符的表示\r\n1.5 计算机的工作过程\r\n1.6 计算机系统的组成\r\n1.7 计算机系统的软件\r\n1.8 内容回顾\r\n习题1\r\n\r\n第2章 软件开发方法\r\n\r\n2.1 引言\r\n2.2 软件开发方法\r\n2.3 需求说明\r\n2.4 分析\r\n2.5 算法的设计与表示\r\n2.5.1 伪代码\r\n2.5.2 伪代码书写规则\r\n2.5.3 自顶向下对算法进行求精\r\n2.5.4 流程图\r\n2.6 实现\r\n2.7 测试和验证\r\n2.8 程序文档\r\n2.9 程序举例:求解二次方程\r\n2.10 内容回顾\r\n习题2\r\n\r\n第二部分 初级程序设计\r\n\r\n第3章 C++编程基础\r\n\r\n3.1 引言\r\n3.2 一个完整的C++程序\r\n3.3 字符集和标记符\r\n3.3.1 保留字\r\n3.3.2 标识符\r\n3.3.3 常量\r\n3.3.4 标点符号\r\n3.3.5 操作符\r\n3.4 C++程序结构\r\n3.4.1 注释\r\n3.4.2 预处理指令\r\n3.4.3 数据类型和变量定义\r\n3.4.4 初始化\r\n3.4.5 常量定义\r\n3.4.6 语句\r\n3.4.7 复合语句\r\n3.5 初谈函数\r\n3.6 几种基本的C++语句\r\n3.6.1 算术赋值语句\r\n3.6.2 输出语句\r\n3.6.3 输入语句\r\n3.7 C++源程序文件\r\n3.7.1 输入源程序\r\n3.7.2 关于编程风格\r\n3.8 程序举例:将高度和重量的单位转化成国际单位制的单位\r\n3.9 调试程序\r\n3.9.1 调试语法错误\r\n3.9.2 调试警告性错误\r\n3.9.3 调试运行错误\r\n3.9.4 调试设计错误\r\n3.10 内容回顾\r\n习题3\r\n\r\n第4章 算术运算\r\n\r\n4.1 引言\r\n4.2 算术运算符\r\n4.3 算术运算符和算术表达式的优先级\r\n4.4 自增和自减操作符\r\n4.5 算术赋值表达式\r\n4.6 复合赋值操作符\r\n4.7 算术表达式的类型\r\n4.8 数学函数库\r\n4.9 程序举例:计算两点间的距离\r\n4.10 算术赋值表达式语句\r\n4.11 内容回顾\r\n习题4\r\n\r\n第5章 简单选择和循环结构\r\n\r\n5.1 引言\r\n5.2 简单选择结构\r\n5.2.1 选择语句\r\n5.2.2 关系操作符和简单条件表达式\r\n5.2.3 if语句实例\r\n5.2.4 算术运算符与关系操作符的优先级\r\n5.2.5 if语句的嵌套和多路选择结构\r\n5.3 循环控制结构\r\n5.3.1 循环语句\r\n5.3.2 用while语句实现循环\r\n5.4 if和while语句的书写规则\r\n5.5 结构化编程\r\n5.6 程序举例:求解二次方程\r\n5.7 内容回顾\r\n习题5\r\n\r\n第6章 模块化编程和函数\r\n\r\n6.1 引言\r\n6.2 程序举例:绘制几何图形的模块化程序(A)\r\n6.3 模块化程序的三要素\r\n6.3.1 函数定义\r\n6.3.2 函数调用\r\n6.3.3 函数原型说明\r\n6.3.4 函数定义语句在源程序文件中的位置\r\n6.4 模块化程序的结构\r\n6.5 程序举例:绘制几何图形的模块化程序(B)\r\n6.6 函数的返回值\r\n6.6.1 return语句\r\n6.6.2 函数变量\r\n6.7 程序举例:绘制几何图形的模块化程序(C)\r\n6.8 带参数的函数\r\n6.8.1 用全局变量完成函数之间的数据交换\r\n6.8.2 用参数完成函数之间的数据交换\r\n6.9 C++内联函数\r\n6.10 模块化程序设计和实现的格式要求\r\n6.11 内容回顾\r\n习题6\r\n\r\n第三部分 中级程序设计\r\n\r\n第7章 格式化输入和输出\r\n\r\n7.1 引言\r\n7.2 交互式程序与批处理程序\r\n7.3 C++中流的定向输入输出\r\n7.4 标准输出流\r\n7.5 格式化输出\r\n7.5.1 简单数据类型和字符串的格式化输出\r\n7.5.2 数值数据的格式化输出\r\n7.5.3 浮点数的格式化输出\r\n7.5.4 用格式控制符进行格式化输出\r\n7.6 输出整型值\r\n7.7 输出浮点值\r\n7.8 输出字符串\r\n7.9 关于交互输入\r\n7.9.1 输入流\r\n7.9.2 对输入数据格式化\r\n7.9.3 用一条cin语句输入多个数据\r\n7.9.4 交互输入中的注意事项\r\n7.9.5 输入字符量和getch库函数\r\n7.10 操作系统中的文件输入输出\r\n7.10.1 输出重定向到数据文件\r\n7.10.2 输入重定向到数据文件\r\n7.10.3 从文件中读取格式化的数据\r\n7.11 内容回顾\r\n习题7\r\n\r\n第8章 复杂选择和循环结构\r\n\r\n8.1 引言\r\n8.2 复习if语句\r\n8.2.1 用else…if结构实现多路选择结构\r\n8.2.2 条件选择操作符\r\n8.3 复杂条件表达式\r\n8.3.1 逻辑表达式和逻辑操作符\r\n8.3.2 C++逻辑操作符\r\n8.3.3 复杂条件表达式的简化\r\n8.3.4 逻辑操作符的优先级\r\n8.3.5 用带复杂条件表达式的if语句实现多路选择结构\r\n8.4 用switch语句实现多路选择结构\r\n8.5 多路选择结构的书写规则\r\n8.6 先判定循环结构\r\n8.6.1 for语句\r\n8.6.2 for语句和while语句的等价性\r\n8.6.3 用for语句实现循环\r\n8.6.4 C++中变量定义语句的位置\r\n8.7 后判定循环结构\r\n8.7.1 do…while语句\r\n8.7.2 用do…while语句实现计数器控制循环和哨兵控制循环\r\n8.7.3 do...while语句中的break和continue语句\r\n8.8 嵌套循环\r\n8.9 嵌套循环的格式\r\n8.10 内容回顾\r\n习题8\r\n\r\n第9章 再议模块化编程和函数\r\n\r\n9.1 引言\r\n9.2 用引用参数返回值\r\n9.2.1 引用\r\n9.2.2 通过引用传递参数\r\n9.3 用指针变量返回值\r\n9.3.1 指针变量\r\n9.3.2 用指针传递参数\r\n9.4 递归\r\n9.4.1 编写递归函数\r\n9.4.2 跟踪递归函数的执行\r\n9.4.3 用递归方法计算Fibonacci数\r\n9.4.4 递归与循环的比较\r\n9.5 再谈模块化程序的风格问题\r\n9.6 内容回顾\r\n习题9\r\n\r\n第四部分 数据类型和面向对象编程\r\n\r\n第10章 数据类型、结构和枚举\r\n\r\n10.1 引言\r\n10.2 基本数据类型\r\n10.2.1 整数数据类型\r\n10.2.2 浮点数据类型\r\n10.2.3 数学计算中的错误和不精确性\r\n10.2.4 数值数据类型的自动转换\r\n10.3 结构数据类型\r\n10.3.1 定义结构\r\n10.3.2 定义结构变量\r\n10.3.3 定义嵌套结构\r\n10.3.4 访问结构成员\r\n10.3.5 初始化结构变量\r\n10.3.6 可对结构变量执行的操作\r\n10.4 结构变量作为函数参数\r\n10.5 用typedef定义结构类型\r\n10.6 程序举例:计算学生成绩\r\n10.7 枚举数据类型\r\n10.7.1 定义枚举数据类型和枚举变量\r\n10.7.2 可对枚举变量执行的操作\r\n10.7.3 使用枚举类型\r\n10.8 内容回顾\r\n习题10\r\n\r\n第11章 类、对象和面向对象编程\r\n\r\n11.1 引言\r\n11.2 类和对象\r\n11.2.1 定义类\r\n11.2.2 定义类对象\r\n11.2.3 访问类的成员\r\n11.2.4 成员函数的定义和说明\r\n11.2.5 初始化类对象\r\n11.2.6 构造函数和析构函数\r\n11.2.7 可以对对象执行的操作\r\n11.3 程序举例:用类实现求Fibonacci序列的算法\r\n11.4 类的继承与派生\r\n11.5 友员函数\r\n11.6 运算符重载\r\n11.7 面向对象编程\r\n11.8 内容回顾\r\n习题11\r\n\r\n第12章 数组和字符串\r\n\r\n12.1 引言\r\n12.2 列表和数组\r\n12.2.1 定义数组\r\n12.2.2 数组初始化\r\n12.2.3 在数组上执行的操作\r\n12.2.4 数组、指针和指针运算\r\n12.2.5 将数组作为实际参数传递的函数调用\r\n12.3 有序数组\r\n12.3.1 冒泡排序\r\n12.3.2 选择排序\r\n12.4 数组的查找\r\n12.4.1 顺序查找\r\n12.4.2 二分查找法\r\n12.5 多维数组\r\n12.5.1 二维数组的定义\r\n12.5.2 初始化二维数组\r\n12.5.3 对二维数组执行的操作\r\n12.6 结构数组\r\n12.7 字符数据\r\n12.7.1 字符数据的内在表示\r\n12.7.2 字符排列顺序\r\n12.7.3 字符数据的自动转换\r\n12.7.4 字符数据的输入输出\r\n12.7.5 字符处理库函数\r\n12.8 字符串\r\n12.8.1 定义串\r\n12.8.2 编译时初始化串\r\n12.8.3 输出串变量\r\n12.8.4 为串变量输入值\r\n12.8.5 将串传递给函数\r\n12.9 串处理\r\n12.9.1 复制串\r\n12.9.2 比较串\r\n12.9.3 计算串长\r\n12.9.4 串的连接\r\n12.10 内容回顾\r\n习题12\r\n\r\n第13章 数据文件\r\n\r\n13.1 引言\r\n13.2 C++数据文件基础\r\n13.2.1 文件处理类\r\n13.2.2 文件的定义\r\n13.2.3 命名数据文件\r\n13.2.4 打开文件与open函数\r\n13.2.5 fail成员函数\r\n13.2.6 关闭文件和close成员函数\r\n13.2.7 查找文件结束标志和eof成员函数\r\n13.3 处理文本文件\r\n13.3.1 向文本文件写入数据\r\n13.3.2 从文本文件中读取数据\r\n13.3.3 处理混合类型数据的文本文件\r\n13.3.4 复制文件\r\n13.4 处理二进制文件\r\n13.4.1 创建二进制文件与write成员函数\r\n13.4.2 访问二进制文件和read成员函数\r\n13.4.3 存放结构化记录的二进制文件\r\n13.5 程序举例:对存放类对象的二进制文件进行处理\r\n13.6 随机访问文件\r\n13.6.1 成员函数seekg( )和tellg( )\r\n13.6.2 成员函数seekp( )和tellp( )\r\n13.7 内容回顾\r\n习题13\r\n\r\n附录A C++关键字\r\n附录B ASCII和EBCDIC字符集\r\n附录C C++操作符和转义序列\r\n参考文献
C++是一种既能进行过程化程序设计,又能进行面向对象程序设计的高级程序设计语言。C++语言在计算机研究和应用领域有着广泛的应用,已成为软件开发中最为流行的一种编程语言。
为了适应计算机技术的发展,国内外不少大学已开始使用C++语言替代其他编程语言,作为程序设计基础的入门课程。目前,已出版了不少关于C++ 语言的书籍,但作为教材使用时,通常要求学生具备计算机方面的预备知识,此外学生普遍感到以语法为主线的教学内容与实际编程能力的提高联系不紧,不能真正做到学以致用。为了更好地普及C++语言知识,促进教学工作,编者在从事C++ 语言教学和科研工作的基础上,吸取了国外同类教材的优点,为学生编写了不一定需要计算机方面的预备知识,而直接学习C++语言的基础教材。
本教材的主要目标是讲述如何用计算机和C++语言解决编程问题,在介绍传统的结构化编程的同时,介绍了面向对象编程的基本思想。
本教材的编写是以应用为主线安排教学内容的。内容安排合理、深入浅出、应用性强,可作为大学学生学习程序设计的入门教材,也可作为其他人员学习C++语言的自学教材或培训教材。参考教学时数为51~68。
一、为什么选择C++语言作为学习程序设计的入门教材
任何计算机语言都可用于解决编程问题,这里为什么选择C++语言作为解决问题的工具呢?有以下几点理由:
C++语言早在20世纪80年代就得到了广泛的应用,成为计算机软件业最为流行的编程语言。现在C++编译器适用于从巨型机到微型机的任何平台上,许多软件都是用C++语言编写的。在未来的年代里,C++语言仍将作为编程语言的主流,是各专业的学生必须掌握的基础知识。
C++语言是在C语言的基础上扩展而来,因此掌握了C++语言,也就掌握了C语言。
C++语言通用性较强,既可用于结构化编程,也可用于面向对象编程。通过学习C++语言,还能掌握软件工程的基本规则和方法。
由于C++支持面向对象编程,通过学习C++能掌握这种更为先进、更富有生命力的编程方法。
二、本书的内容组织
本书内容可以分为四部分。第一部分介绍计算机以及程序设计的相关背景知识和一些基本概念,第二部分介绍C++初级编程知识,第三部分介绍C++程序设计的中级知识,第四部分介绍数据结构、数据抽象和面向对象知识。
第一部分:基本概念
前两章是第一部分。第1章介绍计算机的基本术语和一些基本概念,如硬件、软件和编程语言等,还讲述了计算机是如何表示信息的,以及计算机的工作过程。第2章对软件开发方法的各个步骤进行了详细介绍,并介绍了如何使用自顶向下逐步求精的方法来表示算法,三种基本的程序结构及其相应的伪码表示。
第二部分:初级程序设计
这一部分由4章组成。第3章介绍C++程序的组成元素、结构、三种基本数据类型(int,double和char)和三种基本语句(cin语句、cout语句和简单算术赋值语句),本章将使用一个程序实例进行说明。第4章将接触到较为复杂的算术运算。第5章介绍了简单选择语句if和简单循环语句while,同时介绍了结构化编程的原则。第6章对模块化编程和函数进行了学习:首先介绍不需要进行输入输出的函数,然后介绍用函数名返回值的函数,最后学习了带参数并用参数完成输入输出的函数。
第三部分:中级程序设计
第三部分继续介绍C++语言的特性和编程方法。第7章介绍格式化输入输出,使用操作系统的重定向输入输出特性进行批处理。第8章继续介绍选择和循环,这一章讨论了使用复杂条件表达式、嵌套if语句和switch语句进行多路选择的情况,还介绍了先判定的for循环语句和后判定的do-while循环语句。第9章介绍了模块化编程,引用变量、指针变量以及简单递归问题和递归函数的设计。
第四部分:数据类型和面向对象编程
第四部分包括5章。第10章介绍了另外几种基本数据类型以及用户自定义类型:结构、联合和枚举类型。第11章基于结构的概念,介绍了类、对象、面向对象编程、数据抽象、类的继承和派生、运算符重载等。第12章介绍了列表、数组,以及在数组上的基本操作、多维数组和结构数组。本章还介绍了字符数据、串和串处理。第13章介绍数据文件和文件处理,C++数据文件的基本知识、文本文件和二进制文件、顺序访问文件和随机访问文件。
本书含有3个附录。附录A中列出了C++中的关键字,附录B列出了ASCII字符集和EBCDIC字符集,附录C给出了C++的所有操作符和转义序列。
三、本书特点
1.不一定需要计算机方面的预备知识
本书第1章专门针对没有学过计算机相关课程的学生,介绍了计算机系统和程序设计的一些背景知识。如果对计算机具有一定的了解,可以将第1章作为复习,或直接从第2章开始学习。
2.在设计和实现程序时,采用了软件开发方法
第2章中介绍的软件开发方法将贯穿全书。首先对问题进行详细的需求说明,然后进行分析,使用自顶向下逐步求精的方法得到算法,然后加以实现成为C++程序,最后进行程序测试,并建立程序文档。通过学习,学生将掌握正确的软件开发方法。
3.由浅入深地介绍了C++语言
C++语言是一种比较复杂,具有较高的灵活性的编程语言。为了使初学者能够完全理解,本书是由浅入深、逐步深入地介绍C++语言的:首先在第3、4和5章介绍了C++语言的五种基本语句——简单输入、输出、算术赋值语句以及if和while语句。然后在第8章才继续学习新的语句和编程方法。
4.提供了大量实例帮助理解
书中列举了大量的例子帮助同学们理解各种概念及C++语言特性和程序设计方法。本书所有的程序都已调试通过,希望能对大家的学习起到举一反三、事半功倍的效果。
5.强调了程序调试的重要性
调试程序与编写程序一样重要,本书详细介绍了程序可能出现的错误、程序调试方法和技巧。每章末尾设置的程序改错就是为了提高大家的调试能力。
6.强调了程序验证和测试的重要性
本书对程序的验证和测试进行了简要介绍,并强调了其重要性。书中大部分程序都附有运行结果示意图,其中采用的数据就是为了进行程序的验证和测试。
7.循序渐进地介绍了模块化编程思想和函数
模块化编程思想和函数是学习的一个难点。本书首先在第6章通过不带输入输出的函数学习了简单的模块化程序,然后讨论了函数之间进行数据交换的过程。在此基础上讨论了用函数名返回值的函数和用参数进行传值调用的函数。第9章在介绍引用变量和指针变量后,继续讨论了函数之间通过引用和指针进行数据交换的方法。
8.巧妙运用递归解决问题
本书第9章通过几个简单的例子介绍了递归和递归函数的概念,并与循环进行了比较。这样让大家对递归有了一个初步的了解,以便在计算机专业的后续课程中继续深入学习。
9.在学习数组之前先介绍结构
大部分的初级教材都将数组放在结构前面介绍,本书则恰好相反,这样能让大家更好地掌握结构数据类型,因为结构很容易与现实世界中的实体和关系联系起来;并且有助于大家理解用户自定义数据类型的概念。
10.引入了面向对象编程的概念
在学习数组之前先介绍结构还有一个好处,就是提前引入了类、对象和面向对象编程的概念。本书第11章将类作为结构的扩展进行了介绍,讨论了类的数据成员和成员函数、对类的成员的访问机制、类的继承和派生、类的运算符重载,并给出了面向对象编程的程序范例。然后讨论了面向对象编程的优点,给出了数据抽象、信息隐藏和软件重用性的概念。
11.以解决问题为目的来学习C++语言
本书并不打算全面介绍C++语言的所有细节和特性,只是以解决编程问题为目的,在有限的学时内,简单介绍解决问题时需要用到的C++特性,掌握程序设计的基本方法和技术。对于动态变量、位处理、多态性、模板等其他特性可以在后续的计算机课程中进行介绍或作为自学内容。因此本书不是一本高深的C++参考书,也不是深入讨论面向对象编程的书籍,而适用于希望用计算机和C++解决问题的初学者。
12.分章讨论指针的用法
指针是C++中一个比较重要的概念,对于初学者来说也是一个难点。本书不是将指针单独作为一章进行介绍的,而是在第9章先介绍了指针的概念,然后说明指针可以用于函数之间传递数据;第12章在学习数组时又用到指针,使用指针/偏移量表示法对数组元素进行访问;第13章在学习串时也用到了指针。这样将指针的学习内容分散到三个章节,能使大家对指针理解得更为透彻,并且为以后学习动态变量和基于指针的抽象数据类型打好了基础。
13.每章前面给出了本章学习内容
这样能让学生对本章需要掌握的概念的方法有所了解,列出相应的学习计划。
14.对重要的概念或语法进行了强调
本书将重要的概念和语法定义用文本框的形式编排出来进行强调,同时也能加深同学们的印象。
15.每章后给出了内容回顾
内容回顾中列出了本章的知识点,有助于大家进行复习巩固,并且与下一章的本章学习内容起到了承上启下的作用。
16.每章后都设置了本章习题
习题分为选择题、简答题和编程题三个部分。选择题和简答题主要用于测试学生对本章学习内容的理解程度和掌握程度。编程题中包括程序调试和编程练习,为学生提供了练习调试程序、编写代码和程序设计的机会。
17.大多数算法描述和注释使用英文
以提高学生阅读英文原版教材的能力。
18.光盘内容
本书所附光盘中包含每章的练习以及一些程序实例。练习可以作为读者对书中相关知识的巩固,也可作为读者自测题。编者另开发了一些程序实例,考虑篇幅的限制,故收录于光盘之中。
四、关于本书
本书由黄迪明、刘家芬、武明编写,杨国炜教授、许家珆教授主审。
衷心感谢电子科技大学兰家隆教授、俞永康教授给予本书编写工作的关心和支持。
本书在编写过程中,得到了何险峰、黄羽、刘波、李平、金飞蔡、董庆丰等人的热情帮助,在此对他们以及所有为本书的出版付出了辛勤劳动的同志们表示衷心的感谢。
由于编者水平有限,书中的缺点和错误在所难免,恳请广大读者批评指正。
编者
2003年5月于电子科技大学