
本书作为主教材《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++程序设计教程的进度,安排了十个实验单元。每个单元都指出了实验目的和系列的实验题目。每个实验题目都给出基本要求和思考问题。个别实验列出了测试数据和选做项目。还根据需要,个别地方介绍了操作过程。最后还介绍了常用标准库函数的函数原型,并对有些复杂的函数适当展开介绍其使用方法。
目 录
第一部分 入 门 编 程
第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-B 29
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、7 40
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-B 53
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、7 69
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!中的0 110
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!中的0 145
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.1 BCB6安装说明 215
A.2 BCB6操作介绍 215
附录B BCB6常见编译错误 222
附录C 网上提交在线判题系统(OPS)使用说明 272
VIII
C++程序设计教程(第二版)实验指导
VII
目 录