本书是为以C++语言作为程序设计入门语言的初学者而编写的,全书分为基础篇、能力篇和实验篇。基础篇共有9章,介绍C++语言的语法、编程规范与技巧,有典型例题和大量习题。能力篇介绍6种常用算法的思想与趣味实例,这些贴近生活的实例可使学生触类旁通,举一反三。实验篇介绍了14个实验,每个实验由四部分组成,引导学生从分析程序、完善程序,到动手编程,最后得以进阶提高。
本书简洁易懂,深入浅出,内容取舍合理,重点突出,重视应用。针对初学者的思维特点和教材难点,每章末尾有常见错误分析板块,使学生少犯同样的错误。本书强调培养算法素养、良好编程风格以及面向对象的思维模式,例如第10章以“求三角形种类与面积”为例,讨论了一个小型的课程设计的开发过程,可以提高学生的综合编程能力。
本书是大学C++程序设计教材,也可以作为程序设计爱好者自学以及参加计算机等级考试的参考资料。
C++语言是当今应用广泛的一种混合型的高级程序设计语言。它既保持了C语言的高效和精练,支持面向过程的程序设计的特点,同时又是面向对象语言的杰出代表。
C++语言是众多高级语言中比较难学的一种,一是因为内容庞大,规则繁多,使用灵活,既要讲面向过程的程序设计,又要讲面向对象的程序设计。一般讲授C++语言有两种方式,一种是先学C语言,再学C++语言;另一种是直接讲授C++语言。由于受学时限制,很多学校采用第二种方式。由于C++作为入门语言,没有其他高级语言基础,所以从初学者的思维角度,应该先快速地引导他们认识面向过程的程序设计,熟悉选择结构、循环结构、函数、数组、指针等概念,然后转向面向对象的程序设计,重点掌握封装、继承、多态的概念。对于C语言中的一些重要概念,比如二维数组、指针、结构体、共用体等,在C++中不进行深入讨论,淡化“指针”,突出“引用”,将“结构体”作为一种特殊的“类”处理。
在学习C++语言的过程中,会不可避免地遇到如何处理面向过程的程序设计与面向对象的程序设计的关系。笔者认为不应将二者对立起来,前者是掌握C++的基础,后者是思维模式的转变与提高。对于一些简单的问题,采用面向过程的方法自然、实用,而且面向过程的方法更容易突出算法思想; 对于一些较大规模的问题,从模块化程序设计转变到类与对象是一种自然的过渡。本书第10章列举了一个“求三角形种类与面积”示例,用不同的方法解决一个问题,可以帮助学生理清程序设计思路,选择合适的方法逐步求精,进而完善程序功能。
本书的目标
通过本课程的学习,希望读者能掌握C++语言的基本规则和概念,具备编写和调试一些简单程序的能力,在解决实际问题过程中,能够有意识地运用基本算法,并建立面向对象的思维模式。最后,读者学习本课程也为通过C++二级考试打好基础。
本书的特色
(1) 详略得当,重点突出。本书以大学计算机基础教学的基本要求为依据,兼顾全国计算机等级考试(C++二级)大纲要求。C++语言的内容可以说是博大精深,如果把所有内容都罗列进来,不仅学时不够,而且学生也难以消化。所以,在内容选择上,一些不常用而且比较难的内容,比如异常处理、STL标准模板库等,都不在本书范围内。字符串处理是实际应用中经常遇到的问题,也是程序设计中的一个难点,关于这个难点,本书详细介绍了两种方法: 传统的C语言处理方法和C++的string类的方法,读者可以体会各自的特点。
(2) 理论与实践并重,强调算法思想和编程能力的培养。本书分为基础篇、能力篇和实验篇三部分。基础篇为第1~9章,主要介绍C++语言的语法、规则以及基本的编程方法。能力篇为第10章,针对初学者普遍存在的“看得懂,不会编程序”的问题,首先介绍一些常用的算法及其应用,比如枚举法、递推法、迭代法、递归法、分治法、贪心法等,这些算法在不少程序设计教材中也有涉及,但是都比较分散,本书集中讲解了各种算法,有利于读者系统地掌握算法的特点和应用技巧; 然后讲解了开发一个综合实例的过程,从简单设计到逐步完善,从面向过程到面向对象,引导读者掌握开发一个有一定规模的程序的方法。实验篇包含14个实验,每个实验由分析程序、完善程序、编写程序和进阶提高四部分组成,遵循循序渐进、逐步提高的原则,先从验证性程序起步,然后是阅读和完善别人的程序,接着是学会独立编写和调试程序,最后是综合提高。
(3) 预先出错提醒,让学生尽量少犯错误,少走弯路。在第2~8章的每章最后,都有一节“常见错误分析”,总结初学者在编程中容易出现的错误以及容易混淆的概念。学生了解了编程中出错的位置和原因,才能不断进步,编写出正确的、高质量的程序。
(4) 遵循C++标准和规范。鉴于Visual C++ 6.0的广泛应用,并作为指定考试环境,本书所有程序都在该环境下调试通过。但是,程序要符合标准C++规范,对于Visual C++ 6.0不符合标准的地方以及一些bug给予明确说明,以保证程序在其他环境中也能正常运行。
(5) 习题丰富,类型多样。填空题包括概念填空题、完善程序题以及阅读程序、写运行结果等。编程题是初学者感觉比较困难的,需要加强训练。读者在学习有关内容和例题的基础上,可以编写出规范的、可读性好的程序,不局限于一个标准答案,鼓励“一题多解”,举一反三。简答题主要涉及一些初学者模糊不清的概念,通过这类题目可以使学生加深对基本概念的理解。
本书的内容
本书共分为3个部分。基础篇包括第1~9章的内容。第1章是C++语言概述; 第2章是简单的程序设计,包括数据类型、变量、表达式以及选择结构与循环结构程序设计; 第3章介绍用户自定义的数据类型,包括数组、指针、引用、字符串以及枚举、结构体与共用体等; 第4章介绍函数以及程序结构、变量作用域与生存期等概念; 第5章介绍类与对象; 第6章介绍类的继承与派生; 第7章介绍类的多态性; 第8章介绍文件操作以及输入输出格式控制; 第9章介绍函数模板和类模板。能力篇为第10章,首先介绍一些常用的算法,包括枚举法、递推法、迭代法、递归法、分治法、贪心法及模拟法等(动态规划、回溯法等超出本书范围,不作介绍); 然后以“求三角形种类与面积”为例,讨论了编写一个有一定规模的程序的过程和方法。实验篇包含14个实验,每个实验由浅入深,包括4个组成部分,可以根据学时灵活裁剪。附录A包含一套C++笔试模拟试题和上机操作题,基本以历年C++二级考试真题为蓝本,可以参考检验读者掌握C++的程度。
本书是面向C++语言初学者的入门教材,也可作为计算机二级考试的参考书。
苏成编写第3~5、7~10章,姜薇编写第1~2章,孙仁科编写第5章; 实验篇以及第2~10章的习题由苏成、陈廷杰编写; 全书由苏成统稿。
在本书的编写过程中得到了计算机学院、教务处的支持与帮助,C++课程的有关任课教师提出了许多宝贵意见,杨文嘉老师提出了许多好的建议,在此一并致谢。最后,感谢清华大学出版社员工的辛勤劳动,并感谢魏江江老师的大力支持。
由于水平所限,书中难免存在疏漏之处,敬请广大读者批评指正。
基础篇
第1章c++语言概述
1.1c++语言的产生和发展
1.2c++语言的特点
1.3c++程序的结构
1.3.1简单的c++程序实例
1.3.2c++程序结构分析
1.4c++程序的开发步骤和集成开发环境
1.4.1c++程序的开发步骤
1.4.2vc++6.0集成开发环境
习题
第2章简单的程序设计
2.1c++语言的字符集、标识符与关键字
2.1.1字符集
2.1.2标识符
2.1.3关键字
2.2数据类型
2.2.1c++语言的数据类型简介
2.2.2基本数据类型
2.2.3用typedef重定义类型
2.3常量与变量
2.3.1常量
2.3.2变量
2.4不同类型数据的转换
2.4.1隐式类型转换
2.4.2强制类型转换
2.5运算符与表达式
2.5.1c++运算符简介
2.5.2算术运算符与算术表达式
2.5.3赋值运算符与赋值表达式
2.5.4关系运算符与关系表达式
2.5.5逻辑运算符与逻辑表达式
2.5.6逗号运算符与逗号表达式
2.5.7位运算符
2.6c++语言的基本控制结构及语句
2.6.1c++语句概述
2.6.2顺序结构
2.6.3选择结构
2.6.4循环结构
2.6.5辅助控制语句
2.7常见错误分析
习题
第3章构造数据类型
3.1数组
3.1.1一维数组
3.1.2二维数组
3.2指针
3.2.1指针的概念
3.2.2指针的基本操作与运算
3.2.3指针与数组的关系
3.2.4动态内存分配
3.2.5用限定符const修饰指针
3.3引用
3.3.1引用的概念
3.3.2引用与指针的区别
3.4字符串
3.4.1字符数组
3.4.2字符指针
3.4.3c++风格的字符串处理方法——string类
3.5枚举类型、结构体与共用体
3.5.1枚举类型
3.5.2结构体
3.5.3共用体
3.6常见错误分析
习题
第4章函数
4.1函数的定义和调用
4.1.1函数的定义
4.1.2函数的调用
4.1.3函数的声明
4.2函数的参数传递
4.2.1形参与实参
4.2.2参数的传递
4.2.3数组和指针作为函数参数
4.3递归函数
4.3.1函数的嵌套调用
4.3.2函数的递归调用
4.4内联函数
4.5形参含有默认值
4.6函数重载
4.6.1函数重载的定义
4.6.2匹配函数重载的规则
4.6.3函数重载的注意事项
4.7系统函数
4.8变量的作用域与生存期
4.8.1作用域与可见域
4.8.2局部变量和全局变量
4.8.3变量的生存期与存储类型
4.9常见错误与典型示例
4.9.1常见错误分析
4.9.2典型示例
习题
第5章类与对象
5.1面向对象程序设计的基本概念
5.1.1抽象
5.1.2封装
5.1.3继承
5.1.4多态
5.2类与对象
5.2.1类的定义
5.2.2类成员的访问控制
5.2.3类的成员函数
5.2.4对象
5.3构造函数与析构函数
5.3.1构造函数
5.3.2带默认参数的构造函数
5.3.3复制构造函数
5.3.4析构函数
5.4对象数组和对象指针
5.4.1对象数组
5.4.2对象指针
5.4.3this指针
5.5静态成员
5.5.1静态数据成员
5.5.2静态成员函数
5.6友元
5.6.1友元函数
5.6.2友元类
5.7常类型
5.7.1常对象
5.7.2用const修饰的类成员
5.8常见错误与典型示例
习题
第6章继承与派生
6.1继承与派生的概念
6.2派生类
6.2.1派生类的定义
6.2.2派生类的成员组成
6.2.3继承方式
6.3派生类的构造函数和析构函数
6.3.1派生类的构造函数
6.3.2派生类的析构函数
6.4多继承
6.4.1多继承的定义
6.4.2多继承引起的二义性问题
6.5虚基类
6.5.1虚基类的概念
6.5.2虚基类及其派生类的构造函数
6.6基类与派生类的赋值兼容
6.7常见错误与典型示例
习题
第7章多态性
7.1多态性概述
7.2运算符重载
7.2.1运算符重载为成员函数
7.2.2运算符重载为非成员函数
7.2.3运算符重载的规则和限制
7.2.4运算符重载的应用
7.3虚函数
7.4纯虚函数和抽象类
7.5虚析构函数
7.6常见错误与典型示例
习题
第8章输入输出流
8.1流的概念
8.2输入输出重定向
8.2.14个标准的输入输出流对象
8.2.2输入重定向
8.2.3输出重定向
8.3输入输出格式控制
8.4文件操作
8.4.1c++文件概述
8.4.2文件的打开与关闭
8.4.3对文本文件的操作
8.4.4对二进制文件的操作
8.5常见错误分析
习题
第9章模板
9.1函数模板
9.1.1函数模板的定义
9.1.2函数模板的使用
9.2类模板
9.1.1类模板的定义
9.1.2类模板的使用
习题
能力篇
第10章常用算法与综合实例
10.1常用的算法
10.1.1枚举法
10.1.2递推法
10.1.3递归法
10.1.4递归与递推的比较
10.1.5分治法
10.1.6贪心法
10.1.7模拟法
10.2综合实例
10.2.1用面向过程的方法求三角形种类和面积
10.2.2用面向对象的方法求三角形种类和面积
习题1
实验篇
实验1熟悉c++开发环境和编程步骤
实验2数据类型与表达式
实验3条件与开关语句
实验4循环语句
实验5数组
实验6指针与字符串
实验7函数
实验8作用域、生存期、多文件结构
实验9类与对象
实验10继承与派生
实验11运算符重载
实验12多态性
实验13输入输出流
实验14模板
附录ac++模拟试题
附录bascii码字符表
附录c常用的库函数
参考文献