《C++程序设计实用教程》利用C++语言介绍程序设计的基本知识,着重介绍C++语言的基本概念、算法与程序设计基础、顺序结构、选择结构、循环结构、数组、函数、指针、结构体和共用体和文件等内容。程序设计采用Visual C++作为编译环境,强调案例式教学,着重于基础知识的讲解,特别是编程思维的引导和练习,有利于读者掌握程序设计的基本方法和编程技巧。本书中的所有程序都按照结构化程序设计方法采用缩进格式编写,并且每章配有各种类型的习题(答案见附录D)和配套的实验内容,以便于读者巩固所学的知识。
《C++程序设计实用教程》力求概念叙述准确、严谨,语言通俗、易懂。本书适合作为高等院校理工科计算机专业和相关专业的程序设计课程的教材,也可供广大科技工作者和研究人员参考。
随着我国高等教育规模的扩大以及产业结构调整的进一步完善,社会对高层次应用型人才的需求将更加迫切。各地高校紧密结合地方经济建设发展需要,科学运用市场调节机制,合理调整和配置教育资源,在改革和改造传统学科专业的基础上,加强工程型和应用型学科专业建设,积极设置主要面向地方支柱产业、高新技术产业、服务业的工程型和应用型学科专业,积极为地方经济建设输送各类应用型人才。各高校加大了使用信息科学等现代科学技术提升、改造传统学科专业的力度,从而实现传统学科专业向工程型和应用型学科专业的发展与转变。在发挥传统学科专业师资力量强、办学经验丰富、教学资源充裕等优势的同时,不断更新教学内容、改革课程体系,使工程型和应用型学科专业教育与经济建设相适应。计算机课程教学在从传统学科向工程型和应用型学科转变中起着至关重要的作用,工程型和应用型学科专业中的计算机课程设置、内容体系和教学手段及方法等也具有不同于传统学科的鲜明特点。
为了配合高校工程型和应用型学科专业的建设和发展,急需出版一批内容新、体系新、方法新、手段新的高水平计算机课程教材。目前,工程型和应用型学科专业计算机课程教材的建设工作仍滞后于教学改革的实践,如现有的计算机教材中有不少内容陈旧(依然用传统专业计算机教材代替工程型和应用型学科专业教材),重理论、轻实践,不能满足新的教学计划、课程设置的需要; 一些课程的教材可供选择的品种太少; 一些基础课的教材虽然品种较多,但低水平重复严重; 有些教材内容庞杂,书越编越厚; 专业课教材、教学辅助教材及教学参考书短缺,等等,都不利于学生能力的提高和素质的培养。为此,在教育部相关教学指导委员会专家的指导和建议下,清华大学出版社组织出版本系列教材,以满足工程型和应用型学科专业计算机课程教学的需要。本系列教材在规划过程中体现了如下一些基本原则和特点。
(1) 面向工程型与应用型学科专业,强调计算机在各专业中的应用。教材内容坚持基本理论适度,反映基本理论和原理的综合应用,强调实践和应用环节。
(2) 反映教学需要,促进教学发展。教材规划以新的工程型和应用型专业目录为依据。教材要适应多样化的教学需要,正确把握教学内容和课程体系的改革方向,在选择教材内容和编写体系时注意体现素质教育、创新能力与实践能力的培养,为学生知识、能力、素质协调发展创造条件。
(3) 实施精品战略,突出重点,保证质量。规划教材建设仍然把重点放在公共基础课和专业基础课的教材建设上; 特别注意选择并安排一部分原来基础比较好的优秀教材或讲义修订再版,逐步形成精品教材; 提倡并鼓励编写体现工程型和应用型专业教学内容和课程体系改革成果的教材。
(4) 主张一纲多本,合理配套。基础课和专业基础课教材要配套,同一门课程可以有多本具有不同内容特点的教材。处理好教材统一性与多样化,基本教材与辅助教材,教学参考书,文字教材与软件教材的关系,实现教材系列资源配套。
(5) 依靠专家,择优选用。在制订教材规划时要依靠各课程专家在调查研究本课程教材建设现状的基础上提出规划选题。在落实主编人选时,要引入竞争机制,通过申报、评审确定主编。书稿完成后要认真实行审稿程序,确保出书质量。
繁荣教材出版事业,提高教材质量的关键是教师。建立一支高水平的以老带新的教材编写队伍才能保证教材的编写质量和建设力度,希望有志于教材建设的教师能够加入到我们的编写队伍中来。
21世纪高等学校计算机教育实用规划教材编委会
联系人: 魏江江 weijj@tup.tsinghua.edu.cn
前言
C++语言是目前被广泛采用的程序设计语言,它语法简洁、运行高效。C++语言既可以用来进行面向过程的程序设计,又可以用来进行面向对象的程序设计。本书利用C++语言讲解面向过程的程序设计,内容包括基本数据类型、基本控制结构、函数、数组、结构体、指针和链表等。本书适合学习程序设计语言的初学者,能够让读者顺利地从面向过程程序设计过渡到面向对象程序设计。本书适合大学本科理工类各专业学生学习C++程序设计语言,同时也适合自学C++语言的读者使用。
本书的编者长期从事C/C++语言程序设计课程的教学工作,本书是在他们多年的教学讲稿的基础上整理而成。本书通过大量的经典例题系统地介绍了C++语言的语法结构和结构化编程的方法。全书共分11章,第1章C++程序设计概述,主要介绍程序设计语言的发展历史、 算法概述、算法的定义和特征、算法的表示、上机指导; 第2章C++的基础知识,主要介绍数据类型、常量、变量、C++的运算符、表达式和C++的基本输入/输出; 第3章顺序结构程序设计,主要介绍C++语句概述、赋值语句、顺序结构程序设计举例; 第4章选择结构程序设计,主要介绍关系运算符和逻辑运算符、if语句、if语句的嵌套、switch语句和条件运算符; 第5章循环结构程序设计,主要介绍基本的循环语句、循环语句的嵌套、break语句和continue语句; 第6章数组,主要介绍数组的含义、一维数组的定义与引用、二维数组的定义与引用、字符数组与字符串; 第7章函数,主要介绍函数的定义与调用、函数的嵌套调用和递归调用、函数的重载、数组与函数、变量的存储类型与作用域; 第8章编译预处理,主要介绍宏的定义、文件包含预处理和条件编译; 第9章结构体和共用体,主要介绍结构体类型、共用体类型、枚举类型和typedef声明类型; 第10章指针,主要介绍指针的概念、指针变量、指针与数组、指针与字符串、指针与函数、存储空间的动态分配和释放、引用、指针与结构体、链表; 第11章文件,主要介绍文件的概念、文件流、文件的打开与关闭、文件的读/写、输入和输出出错处理。本书每一章中都配有相应的上机操作内容。
本书文字精练、例题丰富,易于学生理解。本书中配有各种类型的练习(参考答案见附录D),以便于学生学习和巩固所学知识。此外,本书将教学内容和实验结合到一起,使得本书具有实用性。本书的目标是力求初学者能够顺利地迈进程序设计的大门,成为一个程序设计爱好者。
本书所有的程序实例都在Visual C++6.0中调试过,读者也可自由选用其他符合ANSI标准的C++系统编程环境作为学习工具。
本书由金世双、曾卫明担任主编,徐明、张琳、徐琪担任副主编。全书由金世双组织、确定框架结构,并统编,本书中的所有章节内容都是大家在教研活动中讨论定稿的。本书在编写过程中得到了兄弟高校从事高级语言程序设计的老师的关心和帮助,也得到了清华大学出版社和同行专家、学者和我们的学生的大力支持和帮助,在此一并表示衷心的感谢。此外,本书的编写参考了大量的书籍和报刊,并从互联网上参考了部分有价值的材料,在此向有关的作者、编者、译者和网站表示衷心的感谢。
本书配有电子教案,并提供程序源代码,以方便读者自学,请大家到清华大学出版社网站(http://www.tup.tsinghua.edu.cn)下载。
由于编者水平有限,书中难免有不妥之处,敬请读者和专家批评、指正。
金世双
2014年8月
第1章C++程序设计概述
1.1程序设计语言的发展历史
1.2算法概述
1.2.1算法的定义和特征
1.2.2算法的表示
1.3上机指导
1.3.1上机的准备工作
1.3.2Visual C++6.0的使用方法
习题1
实验1Visual C++6.0开发环境和程序的基本结构实验
第2章C++的基础知识
2.1C++基础知识概述
2.2数据类型
2.2.1整数类型
2.2.2实数类型
2.2.3字符类型
2.2.4布尔类型
2.3常量
2.3.1字面常量
2.3.2符号常量
2.3.3常变量
2.4变量
2.4.1标识符
2.4.2变量的定义与赋值
2.5C++的运算符
2.6算术表达式
2.6.1运算符的优先级和结合性
2.6.2数据类型的转换
2.6.3自增和自减运算表达式
2.7赋值表达式
2.7.1赋值过程中的类型转换
2.7.2复合赋值运算符
2.8逗号表达式
2.9位运算表达式
2.10C++的基本输入/输出
2.10.1输入流/输出流的基本操作
2.10.2输入流/输出流的控制符
习题2
实验2数据类型、运算符和表达式实验
第3章顺序结构程序设计
3.1C++语句概述
3.2赋值语句
3.3顺序结构程序设计举例
3.4顺序结构的应用
习题3
实验3顺序结构程序设计实验
第4章选择结构程序设计
4.1选择结构程序设计概述
4.2关系运算符和逻辑运算符
4.2.1关系运算符
4.2.2逻辑运算符
4.3if语句
4.3.1简单if语句
4.3.2if…else语句
4.3.3if语句的嵌套
4.4switch语句
4.5条件运算符
4.6选择结构的应用
习题4
实验4选择结构程序设计实验
第5章循环结构程序设计
5.1循环结构程序设计概述
5.2基本的循环语句
5.2.1for循环语句
5.2.2while循环语句
5.2.3do…while循环语句
5.3循环语句的嵌套
5.4break语句和continue语句
5.5循环语句程序举例
5.6循环语句在图形上的应用
习题5
实验5循环结构程序设计实验
第6章数组
6.1数组概述
6.1.1一维数组的定义与引用
6.1.2二维数组的定义与引用
6.2字符数组与字符串
6.2.1字符数组的定义与引用
6.2.2字符串
6.2.3字符数组处理函数
6.3数组在矩阵中的应用
习题6
实验6数组实验
第7章函数
7.1函数的定义与调用
7.1.1函数的定义
7.1.2函数的调用
7.2函数的嵌套调用和递归调用
7.2.1函数的嵌套调用
7.2.2函数的递归调用
7.3函数的重载
7.4数组与函数
7.4.1数组元素作为函数参数
7.4.2数组名作为函数参数
7.5变量的存储类型与作用域
7.5.1变量的存储类型
7.5.2变量的作用域
习题7
实验7函数实验
第8章编译预处理
8.1编译预处理概述
8.2宏的定义
8.2.1不带参数的宏定义
8.2.2带参数的宏定义
8.3文件包含预处理
8.4条件编译
习题8
实验8编译预处理实验
第9章结构体和共用体
9.1结构体类型
9.1.1结构体类型的定义与初始化
9.1.2结构体变量的引用
9.1.3结构体数组
9.1.4结构体变量与函数
9.2共用体类型
9.2.1共用体类型的定义
9.2.2共用体变量的引用
9.3枚举类型和typedef声明类型
习题9
实验9结构体和共用体实验
第10章指针
10.1指针的概念
10.2指针变量
10.2.1指针变量的定义
10.2.2指针变量的引用
10.2.3指针变量作为函数参数
10.3指针与数组
10.3.1指针与一维数组
10.3.2一维数组名作为函数参数
10.3.3指针与二维数组
10.3.4指针数组
10.4指针与字符串
10.4.1字符指针
10.4.2字符指针作为函数参数
10.4.3字符指针数组和指向指针的指针
10.5指针与函数
10.5.1函数指针
10.5.2指针函数
10.6存储空间的动态分配和释放
10.6.1new和delete运算符
10.6.2void *指针
10.7引用
10.7.1引用类型概述
10.7.2引用变量作为函数参数
10.7.3返回引用的函数
10.8指针与结构体
10.8.1结构体指针
10.8.2结构体指针作为函数参数
10.9链表
10.9.1链表的概念
10.9.2链表的基本操作
10.9.3链表的应用
习题10
实验10指针实验
第11章文件
11.1文件的概念
11.2文件流
11.3文件的打开与关闭
11.3.1定义文件流对象
11.3.2打开磁盘文件
11.3.3关闭磁盘文件
11.4文件的读/写
11.4.1顺序处理文件操作
11.4.2随机处理文件操作
11.5输入和输出出错处理
11.6文件的应用
习题11
实验11文件实验
附录A基本ASCII码字符表
附录B扩展ASCII码字符表
附录C运算符与结合性
附录D习题答案