1、加强民办院校计算机专业实践能力的培养摘要:本文从目前人才市场对计算机专业学生需求出发,分析了应用型人才必须注重学生实践能力的培养,从硬件环境、加强师资队伍建设、改革实践教学内容和考核方式三个方面针对实践能力培养进行了探索。 关键词:实践能力;培养;师资队伍;实践考核 随着 1999 年各高校招生规模的进一步扩大,使得更多的学生有了接受高等教育的机会。江苏科技大学南徐学院作为教育部批准的以新机制、新模式举办的本科二级民办学院,紧紧依托校本部的教学资源。民办本科院校,更应突出学生能力的培养,突出实用技术和应用技能,强调实践环节,学以致用。因此学生的学习过程应以应用为目的,注重培养能力,大力加强实践
2、环节,激励创新意识。 1 用人单位、毕业生对学校的要求 计算机专业毕业生虽然知识面很广,但许多计算机毕业生实践动手能力较差,缺乏团队合作精神已是用人单位共识。用人单位往往对那些具有实践经验,参加过项目或实习,在校是否担任学生干部情有独钟。而目前高校关于实践教学环节方面只有课程设计、认识实习、生产实习、毕业设计几个方面1,并且也都是模拟型的,缺乏对企业项目的了解,在校期间缺乏有效的、足够的实践环节。 学校的课程安排不合理、有些课程太过于陈旧,公共课、专业基础课、专业课比例安排不合理,使得计算机专业毕业生感到什么都学了点,什么都不会的尴尬境地。因此,职场上各类 IT 培训机构应运而生。据某 IT
3、培训机构负责人表示,IT 业高薪就业需具备的四个要素,即专业技能、项目经验,权威认证和高等学历。但纯从就业的角度,企业更看重的是专业技能和项目经验。长期以来形成了 IT 人才最大的出口是培训机构而非高校。 面对用人单位、学生的需求,尤其是民办本科院校必须充分认识到形势的紧迫性,关系到学校的生死存亡。 2 加强实践能力培养的有效途径 江苏科技大学南徐学院计算机专业分为两个方向:计算机软件和计算机网络技术。针对这两个方向,我们就加强实践能力培养这一方面进行了探索2。2.1 适应新形势的要求,建立良好的硬件环境 经过三年的实验室基本建设,江苏科技大学南徐学院计算机中心已初具规模,无论从设备、环境都为
4、学生提供了优质的条件。网络技术实验室下设网络集成实验室、网络工程实验室,计算机软件实验室、计算机组成原理实验室、计算机接口实验室,实验室面积达到了 1597 平方米,总投资 450 万元。实验室建设的宗旨应是设备主流、技术先进、性能可靠。由于眼下教学实习基地较少,因此实验室应能模拟项目背景,使学生了解实际工作中的各个环节,从而加强工程能力和实践能力的培养3。 2.2 加强师资队伍建设 建设一支结构合理的实践教师队伍,丰富的教学和实践经验是培养学生实践能力的保证4。 为了提高实验教师业务素质,我院采取的主要措施一是实行业务培训,这也是提高实验室人员业务水平的主要方法之一。主要形式是进行短期培训,
5、脱产学习,参观学习。在不断更新设备的同时,加强与商家的联系,例如在创建计算机组成原理和接口实验室时,中心派出教师到西安学习,教师必须亲自听课、实验,最后参加厂家组织的考试。在创建网络集成实验室时,我们派出两位教师去北京学习。这不仅使教师做了一回学生,体现换位思考的理念,也使得他们在实验中熟悉设备和实验环境,为今后在实验辅导中积累了宝贵的经验。通过脱产研究生课程学习,不仅使教师的学历层次有所提高,也可使专业知识迅速提高。参加校际交流,可以取众家之所长,为我所用。 措施二是双师型人才的培养,在努力提高自身业务素质的同时,积极鼓励学有余力的教师参加国际、国内知名企业的考试认证,参加全国计算机水平考试
6、,学院制定出相应的奖励政策,为这一实施的顺利进行保驾护航5。目前,中心有两人取得锐捷网络工程师证书,两人取得华为-3COM 公司的网络讲师认证证书,一人取得软件设计师水平证书。 措施三是通过出台相应的政策,积极与企业挂钩,引进高素质的实验技术人才,充实到实验教师队伍中去。例如我中心与江苏科技大学船苑电脑公司网络工程部联合,聘请有实践操作经验的工程师参与网络工程实验项目的开设和指导工作。 为此,学院的电子信息系改变传统的教研室与实验室分离的做法,合二为一,便于加强教师的教学和对学生实践能力的培养。江苏科技大学在加强“十一五”师资队伍建设中明确指出,五年内从事专业课教学的青年教师必须有一学期的工程
7、背景或企业实践的经历。在职教师的培养每五年参加国外高访、国内高访、企业及科研院所实训等三种形式的培养6。 2.3 改革实验教学内容、实践考核方式 我院计算机科学与技术专业在实验教学内容上进行大胆更新,压缩或减少验证性实验教学内容;新开实验项目上,精选和改进实验教学内容,增加综合性、设计性和研究创新性实验,提倡自拟实验课题。 在教学方法上,我们采取改变过去的以教师为中心的传统做法,注重以学生为中心7,采用启发和引导的方法,加强实验前的准备工作。 在考核结果上,重过程、轻结果。学生希望尽快完成实验,在数据采集中存在相互抄袭现象甚至是编造数据的现象,遇到问题不愿意去思索、去解决。为解决这一现象,我们
8、采取实验报告书的形式,重点要求学生对此次实验的收获、感想、失败的原因,实验的过程思考,通俗的讲就是通过实验,你学到了什么?要求学生能提出新问题,能把一些抽象的、支离破碎的实验现象和结果,总结归纳后上升到理论的角度。有的教师为了鼓励学生多提问题,将此也作为评价学生实验成绩的一大指标,真可谓用心良苦。考核方式也可以采取小论文、小组讨论、答辩的方式进行考核,这不仅能锻炼学生的口头表达能力、团结协作精神,也可以培养学生的书面表达能力,为今后完成项目做好准备。 3 结束语 在市场对计算机人才呈金字塔结构需求的今天,如何使学生在今后的职业生涯中找到自己的位置,加强在校学生实践能力的培养已是众望所归。教育学
9、生从自己面对的情境中产生问题,探究问题8,形成解决问题的意识习惯和能力是实验教学的目标,也是实施素质教育的重要途径9。 参考文献: 1 李晓明,陈平,张铭,朱敏悦. 关于计算机人才需求的调研报告J. 计算机教育 ,2004. 2 郝继升. 加强实践教学体系的建设,努力提高计算机专业学生的素质J. 计算机教育,2007,(11):25-27. 3 周苏. 教材建设的基础是教学改革J. 计算机教育,2007,(11):67-70. 4 柴巧叶. 以就业为导向以能力为本位全面推进我院计算机教学改革J. 计算机教育,2007,(16):43-45. 5 马汉达. 运用激励机制加强实验队伍建设J. 实验
10、技术与管理,2006,23(1):102-103. 6 李艳华 . 加强高校实验技术队伍建设的途径 J. 实验技术与管理,2006,23(12):139-141. 7 汪明东,鞠湘泓. 实验室建设与管理的探索和实践J. 中国现代教育装备,2005,30(8):76-78. 8 李玲娟. 中澳计算机专业教学的比较研究J. 计算机教育,2007,(15):48-50. 9 龚声蓉,杨季文,朱巧明. 强化实践能力培养计算机科学与技术工程型人才J. 计算机教育 ,2006,(2):18-20. 摘要:LR 分析法是编译程序语法分析中最常用且有效的自下而上的分析方法,理论较完善,适用于大多数上下文无关语
11、言的分析。本文主要探讨 LR 分析的教学方法,采用“启发+关联式”教学法,引导学生理解 LR 分析的内涵。 关键词:LR 分析法;项目集规范族;LR 分析表;LR 文法 “编译原理”是计算机学科的一门重要专业基础课,列入国际 ACM 教程和 IEEE 计算机学科的主干课程。该课程使学生了解针对高级程序设计语言的通用编译程序设计的基本理论;学习、掌握编译程序设计与实现的基本方法和原理;学习软件自动生成的原理、技术和工具; 培养其对系统软件的规划、组织、设计和实现的综合能力和素质;训练其对大型软件工程实施的技术与能力1-3 。该课程需要以离散数学、操作系统、数据结构、形式语言与自动机、编程语言等多
12、门先修课程作铺垫,理论知识覆盖面广、内容抽象、算法多而复杂,因此学生普通反映知识难以理解、理论很难与实践结合。如何在教学过程中改进教学方法和手段,帮助学生理解编译原理的理论,有效提高学生的实践能力,是一个有待解决的课题。 语法分析是教学重点内容,而 LR 分析法又是语法分析中较难掌握的一种分析方法。本文主要介绍 LR 分析的教学方法,以使学生系统灵活地掌握 LR 分析的本质。 1 学生学习 LR 分析法存在的问题 学习 LR 分析法时,学生能够正确理解教师讲解的定义,如活前缀、句柄、LR 有效项目等,也能正确解答教师布置的 LR 分析习题 ,但在深层次理解 LR 分析的内涵、各个知识点的关联性
13、方面仍存在问题,主要体现在如何深刻理解 LR 分析的实现思想和 LR 分析的实现机制;LR 分析的思想在其他领域的拓广应用等,这些都是教师讲解 LR 分析法时着重培养学生思考的问题。教师不仅要教会学生如何使用 LR 分析法分析具体题目,更为重要的是应让学生深刻理解 LR 分析法的内涵和本质,使学生能够将 LR 分析法的思想转化为一种思考问题的方法,教会学生将学到的知识转化为能力。笔者正是将 LR 分析的概念和实现思想融为一体,用“启发+关联式”教学法融会贯通地讲解 LR 分析法,让学生真正理解 LR 分析法的内涵。 2LR 分析实现思想的“启发+关联式”教学法 LR 分析法是语法分析的重点内容
14、 ,学生理解这部分内容比较困难。教师在讲解时,不仅要讲解基础概念和原理,更要让学生深刻理解 LR 分析的内涵以及各种 LR 分析法之间的关联与特点。经过多年的教学探索和实践,我们采用“启发+关联式”教学法,启发引导学生理解活前缀、句柄等基本概念,然后基于 LR 分析法的核心,利用 LR 各种分析法之间的关联性,使学生融会贯通地理解 LR 分析法。 LR(k)是指从左向右扫描输入串并进行自下而上的语法分析,在分析的每一步,只需要根据分析栈当前已移进和归约出的全部文法符号,再向前查看 k 个输入符号,就能确定适合于文法规则的句柄是否已在分析栈顶部形成,从而确定当前的分析动作1-3。教师应让学生明确
15、 LR 分析法的关键两点 :自下而上的分析;分析栈顶是否形成句柄。 LR 分析器的工作是一个逐步产生文法 G 规范句型活前缀的过程。在分析过程中,必须使分析栈中的符号始终是活前缀,然后通过对余留符号串的继续扫描,逐步在分析栈中构成最长活前缀,此时分析栈顶部形成句柄,可立即归约。所以,教师讲授时要给学生树立这样的认知:分析过程中 ,句柄的确定是通过寻找规范句型的活前缀来实现的,可从寻找活前缀入手确定句柄和分析动作,从而构造出 LR 分析表。 本文围绕图 1 所示内容和提出的问题讨论 LR 分析法的内涵。 自下而上分析法的关键: 可归约串;归约原则。 LR 分析核心思想:通过识别活前缀识别句柄归结
16、到构造识别活前缀的 FA。 活前缀和句柄关系刚好含有句柄的活前缀称为可归前缀。 LR(0)项目与活前缀关系? “ ”含义。 LR(1)项目含义搜索符求解。 LR(1)有效项目 LR(1)项目集规范族的构造:Closure(待约项目扩展求解);GO(产生后继项目集,跟踪活前缀识别)。 LR(1) 分析表的构造。 图 1LR 分析法的内涵 讲授 LR 分析法时,关键是让学生深刻理解 LR 分析法的核心是通过识别活前缀识别句柄。因此教师在讲解活前缀和句柄的概念(规范句型的一个不含句柄之后任何符号的前缀,称为该句型的一个活前缀。一个句型的最左直接短语,称为该句型的句柄。)之后,应启发学生理解活前缀与句
17、柄之间的关系以及活前缀和句柄的作用。如果句柄在栈顶形成,就进行“归约”动作。LR 分析法的关键就是找到可归前缀(刚好含有句柄的活前缀称为可归前缀)实施归约,具体方法是构造识别文法可归前缀的有限自动机。 为了识别活前缀,要引入 LR(0)项目。LR(0)项目是在文法 G 的每个产生式的右部( 候选式)的任何位置上添加一个圆点所构成的产生式。LR(0)项目中的圆点可看成是分析栈栈顶与输入串的分界线,圆点左边为已进入分析栈的部分,右边是当前输入或继续扫描的符号串。 通过 LR(0)项目,教师启发学生加深对活前缀与句柄的理解,并采用实例巩固学生对这部分知识的掌握,以便为后续学习 LR 的各种分析法打下
18、基础。在一个规范句型的活前缀中,不会含有句柄右边的任何符号,因此,活前缀与句柄间的关系有三种情况: 活前缀中已含有句柄的全部符号,这是一个特殊活前缀,通常称为可归前缀。 活前缀中只含有句柄的一部分符号。 活前缀中不包含句柄的任何符号。 第一种情况表明,此时某一产生式 A 的右部符号串 已出现在栈顶,分析动作应是用该产生式进行归约。第二种情况意味着形如 A1 2 的产生式的左子串 1 已出现在栈顶,正期待着从余留输入串中看到由 2 推出的符号串。而第三种情况则意味着期望从余留输入串中看到某一产生式 A 中的 符号串。这几种情况可以用 LR(0)项目来表示。 LR(0)分析是仅仅根据当前分析栈顶状
19、态(该状态记录着已进行过的分析历史情况) 而不需要从当前输入字符串再向前查看输入符号,来决定当前的分析动作。也就是说 LR(0)分析的实现是只根据“历史”资料即可决定当前分析栈是否已构成句柄,从而确定分析动作。 教师在具体讲解不同的 LR 分析法时,要着重讲解它们之间的区别与特点,采用关联式教学方法可取得不错的教学效果。不同于 LR(0)分析,LR(1)分析需要向前搜索 1 个字符,LR(1)项目实际上是进行求解搜索符。为了使分析的每一步都能使栈中保持一个规范句型的活前缀,必须要求每一个 LR(1)项目对应的活前缀是有效的。若文法 G 的一个 LR(1)项目A a b ,a 对活前缀 g 是有
20、效的,当且仅当存在规范推导 S=dA=dab ,其中:VT*,g=ad,aFIRST(w)或 a 为#(当 w=e),a 为搜索符。 识别文法 G 可归前缀的DFA 项目集的全体称为文法 G 的 LR(0)项目集规范族。构造 LR(0)项目集规范族的方法主要有两种。一种是基于自动机理论构造法:构造文法 G 的 LR(0)项目;基于 LR(0)项目,构造识别文法所有活前缀的非确定有限自动机(NFA);NFA 确定化为确定有限自动机 (DFA),该 DFA的各个状态所包含的项目集合即构成了 G 的 LR(0)项目集规范族。另一种是基于拓广文法的方法:构造文法的拓广方法 ;构造文法项目集的闭包;求状
21、态转换函数 GO(I , X)。这两种方法本质是一致的,都是最终求得有限自动机。第一种方法是直接求有限自动机;第二种方法是项目集闭包对应有限自动机的状态,一个项目集中项目圆点的移动(对应移进项目) 和待约项目的变化对应有限自动状态的转移。 一个 LR(1)项目集合与 LR(0)分析的情况类似,表示识别文法全部可归前缀的 DFA 的每个状态。构造有效的 LR(1)项目集规范族的办法和构造 LR(0)项目集规范族的方法在本质上是一样的,同样需要涉及两个重要的环节:项目集的闭包 Closure 和 GO 函数的求解。Closure用于进行待约项目扩展求解;GO 函数用于产生后继项目集,跟踪活前缀识别
22、。对于 LR(1)项目集规范族,难点在于 LR(1)项目集闭包的求解。文法项目集闭包的求解核心思想是: do if(J 的每个项目 AB 和 G 的每个产生式 B,若B 不在 J 中) 把 B 加入 J; while(没有更多的项目可以加入 J); 学生需要明确的是,对于每个 LR(1)项目集中的项目,要考虑是否是待约项目,如果是待约项目,就要进行扩展,从而求得项目集的闭包。 给定一个文法,当识别其所有可归前缀的 DFA,可据此直接构造 LR(0)分析表及相应的 LR 分析器,或者基于项目集规范族和 GO 函数构造 LR(0)分析表。LR 分析器的实质是一个带栈的确定有限状态自动机。 LR 分
23、析表是 LR 分析法的关键。LR 分析表分为两部分:action 表和 goto 表。教师在讲解时,需要让学生明确 action 表是在上述项目集规范族求得的有限自动机基础上,针对其状态转移弧的标记是终结符而设计的表,具体动作有移进、归约、接受和出错;而 goto 表则是针对非终结符设计的表。对于 action 表,“移进”动作表示句柄尚未在分析栈顶形成,正期待继续移进符号以形成句柄;“归约”动作表示当前在栈顶处已经形成当前句型的句柄,可按相应的归约式立即归约;“接受”动作表示已经归约到文法的开始符号,分析成功;依据求 LR 分析项目规范族的两种方法,则对应求解 LR(0)分析表也有两种方法:
24、 根据识别活前缀的 DFA 构造 LR(0)分析表和从 LR(0)项目集规范族 C 和 GO 函数构造 LR(0)分析表。 教师在讲解上述内容之后,要让学生理解如何驱动完成 LR 分析。LR 分析器主要由三部分组成:下推分析栈、 LR 分析表和 LR 分析总控程序。LR 分析是在总控程序的控制下自左向右扫描输入串,并根据当前分析栈顶所存放的文法符号状态及当前扫描读入的符号,依据 LR 分析表的指示驱动完成分析动作。 3LR 文法的判定 LR(0)、LR(1)、SLR(0)和 LALR(1)四种 LR 分析方法相应地对应四种 LR 文法和 LR 分析器,判断一个摘要:本文结合课程教学改革工作,提
25、出了切实可行的实践环节改革措施,主要包括作业和实践环节改革、增设新的数据库系统实践课、建设网络教学系统、建设实验上机环境等等,并在近几届学生中连续实施了多年,取得了较好的效果。 关键词 本文来自:计算机毕业网 :数据库原理;教学改革;实践环节1 概述 数据库原理是软件工程专业的一门重要专业主干课,但目前软件工程课程的教学和实践,基本都没和数据库的设计、开发、维护结合起来,包括软件质量管理也是单纯从代码的角度考虑问题的,这样难以让学生真正综合地了解、掌握并实践一个软件系统开发、维护、扩充的全过程。国外著名大学已经开始注意这个问题,如麻省理工学院已将软件工程、数据库设计及 Web 程序设计的关键内
26、容整合起来作为一门课程,使学生能够系统地掌握 Web 环境下信息系统开发的全过程。国内高校很多还没有注意这一问题,包括 CCSE2004 里所规定的各门课程的知识点,并没有注意这些相关课程的衔接。 我们自 2005 年开始立项进行软件学院数据库原理课程实践环节的改革,希望通过教改完善和调整软件学院数据库原理的教学内容,重点是改革作业和实践环节,通过综合性的作业和实验实现与软件工程专业其它相关课程教学的协调和有机衔接,完善课程体系的建设,为国家培养更多专业基础知识扎实、实际工程实践能力强的软件工程专业人才。本文对我们近两年的教改工作进行了总结,比较详细地介绍了软件学院数据库原理课程实践环节改革的
27、教改思考、教改措施、教改实践和经验体会。 2 改革思路 通过近年与国外高校比较密切的教师、学生的互访、交流,我们感到国外高校,不论是大学还是理工学院,在教学工作中都特别注重学生实践能力的培养,使学生掌握自我学习的技能。他们强调的是培养学生在遇到陌生问题时,通过查阅文献、与他人交流,最终找出解决方案的能力,而不是由教师灌输过多现成的知识;鼓励学生尽早接触社会,培养学生适应环境、与人交流、与人合作、协调各方面关系的综合能力,而不是单纯进行科技知识的学习。 以爱尔兰高校为例,除了研究论文、工作总结或研究开发报告、进驻企业的实地实习和毕业设计等学生可以应用所学知识的实践环节以外,也有和国内高校专业课教
28、学中的日常作业和实验类似的 Assignments。虽然都叫作业和实验,但他们的 Assignments 和国内高校通常所说的作业和实验是有区别的。国内高校一般每门课都要指定一本教材,老师讲完一节课后,布置书后针对这部分内容的几道习题作为作业,因此认真听讲的学生最多用 23 小时就能完成;实验课也类似,一般一门课(IT 类) 有 6 个左右的实验,每次 4 小时,实验内容也基本都是单元性的。Assignments的不同主要体现在:首先,大部分专业课都没有国内高校那种指定的教材,主要依据是教师的备课笔记和教师所列的阅读清单,每个 Assignment 都不是那么简单地能在教材上直接找到答案,都需
29、要阅读大量文献、上机编程验证自己的解决方案,因此对每个 Assignment教师都会给几周、1 个月、甚至 3 个月的时间;其次,稍大的 Assignments 都是 25 人为一组共同完成,学生自行确定目标、切割工作量、分配任务;第三,能够这样做的前提是学校为学生提供了免费的、不限时的上机条件,以及免费的、不受限的 Internet 访问条件。实际上多数 Assignments 的规模和工作量都和国内高校一般的课程设计差不多了。通过这些 Assignments 能够使学生更加透彻地掌握教学内容,多人合作、独立分析问题、解决问题、自主学习的能力得到极大提高。而国内传统的作业和实验形式,明显分量
30、不够,不利于学生自主学习能力的培养。 针对这种现状,为了进一步提高教学质量,培养真正符合社会需求的软件人才,我们在教学中应该努力做到的是: 改革和调整现有教学计划,密切结合社会发展的实际需求,适当精简课内学时,加强实践环节的安排和管理,加强实践条件的建设。 教师要转变观念,努力提高业务能力。按照传统的教学方法,每门课指定一本教材,一本书稳稳当当地教好几年不能适应新形势的要求。要精简课内学时,加强实践环节,提高学生自主学习、主动学习的能力,就要求教师对本领域知识有更深刻的理解和感悟,能够用较少的课时讲清本领域最核心的概念和方法,再通过精心设计的实践环节引导学生在做中学、自己学。所以虽然讲的少了,
31、但对教师的要求却更高了。 学生要转变观念,努力培养自主学习、主动学习的能力。目前国内中小学教育的核心就是围着高考指挥棒转,学生从小接受的就是灌输式应试教育,自主学习、主动学习的能力较弱。到了大学阶段应自觉、有意识地锻炼自主学习的能力,充分利用各种实践机会,勤于思考,在做中学。真正掌握的知识是自己通过实践学来的,而不是单纯听老师讲得来的。 基于这种指导思想,我们采取了一系列的措施,并利用软件学院得到的有利政策,大力改善实验条件,建设专用机房,确保学生具有不限机时的开放上机条件,使各项改革措施具备了最基本的前提保证。 3 改革措施在反思传统的专业课教学和实践环节安排的基础上,借鉴国外先进的教学改革
32、理念,我们主要采取了以下措施,加强数据库原理课程教学的实践环节,探索适合我国国情的软件工程人才培养方式,进一步提高教学质量和教学效果: 1. 教学内容改革:借鉴麻省理工学院的教学思路,整合软件工程、数据库原理、数据库设计、网络基础、Web 程序设计等课程内容,结合软件工程导论、大型软件系统的设计和体系结构等课程的设置或调整,实现相关课程教学内容的有机协调和衔接。当然,整合并不是说将这些教学内容都放到一门课中,中国的国情毕竟与国外不同,我们希望通过共同设计的大作业或实验,协调各相关课程的教学,使学生能够将相关教学内容融会贯通,有机会完整地了解并实践一个大型应用软件的整个生命期的所有问题,而不是每
33、门课都只了解其中的一个片段。以此为目的,适当调整并精简各相关课程的课内教学内容。 2. 引导学生开放式自主学习:结合双语教学,引导学生直接阅读 Asilomar 报告、Lowell 报告等国际数据库权威们定期召开的研讨会报告原文和其它最新文献资料,理解大师们的观点和数据库技术的发展趋势,要求学生以小论文的形式总结自己的体会和收获,鼓励学生积极思考,培养学生自主学习的能力。 3. 作业和实践环节改革:借鉴国外高校日常教学中的Assignments,改革作业和实验,取消传统的作业和实验之分,作业就是实验,实验也就是作业;不再布置每章后附的习题作为课后作业,而是根据课程知识点,安排六次阶段性的综合作
34、业和一个完整的综合作业,所有作业都必须上机操作或编程才有可能完成。最后的综合作业要求学生以数据库的设计与应用为核心,综合运用软件工程、数据库原理、数据库设计、网络基础、Web 程序设计等各方面知识,多人合作,分配角色,共同完成。为学生提供开放上机条件,所有作业均只设提交截止期,不限机时。 4. 增设新的数据库系统实践课(32 学时):利用我们在各种数据库系统开发方面的长期科研积累,安排学生34 人一组,分配角色,不限机时,遵循软件工程的要求自行设计并实现一个麻雀虽小、五脏俱全的数据库管理系统 MyDBMS,通过实践更加透彻地理解数据库系统的基本原理和内部实现技术。从教学实际情况来看绝大多数学生
35、都能按要求完成任务,学生普遍反映虽然很辛苦,但收获很大。目前国内能够为本科生开设这种实践课的高校很少,我们利用软件学院的特殊条件和科研方面的长期积累,成功地开设了这门配套的实验课,通过两届学生的实践,证明是可行的,并且取得了较好的效果。下一步将结合这些实践环节的改革,编写出版数据库系统实践教程 ,以便更好地推进实践环节改革。 5. 大力建设网络教学系统:除课程网站外,网络教学系统还包括网上作业提交系统和在线作业批改分析系统。不同于目前许多仅是发布信息和提供资料下载的静态课程网站,本课程的网上作业系统提供了学生之间、师生之间的短消息平台和 BBS 平台,可以实现师生之间全互动的网上交流。目前课程
36、所有教学活动均可在网上进行,取消了纸质作业,大大提高了效率,也便于优质教学资源的积累。 6. 大力建设实验上机环境:充分利用软件学院拥有的政策,建设自己的专用机房,为学生提供不限机时的开放用机条件,使各项教改措施能够得以实施。这样我们布置的所有作业不必再考虑机时问题,只需向学生明确作业要求和通过网上作业系统提交作业的截止期。 7. 利用已有师资条件,提供 SQL Server、 DB2 等主流数据库产品的应用开发辅导,使学生在完成课程实际环节的同时,参加并通过 DB2 或 SQL Server 的认证考试。 8. 加强国际合作:充分利用软件学院与爱尔兰、印度、澳大利亚的多所大学的稳定合作关系,
37、加强课程建设交流,合作高校一些好的实践环节设计经改进后可直接用于课程的实践教学。 总之,根据学生已有基础,改革教学方式,注意节奏,使学生课后有较多发展空间。理论联系实际,深入浅出,突出重点。最终目的是达到少讲、多练、自己学,让学生在完成综合性作业的过程中,自我学习、主动学习,掌握课程知识点。 4 结束语 本课程教学改革总的指导思想是借鉴国外先进经验,结合国内实际,精简课内学时,加强实践环节,最终目的是达到少讲、多练、自己学,让学生在完成有份量的作业的过程中自主学习,在做中学。近三年的教改实践,特别是作业和实验的改革,虽然还存在一些问题,但总体效果还比较不错。事实证明,尽管国内学生从小学开始就一
38、直接受的是灌输式的教学,但只要加以合理引导,是完全可以实现本课程预定的改革思路的,软件学院提供的相应软硬件条件支持也使这些教摘要:循环结构是结构化程序设计中最为复杂的一种结构,本文提出构成循环结构的三个要素,论述运用循环结构三要素进行程序设计的方法,以及循环与递归的关系。 关键词本文来自:计算机毕业网 :算法;程序结构;循环;递归 1 问题的提出 结构化程序设计中,只有三种基本的结构:顺序、选择和循环。 顺序结构是程序设计过程中自然形成的,也是三种结构中最简单的一种。选择结构与我们日常中使用的自然语言“如果.则.否则.”十分相近,只是其嵌套时的二义性在形式上必须有一个明确的规定。 而循环结构是
39、三者中最为复杂的,也是使用最多的。一个算法往往要用循环结构来描述,一个程序能否正确编写又往往取决于对循环结构的正确理解和使用。因此,有必要深入对循环结构做一个分析。本文从循环结构的三个要素、循环结构与程序的阅读、循环与递归的联系等三个方面进行分析与论述,而这些在目前的教学中往往很少提到,甚至是被忽略的。2 循环结构的三要素 初学程序设计的人,对于如何在程序中使用循环结构实现算法,总觉得不知从何入手,有时即使编出程序,也不尽人意。下面我们从一个简单的典型实例说起。为了说明问题,本文对有关编程的问题都以 C 语言函数的方式列出解答。 2.1 一个典型实例及其两种解答 例 2.1 鸡兔同笼,有 h
40、个头,f 只脚,求鸡兔各多少。这是我国古代一个典型的算术问题。现在要设计一个函数,求出兔子的数目(求出兔子的数目,自然就可以得到鸡的数目) 。不妨设这个函数为:int hab(int h, int f); 函数的定义如下: int rabbit (int h, int f)/ h 为头数, f 为脚数 int i; i=h; while (i=0 ) if (i*4+(h-i)*2=f) break; i-; return i; /-1 表示该该问题无解。 这个程序的运行结果是正确的,但是很遗憾,这并不是一个完美的程序,尽管很多教科书也是这样写的。我们再来看看下面的另一种解法: int rab
41、bit (int h, int f)/ h 为头数, f 为脚数 int i; i=h while(i =0) return i;/-1 表示该问题无解。 以上两个程序都用到循环结构,第一个程序在循环结构中嵌套了一个选择结构,并且使用了break 语句。而在第二个程序中,无需这样做。无论从程序的结构,还是从程序的可读性来说,后者显得比前者要好得多。那么问题出在哪里呢? 2.2 深入分析 比较两个程序可以发现,关键是对条件表达式(i*4+(h-i)*2!=l)的运用。前者把条件表达式放在循环体中,后者把它作为循环条件。看来,有必要对循环结构做深入的分析。 不管一个循环结构有多复杂,都可以从以下三
42、个方面来分析: 1) 初始状态:所有参与循环的变量在循环之前都必须有一个确定的值。 2) 循环条件:当条件满足时,循环继续,否则循环终止。循环条件应是一个逻辑表达式。 3) 循环体:每次循环要执行的语句。 这就是我们所讲的循环结构三要素。从这个角度再来分析上面的例子,就很容易找到问题的结症:(i*4+(h-i)*2!=l)是循环条件之一,因此不应放在循环体内使用。第一种方法虽然也能得到正确的结果,但并不是好的方法,甚至是不正确的方法。 2.3 一个应用实例 例 2.2 裴波那契序列数的递归表示如下: f0=0 f1=1 fn=fn-2+fn-1(n =2) 对于任意给定的正整数 x,判别其是否
43、在裴波那契序列中。 现在要求判别一个给定的正整数 x 是否在裴波那契序列中,一个直观的判别方法是从 f0 和 f1 出发,不停地求后面的裴波那契序列数。每得到一个裴波那契序列数,就同这个待判别数进行比较,直到相等时输出“真” 。或当得到一个裴波那契序列数大于这个待判别数时,输出“假” 。 要实现这个算法,需用到循环结构。我们来分析一下这个循环结构的三个要素: (1) 初始状态:f0=0; f1=1,x=?; (2) 循环条件:当前求得的裴波那契序列数 (3) 循环体:计算一个新的裴波那契序列数。 根据以上的分析,判别一个给定的正整数 x 是否在求裴波那契序列中的 C 函数如下: int in_
44、fib(int x) int f0=0, f1=1; while (f1x) t=f1+f0; f0=f1; f1=t; return (x=f1| x=f0); 3 循环结构与程序的阅读 3.1 阅读的意义 对于计算机程序的阅读,著名的计算机科学家克努特曾说过:阅读他人的计算机程序获得技巧是极其重要的,但在许许多多的计算机课程中这样一种训练却可悲地被忽视了,因此导致计算机极其低效率的使用。 学习一种计算机程序设计语言,不管是汇编语言还是高级语言,一个重要而又常用的方法就是阅读:阅读书中的例题,阅读别人写的程序,更多的是阅读自已写的程序。在某种意义上来说,一个程序是“被阅读”的。首先是被计算机
45、阅读,这是毫无疑义的,但更多时候是被人阅读。 3.2 阅读的方法 阅读的目的是为了分析程序中的语句是如何实现算法的。对于一些较为复杂的程序,如果一开始就去分析每一个语句的功能,就很容易掉进“迷宫” 。因此在分析一个程序时应该先分析程序的结构,然后再对每个结构中的语句逐一进行跟踪阅读。1. 程序结构的分析 程序结构的分析过程分为两个步骤:第一是找出组成程序的各种结构,第二是找出这些结构之间的连接方式。 程序结构的分析应符合结构化程序设计的原则。一种结构化程序设计语言(如 C 语言,Pascal) ,只包含三种基本结构:顺序、选择和循环。每种结构只有一个入口和一个出口。而各个结构之间的连接方式有两
46、种:积木式和嵌套式。积木式的连接是一个结构的出口与另一个结构的入口的连接,而嵌套式的连接是在一个结构的内部嵌套另一个结构。一般来说,我们应先分析出程序中积木式连接的各个结构,然后再找出这些结构中的嵌套式连接的结构。分析程序结构时可以借用一些工具,如 N-S 图、伪代码等,即根据源程序画出能反映程序结构的- 图或写出等效的伪代码。这是一个与编程过程刚好相反的过程。 2. 语句的跟踪阅读 对于顺序结构的语句,阅读是不成问题的。而对于选择结构的语句,由于与我们平时所用的自然语言比较一致,也不是太大的困难。关键在于,当有两个选择结构连接时,采用积木式的连接与采用嵌套式连接的差别是很大,有时甚至使得程序
47、运行的结果截然相反。 循环结构是三种结构中最为复杂的一种,对这种结构的跟踪阅读可以用列表的方法,将循环过程中各语句执行的结果一一列出。这个表包含了循环结构的三个要素。 摘要:循环结构是结构化程序设计中最为复杂的一种结构,本文提出构成循环结构的三个要素,论述运用循环结构三要素进行程序设计的方法,以及循环与递归的关系。 关键词本文来自:计算机毕业网 :算法;程序结构;循环;递归 1 问题的提出 结构化程序设计中,只有三种基本的结构:顺序、选择和循环。 顺序结构是程序设计过程中自然形成的,也是三种结构中最简单的一种。选择结构与我们日常中使用的自然语言“如果.则.否则.”十分相近,只是其嵌套时的二义性
48、在形式上必须有一个明确的规定。 而循环结构是三者中最为复杂的,也是使用最多的。一个算法往往要用循环结构来描述,一个程序能否正确编写又往往取决于对循环结构的正确理解和使用。因此,有必要深入对循环结构做一个分析。本文从循环结构的三个要素、循环结构与程序的阅读、循环与递归的联系等三个方面进行分析与论述,而这些在目前的教学中往往很少提到,甚至是被忽略的。 2 循环结构的三要素 初学程序设计的人,对于如何在程序中使用循环结构实现算法,总觉得不知从何入手,有时即使编出程序,也不尽人意。下面我们从一个简单的典型实例说起。为了说明问题,本文对有关编程的问题都以 C 语言函数的方式列出解答。 2.1 一个典型实例及其两种解答 例 2.1 鸡兔同笼,有 h 个头,f 只脚,求鸡兔各多少。这是我国古代一个典型的算术问题。现在要设计一个函数,求出兔子的数目(求出兔子的数目,自然就可以得到鸡的数目)。不妨设这个函数为: int hab(int h, int f); 函数的定义如下: int rabbit (int h, int f)/ h 为头数 , f 为脚数 int i; i=h; while (i=0 ) if (i*4+(h-i)*2=f) break; i-; return i; /-1 表示该该问题无解。 这个程序的运行结果是正确的,但是很遗