本书作为主教材《C++程序设计教程(第二版)》的配套教材,并对第一版的《C++程序设计实验指导》做了改版,无论从内容体系、结构布局、实验环境、课程目标,还是从所描述的实验细节上都有了根本性的改进。该书除了可与主教材配套使用外,还可以根据内容的指引及网站的配合,进行独立练习。
本书配合主教材,并通过配套网站的使用、代码现场提交、远程判题、反馈判题结果来衡量自身学习的效果,以实现初学者代码调试和问题解决这两种能力的实质性提升。
书中的三大部分分别包含了五个实验套题和一个实战套题,每部分都列有实验要求、目标、难度与特点,并提供完整的样板实验。实验套题中所设计的问题,其求解充满悬念,须开动脑筋,同时还提供了提示与解答指导。
本书适合作为高等学校“C++程序设计”课程的辅助教材,提供教师在教学中选用其中的一部分;也适合于立志自学成才的读者,帮助他们从零开始走向高级程序员。
第二版前言
《C++程序设计教程(第二版)实验指导》是主教材《C++程序设计教程(第二版)》的配套书。由于第二版主教材对第一版作了根本性的改版,所以对应的实验指导的第二版也基本抛弃了第一版的成书结构,无论从内容体系、结构布局、实验环境、课程目标,还是从所描述的实验细节上都作了根本性的改进。
该书从题目设计,测试数据的构造到难易的把握、整体的布局,都是围绕C++程序设计课程教学来安排的,因而书中实验的设计自成一个课程知识体系。这有利于让课堂知识的讲解朝着问题驱动的教学模式迈进,以更好地进行师生互动,提高教学效果。
本书共分三个部分,每一部分均由“实验概述”、“样板实验”、“实验内容”和“解题指导”四章构成。每个部分都包含了五个实验套题和一个阶段测验,以供教师和学生选择使用。其中每个部分都有实验要求、目标,列出了本部分实验的难度与特点,并提供样板实验。同时,除了阶段测验外,各套实验都提供了解题指导。
第一部分为入门编程,目的在于掌握C++程序设计的基本操作与编程的基本描述技能,以便展开比较有深度的编程分析与逻辑描述的思考。本部分是能否学到C++编程要领的关键,如果第一部分没有掌握,宁可重学,也千万不要跟读后面的内容,因为没有表达能力与调试经验,所从事的编程逻辑思考,恰似无缘之木、无源之水,虽努力撑持,最后也只能痛言放弃。
第二部分为基本编程,目的是掌握C++程序设计的基本方法,提高以编程来解决实际问题的能力。这部分内容学得是否到位,是能否成为一个真正程序员的分水岭。因为搞任何理论性研究,都离不开抽象思维、数学和算法思想。对科学研究来说,语言编程环境只不过是个具体的描述工具而已。另一方面,搞任何系统开发,都离不开对编程语言、编程工具、编程资源的了解,而这一切都与充分进行的编程实践密切相关。程序设计课程的后续课程《数据结构与算法》也正是为了强化这两个目的而开设的。
第三部分为设计与组织,它主要面向编程方法,让读者了解和掌握如何对程序进行合理的布局组织与结构划分。编程方法有多少,程序结构的形式就有多少,因此,学会了程序组织的不同形式,也就从实践环节上看透了各种编程方法的差异与联系,同时也熟悉了多文件结构的程序工程调试,实践过程化与对象化程序设计,实践面向对象程序设计及模板的设计,从而从抽象设计的角度,从分析问题的角度,从设计与代码描述一体化的角度,从系统实现的角度,来了解C++的语言描述能力,了解操作系统与语言系统的联系。
本书的目标是与主教材密切配合,让读者以自学提高为主,逐步具备自学编程的能力,即综合分析问题、解决问题的能力与操作编程技能的同步提高,以便能够独立研读算法理论和系统开发指导等书籍,辅之以网上讨论,专家点拨,最终实现自己的价值。
本书配有一个实验环境网站,内有一个题库,包含了书中第一部分和第二部分的全部实验。网站上具有判题功能,读者可以对应实验的题号,提交自己的代码,验证正确性;测试运行性能,看是否符合要求。同时,网站上还会不断进行一些课程实验,组织一些相关的上机考试,推出一些新的实验套题,并定期在清华大学出版社网站和C++课程教学网站http://kczy.zjut.edu.cn:8015(可由实验网站链接进入)上提供解答及相关的教学资料。
该C++实验网站是一个可以自由访问的实验提交系统,由屡获大学生程序设计竞赛佳绩的学生经过两个版本的更新而成型。值得一提的是,金天鹏和金启为同学为该系统做出了卓越的贡献。实验环境使用说明见附录C。
书中的例子,还有解答指导的样本代码,其风格与主教材保持一致。所有书中的代码都在Borland C++ Builder 6(简称BCB6)上通过了测试,在清华大学出版社网站http://www.tup.tsinghua.edu.cn上可以下载有关的样板实验代码。为了方便读者的学习,还同时提供另一套可以在VC6上运行通过的样板实验代码供读者下载。
书末附有BCB6的安装和简单操作使用介绍以及BCB6的错误信息解读。最后还介绍了实验教学系统OPS的使用说明。
在本书的写作过程中,得到了多方面的帮助。学校网络中心对实验教学系统OPS给予了多方关照,保证了其正常运行;教务处对C++课程教学建设也一直在关心和支持;甚至教育部计算机科学与技术专业教学指导分委员会指导下的2007年计算机专业核心课程C++程序设计教师研修班也在作者所在的浙江工业大学举办。作为国家“十一五”规划教材,本书出版之际,我们的C++程序设计课程已被评为省级精品课程,整个C++课程组都在课程建设和教材建设方面发挥着积极作用。
网评和论坛也给了我许多启示,甚至有些电子邮件直接就说是为了让我写出更好的书。因而所写的书,似乎出自大家的手。感谢为我提供资源,为我创造条件,让我静下心来的人们!在他们的关照、呵护和鼓励下,我的写作过程充满了灵感。好吧,再往前行,接着写下一本,努力满足读者的要求。
作者的电子邮件地址是:qianneng@mail.hz.zj.cn
钱 能
2007年夏于杭州自在居
前 言
本书是《C++程序设计教程》的配套书,同时它也可单独作为学习C++的上机实验指导书。C++程序设计的环境有许多,这里选择了两种,分别是Borland(或TURBO)C++ 3.0 for DOS版和Borland(或TURBO)C++ 5.0 for Windows版。
其中,对Borland C++ 3.0的使用方法给予了较完整的介绍,并给出了编译和链接的错误信息中文解释。
书中根据C++程序设计教程的进度,安排了十个实验单元。每个单元都指出了实验目的和系列的实验题目。每个实验题目都给出基本要求和思考问题。个别实验列出了测试数据和选做项目。还根据需要,个别地方介绍了操作过程。最后还介绍了常用标准库函数的函数原型,并对有些复杂的函数适当展开介绍其使用方法。
II
C++程序设计教程(第二版)实验指导
III
目 录
目 录
第一部分 入 门 编 程
第1章 实验概述2
1.1 实验目标2
1.2 实验环境3
1.3 实验安排5
1.4 做题步骤6
第2章 样板实验15
2.1 实验内容15
2.2 分析题意15
2.3 算法描述18
2.4 代码编写19
2.5 编译调试22
2.6 算法任意性23
2.7 测试数据25
第3章 实验内容27
3.1 第一套实验27
3.1.1 OPS欢迎您27
3.1.2 一个@字符矩形27
3.1.3 一个#字符正方形28
3.1.4 一个字符三角形28
3.1.5 正方形面积29
3.1.6 A-B29
3.2 第二套实验30
3.2.1 字符三角形30
3.2.2 字符菱形31
3.2.3 背靠背字符三角形31
3.2.4 交替字符倒三角形32
3.2.5 格式阵列一33
3.2.6 格式阵列二33
3.3 第三套实验34
3.3.1 1!到n!的和34
3.3.2 等比数列35
3.3.3 菲波那契数35
3.3.4 最大公约数36
3.3.5 最小公倍数36
3.3.6 平均数37
3.4 第四套实验37
3.4.1 级数求和37
3.4.2 对称三位数素数38
3.4.3 母牛问题39
3.4.4 整数内码39
3.4.5 整除3、5、740
3.5 第五套实验40
3.5.1 十-二进制转换40
3.5.2 均方差41
3.5.3 五位以内的对称素数42
3.5.4 统计天数42
3.5.5 杨辉三角形43
3.6 阶段测验44
3.6.1 逆反01串44
3.6.2 倒杨辉三角形44
3.6.3 “顺”序列45
3.6.4 数字和46
3.6.5 组合数46
3.6.6 折纸游戏47
第4章 解题指导49
4.1 第一套实验49
4.1.1 OPS欢迎您49
4.1.2 一个@字符矩形50
4.1.3 一个#字符正方形51
4.1.4 一个字符三角形51
4.1.5 正方形面积52
4.1.6 A-B53
4.2 第二套实验53
4.2.1 字符三角形53
4.2.2 字符菱形54
4.2.3 背靠背字符三角形55
4.2.4 交替字符倒三角形55
4.2.5 格式阵列一56
4.2.6 格式阵列二58
4.3 第三套实验58
4.3.1 1!到n!的和58
4.3.2 等比数列60
4.3.3 菲波那契数61
4.3.4 最大公约数61
4.3.5 最小公倍数62
4.3.6 平均数62
4.4 第四套实验62
4.4.1 级数求和63
4.4.2 对称三位数素数64
4.4.3 母牛问题66
4.4.4 整数内码68
4.4.5 整除3、5、769
4.5 第五套实验70
4.5.1 十-二进制转换70
4.5.2 均方差71
4.5.3 五位以内的对称素数72
4.5.4 统计天数73
4.5.5 杨辉三角形74
第二部分 基 本 编 程
第5章 实验概述78
5.1 实验目标78
5.2 实验规则79
5.3 实验成绩80
第6章 样板实验82
6.1 实验内容82
6.2 分析与试探82
6.3 解决时空问题88
6.4 提高搜索速度91
6.5 测试数据生成93
第7章 实验内容95
7.1 第一套实验95
7.1.1 列出完数95
7.1.2 12!配对95
7.1.3 整数的因子数96
7.1.4 浮点数的位码96
7.1.5 对称素数97
7.2 第二套实验98
7.2.1 密钥加密98
7.2.2 密钥解密99
7.2.3 01串排序100
7.2.4 按绩点排名100
7.2.5 去掉双斜杠注释101
7.3 第三套实验102
7.3.1 n!的位数102
7.3.2 排列对称串103
7.3.3 勒让德多项式表103
7.3.4 立方数与连续奇数和104
7.3.5 菲波那契数105
7.4 第四套实验105
7.4.1 简单四则运算105
7.4.2 大数加106
7.4.3 大数和107
7.4.4 彼此两点最近107
7.4.5 离直线最近的点109
7.5 第五套实验109
7.5.1 大数乘109
7.5.2 n!中的0110
7.5.3 整数模110
7.5.4 k个胜利者111
7.5.5 表达式个数112
7.6 阶段测验112
7.6.1 半数跳海113
7.6.2 01串的位值113
7.6.3 勘探油田114
7.6.4 另类二进制数115
7.6.5 不甘井底的蜗牛116
第8章 解题指导118
8.1 第一套实验118
8.1.1 列出完数118
8.1.2 12!配对119
8.1.3 整数的因子数120
8.1.4 浮点数的位码122
8.1.5 对称素数123
8.2 第二套实验125
8.2.1 密钥加密126
8.2.2 密钥解密127
8.2.3 01串排序127
8.2.4 按绩点排名129
8.2.5 去掉双斜杠注释130
8.3 第三套实验131
8.3.1 n!的位数132
8.3.2 排列对称串133
8.3.3 勒让德多项式表134
8.3.4 立方数与连续奇数和135
8.3.5 菲波那契数136
8.4 第四套实验136
8.4.1 简单四则运算136
8.4.2 大数加139
8.4.3 大数和140
8.4.4 彼此两点最近142
8.4.5 离直线最近的点143
8.5 第五套实验144
8.5.1 大数乘144
8.5.2 n!中的0145
8.5.3 整数模147
8.5.4 k个胜利者149
8.5.5 表达式个数149
第三部分 设计与组织
第9章 实验概述152
9.1 实验目标152
9.2 实验步骤154
9.3 实验报告155
第10章 样板实验157
10.1 实验题目157
10.2 分析设计158
10.3 工程操作163
10.4 独立运行164
第11章 实验内容166
11.1 实验一166
11.2 实验二167
11.3 实验三170
11.4 实验四174
11.5 实验五175
11.6 阶段测验177
第12章 解题指导179
12.1 实验一179
12.2 实验二186
12.3 实验三195
12.4 实验四201
12.5 实验五207
附录215
附录A实验操作指南215
A.1BCB6安装说明215
A.2BCB6操作介绍215
附录BBCB6常见编译错误222
附录C网上提交在线判题系统(OPS)使用说明272
VIII
C++程序设计教程(第二版)实验指导
VII
目 录