前言

计算机程序设计是一门逻辑性强且主要通过实践环节来学习的课程。学生必须由浅入深地研习其内在逻辑,循序渐进地阅读足量程序并且独立自主地完成相应实验(上机编辑、调试和运行程序)任务,才能在学习和实践中逐步理解程序设计的基础知识,掌握通过特定工具(程序设计语言、软件开发环境等)进行程序设计的基本技能,同时将渐次而来的对于程序设计本质的感悟内化为自己的科学素养。鉴于此,笔者在以前编写过的多本程序设计教材的基础上,根据全国高等院校计算机教学指导委员会的相关文件,以及计算机基础教育的实际需求,以C#程序设计语言和微软.NET框架为载体,精心编写了本书。

1. 本书的特色

本书的特色主要体现在以下几个方面。

(1)选取教学内容时,注重程序设计理念的先进性和程序设计方法的实用性。

C#是较晚出现的程序设计语言,具有多种适应现实需求的特点,而且吸纳了C、C++、Jave和Delphi等语言的主要优点,其程序设计技术以及相关联的基础知识与传统语言有较大差别。例如,C#中引入了LINQ(Language Integrated Query,语言集成查询)查询机制,使得数据查找以及数据库访问的方式与性能有了很大程度的改善。本书依托完整的程序实例介绍了编写这种查询程序的一般方式,并在实验指导中给出详实的操作步骤引导学生编写和运行这种程序。为了加深学生对于重要知识和技能的认知,本书以灵活多样的方式引入了一些实用的程序设计技巧。例如,在讲解方法的递归调用时,简明扼要地介绍了行之有效的尾递归技术,给出便于模仿的实例并在实验指导中给出详实的操作步骤引导学生编写和运行同类型程序。

(2)编排教学内容时,注重学习过程中的思维连贯性。

C#是完全面向对象的程序设计语言,一开始学习就会遇到诸如类、对象、属性、静态字段、实例方法等一大堆抽象的名词和概念。例如,C#中各种数据类型都是由相应的类来定义的,自成一个层次结构的严整体系。与传统程序设计语言(BASIC、C#等)相比,C#提供了丰富多彩的存储和处理数据的方式。本书在编排这部分内容时,尽可能照顾学生在学习过程中的思维连贯性,先就最基本的数据类型给予必要的说明以及便于模仿的例子,然后在其他章节中按内容递进的需求自然地引入各种常用的数据类型,并在具备了必要的基础知识之后,详细地介绍数据类型的意义、类别以及C#和.NET数据类型的层次结构。这样,既可以分散难点,减少学习过程中的困难,又可以加深学生的理解。

(3)在确定编程序所依据的算法时,尽量采用那些可以从相应概念或工作原理出发而自行构拟的算法。每当需要采用某种传统或者经典算法时,尽力讲清楚其内在逻辑。适应范围、优点和局限以及既合理又高效的应用方式。例如,在确定求解高次方程的算法时,首先从给定的形如f(x)=0的方程式推导出形如x=g(x)的迭代式,然后构拟通过这种自行推导出来的迭代式来逐步求得x值的算法;在需要使用经典的“牛顿迭代法”时,除了给出其一般形式的迭代式及其使用方法之外,还从其几何意义入手,讲解构成这种方法的依据。

2. 本书的体例

本书兼顾各教学环节的实际需求,每章都编排了3部分内容。

• 基本知识:介绍程序设计的基础知识、基本技能及其C#程序实现方式。

• 这些都是经过反复推敲筛选出来的主要教学内容,按照教学过程中的实际需求循序渐进地编排在每章的前2~3节之中,并尽力依托易于理解和模仿的实例来讲清楚其来龙去脉。

• 程序解析:讲解相关程序设计任务、解决问题的思路、编程序所依据的算法、程序的运行结果以及修改或扩充程序的思路等。

• 程序解析是本书的一大特色。这些程序都经过了精心的选编、归并和讲解,作为相应章节的程序设计理念和方法的例证,可供学生研读、模仿或者改进和扩充。

• 实验指导:包括验证某种概念和方法的基本实验、运用多种概念和方法的综合性实验以及可能会引起思考或研究欲望的“启发性”实验。

每章的实验指导也都是按照教学活动中的实际需求精心编排的。每章中安排2到5个实验,每个实验往往需要编写并运行多个程序。这些实验中的几个程序往往自成一个由浅入深、循序渐进的体系;几个实验之间构成一个紧扣相关学习内容的完整体系;每章的实验又与前后各章互相照应,成为本书构拟的实验体系中不可或缺的一环。一般来说,按部就班地完成本书规定的实验任务,就可以基本掌握相应的知识和技能了。

本书还有两个附录。

附录1,给出标准ASCII码表。

附录2,介绍数据库系统概念、关系数据库知识与操作,以及C#和.NET的数据库连接和数据查询方式。

3. 教学建议

本书可以作为高等院校程序设计课程的教材。采用本书作为教材的课程以56~64(包括上机时数)学时为宜。学时较少时,可以少讲或不讲数据文件、I/O流、异常处理等内容,还可以不学习和调试程序解析中的某些程序。学时较多时,应该要求学生在做完实验指导中规定的实验之后,调试例题和程序解析中的程序,还有以将附录2作为学习内容。

另外,本书的内容选编以及讲解方式也照顾到了非在校大学生的程序设计工作者的需求,可以作为你们工作或学习过程中的参考书。

4. 作者的愿望

程序设计技术博大精深,涉及计算机科学、数学、工程以及社会文化等各个方面的知识和技术,而且仍处于快速发展变化之中,受篇幅、编著时间、读者定位、程序设计语言与环境以及作者水平等种种限制,这本书所涵盖的内容及所表达的思想可能会有所局限。因而,笔者传达给读者的信息是否正确或者是否得体,还要经过读者的检验,望广大读者批评指正。

姚普选
2015年9月