教育教学
当前位置: 首页 >> 教育教学 >> 教学文件 >> 正文
程序设计基础实验(课程设计)教学大纲
发布时间:2014-11-25 点击:

教案(首页)

课程名称

程序设计基础实验(课程设计)

课程类型

通识课组群();专业(学科)课程组群(√);公共选修课程组群();科研训练与素质拓展();

授课方式

理论( )实验(√)实习()

课程总学时

14学时

学 分

1学分

学时分配

总学时:14。其中,讲课 学时; 实验实践14 学时

教材名称

程序设计基础课程设计

[1]冯俊.算法与程序设计基础教程.北京:清华大学出版社,2010

[2]冯俊.大学计算机数据库与程序设计基础.北京:清华大学出版社,2011

[3]冯俊.大学计算机数据库与程序设计基础题解及课程设计指导.北京:清华大学出版社,2012

授课教师

冯俊

职称

教授

学科

计算机

授课时间

授课地点

说明:本页用于一门课程实施方案的整体设计;表中()选项请打“√”

1.8课程设计相关知识

课程设计是对学生分析问题、解决问题能力的一种全面综合的训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。

1.8.1课程设计目的与内涵

理解课程内容与较好地解决实际问题之间存在着明显差距,解决实际问题的能力与程序设计技术的培养是密切相关的。要想理解和巩固所学的基本概念、基本原理和基本方法,牢固地掌握所学的基础知识、基本技能,达到融会贯通、举一反三、触类旁通的程度,就必须多做、多练、多实践。课程设计正是着眼于理论与实践的结合点,使学生学会如何把书本上学到的知识应用于解决实际问题,培养软件工作者所需要的动手能力。课程设计是程序设计的综合训练,包括问题需求分析、总体结构设计、算法(程序)设计技术和方法,以及研究开发程序系统的工作规范和科学作风的培养。

为了达到上述目的,本书各章都安排了一个课程设计题目,每个题目都采用了统一格式,由问题描述、基本要求、测试数据、实现提示和问题拓展五个部分组成。问题描述给出问题的背景环境,指明要做什么;基本要求是对问题的进一步求精,划定问题的边界,并规定完成该题目的最低要求;测试数据是为学生静态检查和上机调试提供方便,在完成题目时,学生应设计完整的、严格的测试方案;实现提示是对实现中的难点及其解题思路等内容作了简要提示;问题拓展旨在开拓学生的思路,展现学生的创造力,使学生尽可能寻求尽善尽美的解决方案,使得数据组织形式、程序结构更加合理,具有正确性、可读性、可维护性和可扩充性。

在课程设计环节中,有些题目与书中介绍的内容相关,在书中只是应用了面向过程的某种语言进行算法设计和程序编制,重点放在解题思路与解题策略。由于计算科学发展迅猛,可以运用的语言工具和环境愈来愈丰富,对于同样的题目、同样的解题策略、同样的算法,学生可以运用各种自己熟练掌握的程序设计语言(包括面向对象语言)来实现。

1.8.2课程设计步骤

结构化系统分析和设计方法将系统研制过程划分为系统分析、系统设计、系统实施和系统维护四个阶段。这里课程设计的复杂度虽然远不如实际应用系统的复杂度,但为了培养一个软件工作者所应具备的科学工作作风,要求课程设计的步骤如下。

(1)问题分析和需求定义

对于给定的题目进行分析和理解,明确题目要做什么。对问题的描述应避开算法和所涉及的数据类型,避免过早地陷入细节,要对所需完成的任务做出明确的描述。即问题如何分解,需要输出什么,需要那些输入数据。这一步还应该考虑测试数据,包括合法数据和非法数据。

(2)数据的逻辑结构设计和运算的定义

根据问题分析和需求定义描述数据的逻辑结构,对每个基本操作给出尽可能明确具体的规格说明;并按照以数据结构为中心的原则划分模块,确定模块功能,给出模块之间的关系调用图。在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于实现。

(3)数据的存储结构设计和算法设计

它是数据的逻辑结构和运算的具体实现,写出数据存储结构的类型定义和变量说明,根据每个基本操作的规格说明和模块功能设计出可读性强、结构好的算法。在这个过程中,应尽量避免过早地陷入程序设计语言细节。

(4)编码实现和静态检查

编码实现是把数据的存储结构设计和算法设计的结果进一步用某种程序设计语言进行描述,变换成可以在计算机上运行的程序。在编程过程中,对于不确定的语句(命令)功能,同样要先上机验证,再使用。把算法变换为程序时,可以适当地追求程序的执行效率。在程序中还应该适当地加一些注释,以增强程序的可读性。

在程序代码编写完成后,认真进行程序的静态检查是必不可少的。静态检查主要有两种方法:一是用一组或几组测试数据静态执行程序,这也为上机动态调试做好了准备工作;二是通过反复阅读或给别人讲解自己的程序,从而达到深入全面地理解程序的逻辑结构。

(5)设计测试方案和上机调试

确定几组输入的测试数据以及应该得到的相应结果,包括中间结果和最终结果。调试可以采取自顶向下或自底向上、分模块进行。调试过程中,经常会遇到意想不到的异常现象,这时应积极确定疑点,检查相应变量的值,寻找错误,修改程序,最终得到正确的程序。调试完毕后,认真整理源程序及其注释,记录输入数据和处理结果。

(6)总结和整理课程设计报告

1.8.3课程设计报告规范

课程设计报告的开头应给出题目、班级、姓名、学号以及完成日期等信息,并重点整理下列内容:

1.问题分析和需求定义。

2.数据的逻辑结构设计和运算的定义。

3.数据的存储结构设计和算法设计。

4.调试过程及其分析。内容包括:(1)调试过程中遇到的问题是如何解决的,以及对设计和实现的感悟;(2)算法复杂性分析和算法的改进;(3)经验、体会和收获等。

5.用户使用说明。说明如何使用你设计的程序。

6.程序运行结果。包括输入数据和输出数据。

7.附录。带注释的源程序及相关资料。

1.8.4课程设计示例

在实际应用问题中,经常会涉及到多种类型的数据结构以及它们之间的复杂操作,这就需要综合运用学过的数据结构、算法设计、编程技术等方面的知识。

解决具体问题,通常从分析问题出发,进行数据抽象、过程抽象和控制抽象,选取适当的数据结构将问题形式化,定义操作,设计相应的算法,进行编程和组装。在下面的示例中,我们仅给出完成课程设计的一般步骤,并未给出具体的程序实现。试图引导读者将解决问题的策略从以功能或信息为中心转变到以对象为中心;试图引导读者如何进行数据抽象和过程抽象分析,实现简单的封装和复用。这就要求读者学习一点面向对象的分析方法、面向对象的设计和面向对象的编程技术。

汽车牌照的快速查找。排序和查找是信息处理中使用频率极高的操作。在汽车信息模型中,汽车牌照编码是关键字,并且是具有结构特点的一类关键字。例如,某汽车牌照编码为01B7328,它由数字和字母混编而成。为了提高按关键字的查找速度,就需要按关键字进行排序。对于这种混合编码的关键字,可选用基数排序法。对已排序的数据结构,可采用折半查找法实现对汽车牌照编码的快速查找。

(1)问题描述

①题目:对某组织的汽车牌照编码进行快速查找。

②基本要求:利用基数排序法和折半查找法完成本课程设计。

③测试数据:键盘录入或随机生成。

(2)需求分析

①本课程设计要求采用基数排序法对一批具有结构特征的汽车牌照编码为关键字的记录进行排序;并且采用折半查找法对已排序的记录集合按汽车牌照编码进行快速查找。

②测试数据的每个记录包括5个基本数据项:牌照编码、商标、颜色、注册日期和车主姓名。牌照编码为关键字,结构形式如下:

k1 k2 k3 k4 k5 k6 k7

0

1

B

7

3

2

8

其中,前两位k1k2的取值范围为01~31(代表地区),第3位取值范围为A~Z(代表车的类型),后4位k4k5k6k7的取值范围为0000~9999(顺序号)。这种汽车牌照编码具有多关键字的特征,处理时可以将其分成3段来考虑,即数字、字母和数字。

③建立数据模型,确定存储结构。比如,以静态链表作为存储结构。

④运行程序,应具有友好的用户界面。比如,可以进行系统初始化、数据输入与维护、排序和查找等功能选择。

⑤测试数据要求用不少于50个记录数据进行程序测试。

(3)概要设计

①静态表的抽象数据类型描述。

②程序系统包含5个模块:主模块;系统初始化模块;数据输入和维护模块;基数排序模块;折半查找模块。

③各模块之间的调用关系。

(4)详细设计

①静态链表的类型定义与变量说明。

②在进行分配和收集操作时,用到的数组类型定义和变量说明。

③输入、输出函数定义与算法设计。

④基数排序中用到的各函数定义与算法设计。

⑤折半查找中用到的各函数定义与算法设计。

⑥各函数之间的调用关系。

(5)实施编程与组装

(6)测试结果

①测试数据的录入形式,或随机产生的测试数据列表。

②输出排序结果。

③输出查找结果。

(7)调试分析

①调试过程中出现的问题与解决方法。

②时间复杂度分析与空间复杂度分析。

③课程设计总结。

(8)程序系统使用说明

(9)附录(源程序文件清单)

讲授题目

1章 绪 论

课时安排

2课时

教学目的与要求

1.熟悉各名词、术语的含义,掌握基本概念,特别是数据的逻辑结构和存储结构之间的关系。分清哪些是逻辑结构的性质,哪些是存储结构的性质。

2.握算法设计的基本要求。理解算法五个要素的确切含义。

3.掌握算法的描述方法以及从空间和时间角度分析算法的方法。

4.了解数据结构课程与其他课程之间的关系。

教学重点与难点

1.数据结构的概念。

2.算法的描述。

教学基本内容纲要

方法及手段

1.8课程设计相关知识.........................................................................3

1.8.1课程设计目的与内涵............................................................3

1.8.2课程设计步骤......................................................................3

1.8.3课程设计报告规范...............................................................4

1.9课程设计题目——求最大公因子 6

课堂讲授

上机实验

1.9课程设计题目——求最大公因子

问题描述

求两个整数m、n的最大公因子。

基本要求

(1)至少完成3个版本的算法设计和程序实现。

(2)对所设计的算法进行时间复杂性分析。

(3)确定程序中的基本操作,在程序的适当位置添加计数器统计基本操作的执行次数,分析3个版本程序的执行效率。

(4)通过分析比较得出结论。

测试数据

至少准备15组测试数据。以较小的数据测试程序的正确性;以较大的数据或能使基本操作执行数百次以上的数据测试程序效率。

实现提示

可以参照书中算法1-1至算法1-4编制程序。

问题拓展

(1)寻求新的解决问题的策略。比如,基于分解质因子求gcd(m,n)的算法。

(2)求3个或n个整数的最大公因子。

(3)基本要求中采用的计数法分析程序效率,称为算法的后验分析(Posteriori),也称为实验分析。至少准备50组测试数据,使每个程序自动完成求这50组数据各自的最大公因子,并以表格形式记录每个程序基本操作执行次数,分析得到的实验数据。

课后小节:

说明:本页用于一个教学内容(教学单元)或一次课教学实施方案的设计。如填写的内容较多,可另加附页。

讲授题目

第2章C语言与C++语言

课时安排

2课时

教学目的与要求

教学重点与难点

教学基本内容纲要

方法及手段

第2章C语言与C++语言.........................................错误!未定义书签。

2.1 C语言的发展与特点.....................................错误!未定义书签。

2.1.1 C语言的发展.....................................错误!未定义书签。

2.1.2 C语言的优缺点..................................错误!未定义书签。

2.1.3 C语言的特点.....................................错误!未定义书签。

2.1.4高效使用C语言................................错误!未定义书签。

2.2 C语言应用程序结构.....................................错误!未定义书签。

2.3 Visual C++ 6.0集成开发环境.........................错误!未定义书签。

2.3.1Visual C++ 6.0的安装..........................错误!未定义书签。

2.3.2 Visual C++ 6.0的帮助系统...................错误!未定义书签。

2.3.3 Visual C++ 6.0的启动和退出...............错误!未定义书签。

2.3.4 Visual C++ 6.0的集成开发环境............错误!未定义书签。

2.3.5Visual C++ 6.0集成开发环境设置........错误!未定义书签。

2.3.6 Visual C++常用术语............................错误!未定义书签。

2.4运行C语言应用程序方法与上机操作步骤....错误!未定义书签。

2.4.1输入和编辑源程序.............................错误!未定义书签。

2.4.2源程序的编译、连接和运行...............错误!未定义书签。

2.4.3建立和运行包含多个源程序文件的应用程序方法错误!未定义书签。

2.5从面向过程到面向对象................................错误!未定义书签。

2.5.1模块..................................................错误!未定义书签。

2.5.2信息隐蔽和抽象数据类型...................错误!未定义书签。

2.5.3面向对象程序设计.............................错误!未定义书签。

2.6 C++语言......................................................错误!未定义书签。

2.6.1 C语言与C++语言的差异....................错误!未定义书签。

2.6.2类和类的定义....................................错误!未定义书签。

2.6.3类的对象及应用.................................错误!未定义书签。

2.6.4构造函数和析构函数..........................错误!未定义书签。

2.6.5重载...................................................错误!未定义书签。

2.6.6派生与继承........................................错误!未定义书签。

2.6.7多态性与虚函数.................................错误!未定义书签。

2.6.8函数模板和类模板.............................错误!未定义书签。

2.7课程设计题目——类与对象.........................................................8

习题二 错误!未定义书签。

1.课程设计

2.上机实验

答疑讨论、作业和思考题:

2.9课程设计题目——类与对象

1.问题描述

定义一个基类和多个派生类,像基本类型那样应用这些类。

2.基本要求

(1)至少定义一个基类。如有理数类rational或点形状类型shape。

(2)至少定义2个派生类。如圆类型、三角形类型或四边形类型等。

(3)类定义中包含构造函数、析构函数、重载函数、重载运算符、虚函数等。

(4)类定义为头文件。成员函数由源程序文件实现。

(5)像基本类型那样应用这些类编写应用程序。

3.测试数据

读者自己设计。

4.实现提示

可以参照本章示例。

5.问题拓展

运用函数模板和类模板的泛型机制。

课后小节:

说明:本页用于一个教学内容(教学单元)或一次课教学实施方案的设计。如填写的内容较多,可另加附页。

讲授题目

第3章 简单数据类型与表达式 错误!未定义书签。

课时安排

4课时

教学目的与要求

教学重点与难点

教学基本内容纲要

方法及手段

第3章 简单数据类型与表达式...............................错误!未定义书签。

3.1数据类型.....................................................错误!未定义书签。

3.1.1基本概念和术语.................................错误!未定义书签。

3.1.2数据类型与数据结构..........................错误!未定义书签。

3.1.3简单数据类型....................................错误!未定义书签。

3.1.4构造数据类型....................................错误!未定义书签。

3.2常量与变量.................................................错误!未定义书签。

3.2.1常量..................................................错误!未定义书签。

3.2.2变量..................................................错误!未定义书签。

3.3运算符与表达式..........................................错误!未定义书签。

3.3.1,算术运算符与算术表达式...................错误!未定义书签。

3.3.2字符运算符与字符表达式...................错误!未定义书签。

3.3.3关系运算符与关系表达式...................错误!未定义书签。

3.3.4逻辑运算符与逻辑表达式...................错误!未定义书签。

3.4课程设计题目——求最小公倍数..................................................9

习 题...........................................................错误!未定义书签。

1.课程设计

2.上机实验

答疑讨论、作业和思考题:

3.4课程设计题目——求最小公倍数

问题描述

求两个非负整数m、n的最小公倍数。

基本要求

(1)至少完成3个版本的算法设计和程序实现。

(2)对所设计的算法进行时间复杂度分析。

(3)确定程序中的基本操作,在程序的适当位置添加计数器统计基本操作的执行次数,分析3个版本程序的执行效率。即用后验分析法分析程序的执行效率。

(4)通过分析比较得出结论。

测试数据

至少准备15组测试数据。以较小的数据测试程序的正确性;以较大的数据或能使基本操作执行数百次以上的数据测试程序的执行效率。

实现提示

可以将求最小公倍数问题转换为求最大公因子问题。即最小公倍数是两个整数的乘积除以它们的最大公因子。

问题拓展

(1)寻求新的解决问题的策略。比如,辗转相除两个整数的所有公因子,再将两个整数所得的商与所有公因子相乘。

(2)求3个或n个非负整数的最小公倍数。

(3)至少准备50组测试数据,使每个程序自动完成求这50组数据各自的最小公倍数,并以表格形式记录每个程序基本操作的执行次数,分析得到的实验数据。

课后小节:

说明:本页用于一个教学内容(教学单元)或一次课教学实施方案的设计。如填写的内容较多,可另加附页。

讲授题目

第4章 程序的基本控制结构 错误!未定义书签。

课时安排

2课时

教学目的与要求

教学重点与难点

教学基本内容纲要

方法及手段

第4章 程序的基本控制结构...................................错误!未定义书签。

4.1程序的基本控制结构...................................错误!未定义书签。

4.1.1 3种基本控制结构............................错误!未定义书签。

4.1.2 关于对GOTO语句的认识................错误!未定义书签。

4.2顺序结构程序设计.......................................错误!未定义书签。

4.3选择结构程序设计.......................................错误!未定义书签。

4.3.1单向分支选择结构程序设计...............错误!未定义书签。

4.3.2双向分支选择结构程序设计...............错误!未定义书签。

4.3.3多向分支选择结构程序设计...............错误!未定义书签。

4.4循环结构程序设计.......................................错误!未定义书签。

4.4.1 当型循环结构程序设计....................错误!未定义书签。

4.4.2 直到型循环结构程序设计.................错误!未定义书签。

4.4.3 步长型循环结构程序设计.................错误!未定义书签。

4.5课程设计题目——求解方程的根................................................11

习 题 错误!未定义书签。

1.课程设计

2.上机实验

答疑讨论、作业和思考题:

4.5课程设计题目——求解方程的根

问题描述

求解一元二次方程f(x)=ax2+bx+c=0的根。

基本要求

(1)至少完成以下2个版本的算法设计和程序实现。

(2)用求根公式求方程的根。

(3)用牛顿迭代法求方程的根。

(4)用弦截法求方程的根。

测试数据

给定方程系数a、b、c一组值,由求根公式解出方程的根。根据此根确定牛顿迭代法中第1次近似根x0以及弦截法中的两个不同的初始点x1、x2

实现提示

1.牛顿迭代法又称为牛顿切线法,它采用以下方法求根:首先选定一个与真实根接近的数x0作为第1次近似根;求出f(x0)的值,过点(x0,f(x0))做y= f(x)的切线,交x轴于x1,作为第2次近似根;再求出f(x1)的值,过点(x1,f(x1))做y= f(x)的切线,交x轴于x2,作为第3次近似根;…;如此继续下去,直到得到足够接近真实根x*为止。牛顿迭代公式如下。

2.弦截法方法如下:

(1)取两个不同的初始点x1、x2,使得f(x1)f(x2)<0,这时,区间(x1,x2)内必有一个根。注意x1、x2的值不要相差太大,以保证区间(x1,x2)内只有一个根。

(2)连接(x1,f(x1))与(x2,f(x2))两点,该弦交x轴于x*,x*值可由下式求出。

(3)若f(x*)f(x2)<0,则区间(x*,x2)内必有一个根,令x1=x*。若f(x1)f(x*)<0,则区间(x1,x*)内必有一个根,令x2=x*。

(4)重复步骤(2)和步骤(3),直到f(x*)的值足够接近于0。

课后小节:

说明:本页用于一个教学内容(教学单元)或一次课教学实施方案的设计。如填写的内容较多,可另加附页。

讲授题目

第5章 构造数据类型 错误!未定义书签。

课时安排

4课时

教学目的与要求

教学重点与难点

教学基本内容纲要

方法及手段

第5章 构造数据类型.............................................错误!未定义书签。

5.1数组类型.....................................................错误!未定义书签。

5.1.1 一维数组.........................................错误!未定义书签。

5.1.2 二维数组.........................................错误!未定义书签。

5.1.3 查找................................................错误!未定义书签。

5.1.4 排序................................................错误!未定义书签。

5.2结构体类型.................................................错误!未定义书签。

5.2.1结构体类型的概念.............................错误!未定义书签。

5.2.2结构体类型的定义.............................错误!未定义书签。

5.2.3结构体变量的说明.............................错误!未定义书签。

5.2.4结构体变量的引用.............................错误!未定义书签。

5.2.5结构体应用举例.................................错误!未定义书签。

5.3其它构造数据类型.......................................错误!未定义书签。

5.3.1 共用体类型......................................错误!未定义书签。

5.3.2 文件类型.........................................错误!未定义书签。

5.4课程设计题目——排序算法.......................................................13

习 题 错误!未定义书签。

1.课程设计

2.上机实验

答疑讨论、作业和思考题:

课后小节:

5.4课程设计题目——排序算法

问题描述

由键盘输入n个数据,实现升序排序或降序排序。

基本要求

(1)至少完成3个版本的排序方法。如,直接插入排序、折半插入排序和冒泡排序等。

(2)以菜单驱动方式选择按升序排序或降序排序。

(3)以菜单驱动方式选择排序方法。

(4)分析各排序算法的时间效率。

测试数据

至少给定3组数据,一组为升序、一组为降序、多组为无序。

实现提示

(1)不妨假定待排序数据为整型数据或实型数据。

(2)n个数据存储在一维数组。n定义为符号常量。

问题拓展

(1)对二维数组进行排序。

(2)对结构体数组进行排序。

(3)将两个有序数组归并成一个有序数组。

(4)了解其它排序方法。例如,选择排序、希尔排序、快速排序、归并排序等。

说明:本页用于一个教学内容(教学单元)或一次课教学实施方案的设计。如填写的内容较多,可另加附页。

讲授题目

第6章 结构化程序设计 错误!未定义书签。

课时安排

6课时

教学目的与要求

教学重点与难点

教学基本内容纲要

方法及手段

第6章 结构化程序设计..........................................错误!未定义书签。

6.1结构化方法概述..........................................错误!未定义书签。

6.2模块化设计技术与方法................................错误!未定义书签。

6.2.1模块化的一般目标.............................错误!未定义书签。

6.2.2模块凝聚(聚合)与模块耦合(关联)错误!未定义书签。

6.2.3模块的设计准则.................................错误!未定义书签。

6.3自顶向下设计技术与方法............................错误!未定义书签。

6.3.1自顶向下设计....................................错误!未定义书签。

6.3.2自顶向下编码....................................错误!未定义书签。

6.4逐步求精设计技术与方法............................错误!未定义书签。

6.4.1选择排序算法的逐步求精设计过程.....错误!未定义书签。

6.4.2积木游戏算法的逐步求精设计过程.....错误!未定义书签。

6.5结构程序优化技术与方法............................错误!未定义书签。

6.5.1问题模型优化....................................错误!未定义书签。

6.5.2计算方法优化....................................错误!未定义书签。

6.5.3算法优化...........................................错误!未定义书签。

6.5.4数据结构优化....................................错误!未定义书签。

6.6子程序与过程文件.......................................错误!未定义书签。

6.6.1子程序...............................................错误!未定义书签。

6.6.2过程文件...........................................错误!未定义书签。

6.6.3过程应用举例....................................错误!未定义书签。

6.7函数............................................................错误!未定义书签。

6.7.1函数的定义和调用.............................错误!未定义书签。

6.7.2函数的嵌套调用和递归调用...............错误!未定义书签。

6.7.3内部函数和外部函数..........................错误!未定义书签。

6.7.4函数应用举例....................................错误!未定义书签。

6.8课程设计题目——学生成绩管理系统.........................................16

习 题 错误!未定义书签。

1.课程设计

2.上机实验

答疑讨论、作业和思考题:

课后小节:

6.8课程设计题目——学生成绩管理系统

问题描述

建立学生成绩管理系统。

基本要求

(1)每个学生信息至少包含学号、姓名以及5门课程成绩。

(2)学生信息以班为单位进行存储管理,至少有3个班,每班至少有10个学生。学生信息以数据表或数据文件进行组织存储。

(3)系统功能包括学生信息输入、学生信息修改、学生信息查询和学生信息输出等。每个功能都由函数或过程实现。

测试数据

由读者自己设计。

实现提示

参照例6-6维护学生成绩数据库。

问题拓展

(1)计算每个学生的总成绩和平均成绩。计算每个班级每门课程的平均成绩。

(2)查找每个班级平均成绩最高与平均成绩最低的学生信息。

(3)在所有学生中,查找平均成绩最高与平均成绩最低的学生信息。

(4)每个班级的学生信息按平均成绩由高到低排序、以表格形式输出。

(5)所有学生信息按平均成绩由高到低排序、以表格形式输出。

(6)对所有学生计算各门课程的平均成绩,并输出平均成绩最高的课程和平均成绩最低的课程。

说明:本页用于一个教学内容(教学单元)或一次课教学实施方案的设计。如填写的内容较多,可另加附页。

讲授题目

第7章 基本数据结构 错误!未定义书签。

课时安排

4课时

教学目的与要求

1. 熟练掌握二叉树的结构特性。

2. 熟悉二叉树的各种存储结构的特点及适用范围。

3. 遍历二叉树是二叉树各种操作的基础。实现二叉树遍历的具体算法与所采用的存储结构有关。不仅要熟练掌握各种遍历策略的递归和非递归算法,了解遍历过程中“栈”的作用和状态,而且能灵活运用遍历算法实现二叉树的其它操作。

4. 理解二叉树线索化的实质是建立结点与其在相应序列中的前驱或后继之间的直接联系,熟练掌握二叉树的线索化过程以及在中序线索化树上找给定结点的前驱和后继的方法。二叉树的线索化过程是基于对二叉树进行遍历,而线索二叉树上的线索有为相应的遍历提供了方便。

5. 熟悉树的各种存储结构及其特点,掌握树和森林与二叉树的转换方法。建立存储结构是进行其他操作的前提,因此学生应掌握1至2种建立二叉树和树的存储结构的方法。

6. 学会编写实现树的各种操作的算法。

7. 掌握由前序序列和中序序列构造二叉树的方法。

8. 掌握二叉树的线性存储表示。

教学重点与难点

1. 树和二叉树的前序遍历算法。

2. 树和二叉树的后序遍历算法。

3. 二叉树的中序遍历算法。

4. 树和森林与二叉树的转换方法。

教学基本内容纲要

方法及手段

第7章 基本数据结构.............................................错误!未定义书签。

7.1顺序表........................................................错误!未定义书签。

7.1.1向量的顺序存储表示..........................错误!未定义书签。

7.1.2向量的运算........................................................................3

7.1.3应用举例...........................................错误!未定义书签。

7.2链表............................................................错误!未定义书签。

7.2.1指针与指针对象.................................错误!未定义书签。

7.2.2单链表...............................................错误!未定义书签。

7.2.3应用举例...........................................错误!未定义书签。

7.3栈...............................................................错误!未定义书签。

7.3.1栈的概念...........................................错误!未定义书签。

7.3.2顺序栈...............................................错误!未定义书签。

7.3.3链接栈...............................................错误!未定义书签。

7.4递归与非递归过程.......................................错误!未定义书签。

7.4.1递归概念...........................................错误!未定义书签。

7.4.2递归过程(函数)设计......................错误!未定义书签。

7.4.3递归过程与非递归过程......................错误!未定义书签。

7.5队列............................................................错误!未定义书签。

6.5.1队列的概念........................................错误!未定义书签。

7.5.2顺序队列...........................................错误!未定义书签。

7.5.3链接队列...........................................错误!未定义书签。

7.6二叉树........................................................错误!未定义书签。

7.6.1树的基本概念....................................错误!未定义书签。

7.6.2二叉树...............................................错误!未定义书签。

7.6.3二叉树存储表示.................................错误!未定义书签。

7.6.4二叉树遍历........................................错误!未定义书签。

7.7课程设计题目——一元多项式计算器.......................................18

习 题 错误!未定义书签。

1.课程设计

2.上机实验

答疑讨论、作业和思考题:

课后小节:

7.7课程设计题目——一元多项式计算器

问题描述

设计一个一元多项式计算器。

基本要求

(1)创建多项式。

(2)输出多项式。输出形式为整数序列:n,m;p1,e1;p2,e2;…;pm,em。其中n是多项式的最高次数,m是多项式的项数,pi和ei分别是多项式第i项的系数和指数,序列按指数降序排列。

(3)两个多项式相加。

(4)两个多项式相减。

测试数据

由读者自己设计。

实现提示

(1)在数学上,一元n次多项式Pn(x)可按升幂写成

Pn(x)=p0+p1x+p2x2+…+pnxn

它由n+1个系数惟一确定。因此,一元n次多项式可用一个线性表P表示为

P=(p0,p1,p2,…,pn

每一项的指数i隐含在其系数pi的序号里。

假设Qm(x)是一元m次多项式,同样可以用线性表Q表示为

Q=(q0,q1,q2,…,qm

不失一般性,假设m<n,则两个多项式相加或相减的结果Rn(x)=Pn(x)±Qm(x)也可用线性表R表示为

R=(p0±q0,p1±q1,p2±q2,…,pm±qm,pm+1,…,pn

(2)若只存储非零系数,则必须同时存储相应的指数。

一般情况下,一元n次多项式可写成

Pn(x)=

其中,ei是非负整数,pi是指数为ei的项的非零系数,且满足条件

0≤e1<e2<…<em=n

若用一个长度为m且每个元素有两个数据项(系数项和指数项)的线性表

((p1,e1),(p2,e2),…,(pm,em))

便可惟一确定多项式Pn(x)。

(3)对于一元低阶多项式,线性表可以选用顺序存储方式;对于一元高阶稀疏多项式可以选用链接存储方式。

问题拓展

(1)计算多项式在x处的值。

(2)两个多项式相乘。

(3)多项式的输出形式为类数学表达式。例如,多项式3x8+6x4+22x3+98x+21的输出形式为3x^8+6x^4+22x^3+98x+21。

(4)计算器的仿真界面。

说明:本页用于一个教学内容(教学单元)或一次课教学实施方案的设计。如填写的内容较多,可另加附页。

讲授题目

第8章 算法设计中的常用方法 错误!未定义书签。

课时安排

2课时

教学目的与要求

1. 熟练掌握顺序表和有序表的查找方法。

2. 熟悉静态查找树的构造方法和查找算法,理解静态查找树和折半查找的关系。

3. 熟练掌握二叉排序树的构造和查找方法。

4. 掌握二叉平衡树的维护平衡方法。

5. 理解B-树、B+树和键树的特点以及它们的建树过程。

6. 熟练掌握哈希表的构造方法,深刻理解哈希表与其他结构的表的实质性差别。

7. 掌握描述查找过程的判定树的构造方法,以及按定义计算各种查找方法在等概情况下,查找成功时的平均查找长度。

教学重点与难点

1. 二叉排序树的构造和查找方法。

2. 各种查找方法的算法分析。

教学基本内容纲要

方法及手段

第8章 算法设计中的常用方法...............................错误!未定义书签。

8.1问题的解空间..............................................错误!未定义书签。

8.2枚举法........................................................错误!未定义书签。

8.2.1枚举法的基本思想.............................错误!未定义书签。

8.2.2枚举法应用举例.................................错误!未定义书签。

8.2.3枚举算法优化....................................错误!未定义书签。

8.3递归与递推.................................................错误!未定义书签。

8.3.1梵天塔问题........................................错误!未定义书签。

8.3.2再谈递归算法设计.............................错误!未定义书签。

8.3.3快速排序...........................................错误!未定义书签。

8.3.4递推算法...........................................错误!未定义书签。

8.3.5 Wythoff数对序列...............................错误!未定义书签。

8.4分治法........................................................错误!未定义书签。

8.4.1分治法概述........................................错误!未定义书签。

8.4.2数字旋转方阵....................................错误!未定义书签。

8.4.3最大子段和问题.................................错误!未定义书签。

8.5动态规划法.................................................错误!未定义书签。

8.5.1动态规划法概述.................................错误!未定义书签。

8.5.2多段图的最短路径问题......................错误!未定义书签。

8.5.3 0-1背包问题......................................错误!未定义书签。

8.6贪心法........................................................错误!未定义书签。

8.6.1贪心法概述........................................错误!未定义书签。

8.6.2背包问题...........................................错误!未定义书签。

8.6.3 0-1背包问题及贪心k阶优化方法.......错误!未定义书签。

8.7回溯法........................................................错误!未定义书签。

8.7.1回溯法概述........................................错误!未定义书签。

8.7.2 0-1背包问题与回溯递归算法..............错误!未定义书签。

8.7.3 0-1背包问题与回溯迭代算法..............错误!未定义书签。

8.8分支限界法.................................................错误!未定义书签。

8.8.1分支限界法概述.................................错误!未定义书签。

8.8.2分支限界法求解0-1背包问题............错误!未定义书签。

8.9课程设计题目——0-1背包问题..................................................21

习 题 错误!未定义书签。

1.课程设计

2.上机实验

答疑讨论、作业和思考题:

课后小节:

8.9课程设计题目——0-1背包问题

问题描述

给定n种物品和一个背包。假设物品i(1≤i≤n)的重量为wi,价值为vi,背包的容量为limit。物品i(1≤i≤n)装入背包时,或者不装入,或者全部装入,不能只装入物品i的一部分。问应该如何选择物品装入背包,才能使背包内物品的总价值最大?

基本要求

(1)至少完成以下4个版本的算法设计和程序实现。

(2)用枚举法求解0-1背包问题。

(3)用动态规划法求解0-1背包问题。

(4)用回溯递归法和回溯迭代法求解0-1背包问题。

(5)用分支限界法求解0-1背包问题。

(6)分析比较各求解方法。

测试数据

见书中例题。

实现提示

各种方法求解0-1背包问题,参见书中相关内容。

问题拓展

(1)用贪心k阶优化方法求解0-1背包问题。

(2)上述列举的求解方法是否适用于背包问题,哪些方法适用?哪些方法不适用?对于适用的方法,请进行算法设计和程序实现。

(3)求解二维0-1背包问题:给定n种物品和一个可容纳W重量、V容积的背包。假设物品i(1≤i≤n)的重量为wi,体积为vi,价值为pi。物品i(1≤i≤n)装入背包时,或者不装入,或者全部装入,不能只装入物品i的一部分。问应该如何选择物品装入背包,才能使背包内物品的总价值最大?

说明:本页用于一个教学内容(教学单元)或一次课教学实施方案的设计。如填写的内容较多,可另加附页。

讲授题目

第9章 以解决问题为中心 错误!未定义书签。

课时安排

2课时

教学目的与要求

1. 熟悉各类文件的特点。

2. 掌握各类文件的构造方法。

3. 对各类文件实现检索、插入和删除等操作。

4. 熟悉外部排序的两个阶段和第二阶段——归并的过程。

5. 掌握外部排序过程中所需进行外存读/写次数的计算方法。

6. 了解败者树的建立过程。

7. 掌握实现多路归并的算法。

8. 熟悉置换-选择排序的过程。

9. 熟悉最佳归并树的构造方法。

教学重点与难点

1.散列文件。 2.多关键字文件。

3.多路平衡归并的实现 4.置换-选择排序

5.最佳归并树

教学基本内容纲要

方法及手段

第9章 以解决问题为中心......................................错误!未定义书签。

9.1一元多项式问题..........................................错误!未定义书签。

9.1.1问题描述...........................................错误!未定义书签。

9.1.2问题分析...........................................错误!未定义书签。

9.1.3算法设计...........................................错误!未定义书签。

9.1.4 C语言程序实现与程序运行................错误!未定义书签。

9.2八皇后问题.................................................错误!未定义书签。

9.2.1问题描述...........................................错误!未定义书签。

9.2.2问题分析...........................................错误!未定义书签。

9.2.3算法设计...........................................错误!未定义书签。

9.2.4 C语言程序实现与程序运行................错误!未定义书签。

9.2.5 VFP语言程序实现与程序运行............错误!未定义书签。

9.3骑士游历问题..............................................错误!未定义书签。

9.3.1问题描述...........................................错误!未定义书签。

9.3.2问题分析与算法设计..........................错误!未定义书签。

9.3.3 C语言程序实现与程序运行................错误!未定义书签。

9.4哈夫曼树与哈夫曼编码................................错误!未定义书签。

9.4.1问题描述...........................................错误!未定义书签。

9.4.2问题分析与算法设计..........................错误!未定义书签。

9.4.3 C语言程序实现与程序运行................错误!未定义书签。

9.5课程设计题目——哈夫曼编/译码系统........................................23

习 题...........................................................错误!未定义书签。

参考文献...........................................................错误!未定义书签。

1.课程设计

2.上机实验

答疑讨论、作业和思考题:

9.5课程设计题目——哈夫曼编/译码系统

问题描述

利用哈夫曼编码进行通信可以提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传输数据进行编码;在接收端将传过来的数据进行译码。对于双工信道(可以双向传输信息的信道),两端都需要一个完整的编/译码系统。试为信息收发站设计一个哈夫曼编/译码系统。

基本要求

作为一个完整的系统,应具有以下功能。

(1)初始化(Initialization)。输入字符集所含字符个数n,以及n个字符与n个字符的相应权值,构建哈夫曼树和产生哈夫曼编码表。

(2)编码(Encoding)。利用哈夫曼编码表,将待传输文件(输入待传输文件)进行编码,并将结果存入编码文件。

(3)译码(Decoding)。利用哈夫曼编码表,将接收到的编码文件进行译码,并将译码结果存入译码文件。

(4)显示(Display)。显示哈夫曼树、哈夫曼编码表、待传输文件、编码文件以及译码文件。

【测试数据】

表9-2给出字符与字符使用频率。根据表9-2构建哈夫曼树和产生哈夫曼编码表。对待传输文件“THIS PROGRAM IS MY FAVORITE”进行编码;对编码结果进行译码。读者也可以自己设计测试数据。

表9-2字符与字符使用频率

字符

空格

A

B

C

D

E

F

G

H

I

J

K

L

M

频率

186

64

13

22

32

103

21

15

47

57

1

5

32

20

字符

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

频率

57

63

15

1

48

51

80

23

6

18

1

16

1

【实现提示】

(1)系统按功能划分模块,系统的用户界面设计为“菜单”方式。

(2)系统初始化只需要进行一次,若所需哈夫曼树和哈夫曼编码表已经存在,则无须再进行初始化操作。

问题拓展

在系统运行过程中,实现字符使用频率的统计,若新统计的数据与已经建立的哈夫曼树和哈夫曼编码表中的字符使用频率的标准差超过某一定值,则修正哈夫曼树和哈夫曼编码表。

课后小节:

说明:本页用于一个教学内容(教学单元)或一次课教学实施方案的设计。如填写的内容较多,可另加附页。

讲授题目

课时安排

教学目的与要求

教学重点与难点

教学基本内容纲要

方法及手段

答疑讨论、作业和思考题:

课后小节:

说明:本页用于一个教学内容(教学单元)或一次课教学实施方案的设计。如填写的内容较多,可另加附页。