图书前言

当今世界已进入信息化时代,随着计算机科学技术的迅猛发展,计算机已对人类生活产生了巨大改变,愈来愈多的人开始学习使用计算机。程序设计是实现计算机应用的重要基础和有效手段。

20世纪80年代,计算技术开始渗透到大多数学科领域。1985年春,(美国)计算机协会(Association for Computing Machinery, ACM)与(美国)电气和电子工程师学会计算机分会(Institute of Electrical and Electronics Engineers-Computer Society, IEEE-CS)联手组成攻关组,经过近4年工作,提交了《计算作为一门学科》 (Computing as a Discipline)的报告。1990年,攻关组在该报告的基础上又提交了计算学科教学计划的Computing Curricula 1991(简称CC1991)报告。1998年秋,ACM与IEEE-CS再次联手组成任务组,经过3年多的努力工作,于2001年12月提交了计算学科教学计划的Computing Curricula 2001(简称CC2001)报告。该报告将计算学科划分为14个领域,每个领域分成若干知识单元,每个知识单元又包括若干主题。CC2001将这些领域的大多数知识单元规定为计算机及相关学科本科学生必须掌握的核心知识。程序设计基础主要涉及程序设计基础(PF) 、算法与复杂性(AL)和程序设计语言(PL)等领域。掌握这些领域的知识对于利用计算机资源,开发高效的程序系统是必不可少的。本书内容涵盖或涉及上述3个领域中的多个知识单元,主要包括PF1(基本程序设计结构)、PF2(算法和问题求解)、PF3(基本数据结构)、PF4(递归技术)、PF5(事件驱动程序设计)、AL1(基本算法分析)、AL2(算法策略)、AL3(基本计算算法)、PL1(程序设计语言概述)、PL3(语言翻译)、PL4(数据类型)、PL6(面向对象程序设计)和PL9(数据抽象)等。

计算机运行的过程就是程序执行的过程,运用计算机解决现实世界中的任何实际问题,最终都要将现实问题转换成计算机程序,在这一转换过程中,需要运用多方面的知识进行程序设计,程序是程序设计的结晶,程序设计是开发和应用计算机的钥匙。

“程序设计基础”课程是为高校大多数专业设置的,长期以来,关于如何讲授程序设计基础课程,许多人把争论的焦点放在了语言的选择上,把讲授的重点放在了语言本身,却忽略了程序设计真正实用的基本思维方式和方法,最后导致学生几乎没有分析问题、解决问题的技能。程序设计基础课程教学的核心目标,应该是让学生学习和掌握对于实际问题,如何分析问题和设计解决它们的算法;帮助学生理解程序设计的基本思想和科学原理;掌握程序设计的基本知识、基本技术和基本方法;掌握程序设计中的数据组织结构和程序流程控制结构。为学生能用计算机处理实际问题打下良好基础。

本书主要内容大体可分为五个组成部分。第1章为第一部分,主要介绍程序设计的基础知识。包括程序设计的基本概念、基本思想、基本方法和基本步骤等。帮助读者理解这些概念,弄清这些术语之间的关系,为学习后续内容打好基础。第2、4、6章为第二部分,主要阐述程序设计中的数据组织。包括基本数据类型、构造数据类型和基本数据结构。帮助读者掌握数据的组织形式,能够选择合适的数据组织形式解决实际问题。第3章与第5章的5.6、5.7节为第三部分,主要阐述程序设计中的控制结构。包括三种基本控制结构、函数、子程序与过程文件等内容。帮助读者掌握程序的三种基本控制结构(顺序结构、选择结构、循环结构)与实现过程的封装。在解决实际问题中,能够设计出具有良好结构的程序。第5章的5.1~5.5节与第7章为第四部分,主要阐述程序设计中的技术与方法。包括程序设计的技术与方法(模块化设计技术与方法、自顶向下设计技术与方法、逐步求精设计技术与方法、结构程序优化技术与方法等)以及算法设计中的常用方法(包括枚举法、递归与递推、分治法、动态规划法、贪心法、回溯法与分支限界法等),在这一部分将通过能付诸实施的、生动有趣的大量应用实例进行讲解,使读者进一步熟悉前面所学内容,熟练掌握程序设计的基本思想、基本技术和基本方法。第8章为第五部分,以解决问题为中心。通过几个典型问题,综合运用前面所学知识,完成问题分析、算法设计、程序实现与程序运行。使所学知识综合应用到解决实际问题中。

由于Pascal语言具有丰富的数据类型和良好的结构,所以在数据组织的描述中,拟选用类Pascal语言作为工具;为了着重体现算法设计的思想与算法结构,对算法的描述拟选用结构化流程图(N-S图)作为工具;为了方便读者上机实践,将选用较流行的C语言或VFP语言对所有算法进行编程实现。既让读者在脱离复杂语言环境下轻松学习程序设计思想和方法,又不至于使他们陷入只有思想的纸上谈兵。这是本书的特色之一。程序设计既是一门实践性很强的带有艺术特性的变换技术,又是一门科学。本书在每一章都开辟了一个课程设计题目,包括问题描述、基本要求、测试数据、实现提示和问题拓展,旨在提高读者分析问题和解决问题的能力。这是本书的又一个特色。

程序设计基础课程在教学计划中至少应为6学分,课堂教学在60~80学时之间。本课程是一门技术性、实践性都很强的课程,为了使学生能真正掌握有关理论知识和应用技术,在整个教学过程中至少应安排5个以上课程设计,必须保证学生有足够的课下思考作业时间和上机实践时间。上机时数、课下作业时数和课堂讲授时数的比例应不低于0.5∶2∶1. 

本书作为我校教改项目--“数据结构与程序设计课程建设及教学现代化研究”的组成部分,在课程建设过程中,得到各级领导的支持、专家的指导和同事的帮助。在此表示谢意。

本书凝结了作者二十多年来的教学科研成果和在讲授“程序设计基础”、“数据结构”等课程中的教学经验。在编写过程中,参阅了多种程序设计基础与算法的优秀教材。在编辑出版过程中,得到了清华大学出版社各级领导的支持;负责本书编辑工作的全体同仁,特别是责任编辑汪汉友同志付出了辛勤劳动。在此一并表示衷心的感谢。

由于作者水平有限,加之学科理论与技术发展日新月异,书中疏漏谬误之处在所难免,恳请广大读者指正。 

作 者2009年8月