21世纪影响世界的三大关键技术是: 以计算机和网络为代表的信息技术;以基因工程为代表的生命科学和生物技术;以纳米技术为代表的新型材料技术。信息技术居三大关键技术之首。国民经济的发展采取信息化带动现代化的方针,要求在所有领域中迅速推广信息技术,导致需要大量的计算机科学与技术领域的优秀人才。
计算机科学与技术的广泛应用是计算机学科发展的原动力,计算机科学是一门应用科学。因此,计算机学科的优秀人才不仅应具有坚实的科学理论基础,而且更重要的是能将理论与实践相结合,并具有解决实际问题的能力。培养计算机科学与技术的优秀人才是社会的需要、国民经济发展的需要。
制定科学的教学计划对于培养计算机科学与技术人才十分重要,而教材的选择是实施教学计划的一个重要组成部分,《21世纪计算机科学与技术实践型教程》主要考虑了下述两方面。
一方面,高等学校的计算机科学与技术专业的学生,在学习了基本的必修课和部分选修课程之后,立刻进行计算机应用系统的软件和硬件开发与应用尚存在一些困难,而《21世纪计算机科学与技术实践型教程》就是为了填补这部分鸿沟。将理论与实际联系起来,结合起来,使学生不仅学会了计算机科学理论,而且也学会应用这些理论解决实际问题。
另一方面,计算机科学与技术专业的课程内容需要经过实践练习,才能深刻理解和掌握。因此,本套教材增强了实践性、应用性和可理解性,并在体例上做了改进——使用案例说明。
实践型教学占有重要的位置,不仅体现了理论和实践紧密结合的学科特征,而且对于提高学生的综合素质,培养学生的创新精神与实践能力有特殊的作用。因此,研究和撰写实践型教材是必须的,也是十分重要的任务。优秀的教材是保证高水平教学的重要因素,选择水平高、内容新、实践性强的教材可以促进课堂教学质量的快速提升。在教学中,应用实践型教材可以增强学生的认知能力、创新能力、实践能力以及团队协作和交流表达能力。
实践型教材应由教学经验丰富、实际应用经验丰富的教师撰写。此系列教材的作者不但从事多年的计算机教学,而且参加并完成了多项计算机类的科研项目,把他们积累的经验、知识、智慧、素质融合于教材中,奉献给计算机科学与技术的教学。
我们在组织本系列教材过程中,虽然经过了详细地思考和讨论,但毕竟是初步的尝试,不完善甚至缺陷不可避免,敬请读者指正。
本系列教材主编陈明
2005年1月于北京
前言
我们有幸躬逢信息化时代。在这个知识大爆炸的时代,我们迎来机遇,也面临挑战。
计算机技术迅猛发展始于何时,很难界定。在计算机高级语言的领域,自从20世纪60 年代初期以来,先后开发了许多高级语言。其中,面向过程的程序设计语言首先面世,之后,面向对象的程序设计语言陆续登台。但在科学运算方面,从20世纪80年代末期至今,一枝独秀的高级语言只有C/C++。在可以预见的将来,C/C++仍将葆其青春。
C++是“带类的C”,是面向对象的程序设计(ObjectOriented Programming,OOP)语言。“面向对象”是一个很时髦的关键词。“面向对象”究竟是什么?本书将给读者一个满意的答复。
长期以来,存在着学习C++是否要先学C 语言的争论。我们的观点是:C++是C的扩充;不学C,焉能学C++。再者,C是结构化程序设计语言,虽说是适合于面向过程的程序设计,但在设计面向对象的程序中的主函数和成员函数中,通晓C程序设计技巧,仍是十分必要的。本书按照学习规律,先介绍C的编程技术,然后过渡到对C++的论述。
在科学计算领域,C/C++无疑是主流的程序设计语言。只要从事科技开发,那么,无论做软件还是硬件,都要通晓C/C++程序设计语言。市场上有关 C/C++的教材和参考书可谓争妍斗奇,目不暇接。那么,为什么还要写这本书呢?这本书有什么特点?适合于哪些读者?下面简要地介绍一下。1. 本书的宗旨
本书的取材和体裁服从惟一的宗旨:帮助读者切实地掌握 C/C++程序分析能力和设计技能。2. 本书的特点
(1) 通俗易懂
本书注意用通俗易懂的语言阐述基本理论,特别是讲深讲透许多“难点”,例如:
数组和指针;
引用;
函数中的参数传递、函数体的编写、函数的调用;
多文件操作;
变量的存储和作用域;
类的创建;
继承;
多态性与虚函数。
书中提供许多实例,从正反两方面来说明什么是正确的,什么是错误的。
(2) 利于自学
实践出真知。只有通过不懈的实践,才能真正掌握程序设计技巧。本书作者向读者提供了大量详加注释的程序例题。读者无须输入程序代码,即可在Borland C++(简称BC++)3.0或Visual C++(简称VC++)6.0中运行。这些程序是我们教学经验的积累,已在 BC++3.0 和 VC++6.0 中验证过了, 保证执行结果正确无误。建议读者把这些程序复制到硬盘中,选出一些重点程序,反复思考、运行、修改。
限于篇幅,本书只录入短小的或必须加以解释的程序文本,其他程序只标以名称。列出文本或不列出文本的程序,都附以如下图标:
表示读者应细读该程序;
表示该程序任读者选读。
盛传C/C++“难学”,“不容易”掌握指针、引用、数组以及C/C++的许多概念,而且据说“学了也很难用”。的确,只听几十学时的课,只看教科书,很难掌握C/C++编程技术。所有教材都说C++有 this 指针,但鲜有能确证它的存在和说明它的作用者。本书中将解决这类问题。本书之所以利于自学,是因为书中有许多程序来说明难懂的抽象概念。通过许多实例,将帮助读者走出认识上的种种误区。根据我们的经验,只要读者坚持边阅读,边上机,勤于思考,就会越学越有信心,领悟作为面向对象的编程语言 C++竟是如此惊人地接近人类的思维规律。
(3) 提高学习效率
我们认为,在当今信息大爆炸的信息化时代,如果你要角逐其中,开发新产品,那么,无论你参与软件或硬件的研制,你都无法绕过 C/C++程序设计。但是,在编制程序的过程中,C/C++只是一种工具。学习C/C++并不是终极目标,读者最需要的是学习本行业的专业知识,不通晓专业知识就无法提出据以编程的算法。本书作者提供的大量程序,无须读者自行输入。这会帮助读者在比较短的时间内,高效率地掌握作为工具的C/C++,从而能腾出更多时间学习专业知识,进行开发工作。
(4) 内容丰富,照顾面广
为照顾初学者,本书在几个讲座中介绍了一些不常提及的基本概念,例如整数的上溢出和下溢出,定点数和浮点数的数据结构等。本书也满足对编程有兴趣的读者,对某些问题用多个编程方案加以描述。例如,迭代算法可以用不同的循环结构实现;递归算法可以用非递归算法实现;在说明序列卷积算法时,给出多个程序。在说明对矩阵元素的访问方法时,书中给出几个方案,以深化对数组、指针的认识。
(5) 着重实际应用
学习计算机语言,要面向实际应用。如果只局限于某些概念,满足于了解一些语句,是难以胜任实际开发工作的。本书除了正面阐述,说明什么是正确的,还注意从反面来说明什么是不正确的。作者提供的讲座将介绍在 BC++3.0 和 VC++6.0 环境中怎样编译、连接和运行程序。
本书作为一本教材,难以面面俱到地结合各行各业的实际来阐述。但本书尽量举出众多实例。其中有高斯噪声发生器、定积分的计算、拉格朗日插值公式的计算、多项式的求值,以及卷积算法等。作为学习面向对象程序设计的小结,本书在讲座中给出基于直角坐标的复数类和基于极坐标的复数类、多项式类以及实用的矩阵类等,说明它们的应用。3. 本书的结构
本书共有16章。第1章介绍 C/C++的背景知识,说明面向过程和面向对象的程序设计特点,介绍C/C++程序的开发过程。第2~10章提供基础知识,阐述 C 语言程序设计技术。在此基础上,第11~16章介绍作为面向对象程序设计语言C++的三大特点(封装性、继承性和多态性)、运算符重载和类型转换、C++的代码重用机制(类模板、函数模板)以及输入/输出操作。
为了适应读者的不同需求,或者对某些章节作些补充,或者深入讨论某些专题, 开阔视野,作者提供了12个讲座的内容,读者可按需阅读。
作者提供的800多个程序,供读者上机时使用。这些程序经过调试,能在VC++6.0 和BC++3.0中运行。所有程序均有详细注解,并附有运行结果。列入教材的程序存于目录P中。12个讲座所用的程序存入目录L中。目录R既有目录P和目录L中的程序,还有其他大量程序。此外,作者编写了三个Word文档,简要地介绍了目录P、L、R内的各个程序,以便选用。4. 本书的对象
基于上述特点,本书可用作高等院校非计算机专业和高职院校的编程实践教材。
在职的工程技术人员在百忙之中可以阅读本书。
本书也献给想从事 Windows应用程序开发的朋友。没有C/C++的基础,恐怕难以应用像VC++6.0、BC++等开发系统。
如果读者用其他语言进行程序设计,那么,本书所附的众多程序示例会在算法上给你提供参考。5. 学习方法
学习并无捷径可寻。但正确的学习方法可以收到事半功倍之功。根据作者的工作、学习经验,读者若要快速地掌握一种程序设计语言,就一定要多看书,多上机操练。眼、手、脑并用,是为“捷径”。工夫不负有心人。作者提供的大量程序,既是例题,也是思考题和习题。建议读者先照样运行这些程序,然后思考、看书、修改、求变、再运行……学习程序设计语言,无须死记硬背,重要的是系统的理解和实践,学会查阅资料。作者提供的示例程序和讲座文稿,读者可以从http://www.tup.tsinghua.edu.cn上下载。
本书虽根据多年教学和科研实践写成,但难免有不当之处,敬请读者不吝指正。 作者的电子邮件信箱是: dalunwang@126.com。
作者2006年11月