时间:2023-07-16 08:48:45
序论:好文章的创作是一个不断探索和完善的过程,我们为您推荐十篇程序设计的结构范例,希望它们能助您一臂之力,提升您的阅读品质,带来更深刻的阅读感受。
理论上,课程整合是指对课程设置、各课程教育教学目标、教学设计、评价等诸要素作系统的考察与操作。在实际教学中,课程整合是指考虑到各门相互分裂的课程之间的有机联系,将这些课程综合化。
在传统的教学模式中,《C程序设计》是先行课程,《数据结构》是后续课程,它们都是学习操作系统、数据库原理和应用、面向对象程序设计等课程的基础。《C语言程序设计》是学生最先接触的结构化程序设计语言,其教学目的主要是使学生了解结构化程序设计的算法和思路,掌握程序设计和调试的基本技巧,培养良好的软件设计基础。《数据结构》主要是研究非数值应用问题中数据之间的逻辑关系和对数据的操作,同时还研究如何将具有逻辑关系的数据按一定的存储方式存放在计算机内。其教学目的主要是使学生掌握数据的逻辑结构、存储结构及其相应的算法,培养学生解决实际问题的能力,即能够把现实世界中的客观问题,变换为在计算机内的表示形式,学会组织数据、选择算法、养成良好的程序设计风格。
《数据结构》课程中分析数据之间的逻辑关系和确定数据在计算机内的存储结构是所有程序设计过程中必须完成的两大任务,且《数据结构》中算法描述的语言又多采用C语言,两门课程之间存在着紧密而内在联系,为两门课程的整合提供了可能性。
2.《C程序设计》与《数据结构》的教学现状
在传统的教学模式中,《C程序设计》是先行课程,《数据结构》是后续课程,将两门课程分开来教学,人为地割断了它们之间的内在联系,导致学生在学习《C程序设计》时,仅局限于C语言的语法层面上,不能把C语言的程序设计思路和语法知识具体运用到数据结构的算法中去,使理论知识与实践运用脱钩。而在学习《数据结构》时,由于教师的更换和教材的多样化,任课教师又不得不花掉一、两周的时间来复习C语言的相关知识,造成了课时的浪费和学生反感。在具体运用时,又出现学生能理解数据结构中的算法和读懂算法,却不能运用C语言去实现算法等程序设计能力较差的现象。笔者长期从事这两门课程的教学工作,一直在探索如何提高这两门课程的教学效果,培养学生运用C语言这个工具去解决实际问题的能力。
3.《C程序设计》与《数据结构》课程整合的思路
在高职院校计算机应用专业的课程体系中,实现《C程序设计》和《数据结构》这两门课程的整合,要结合职业教育培养实用型人才的目标,根据后续专业课程的需要来确定。《C程序设计》和《数据结构》课程整合化的思路以C语言为工具,以实践为中心,重视基础知识,注重能力培养,对两门课程教学内容和教学模式进行优化和整合。
在实施过程中,将这两门课程整合为一门课程,课程名称为《C程序设计与数据结构》,在一个学期内完成授课内容。坚持理论联系实践的教学模式,突出实践教学的重要性,去掉繁琐的理论推导,重新设计教学、实训大纲,处理教材,合理分配学时。在具体教学中,以C语言为主线,将数据结构的内容溶入到C语言的教学中,对数据结构的内容以“适度够用”为原则,适当地进行删减,以满足高职教育培养应用型人才的教学需要。
4.《C程序设计》与《数据结构》课程整合的具体实施
(1)整合后理论课教学的内容和学时分配
整合后周学时为6节,总学时为102节(按17个教学周计),其中理论课时为68节,上机实践课时为34节。
(2)课程整合后的实践教学设计
在实践教学中,要进一步巩固对理论知识的理解,提高学生灵活运用数据结构和算法的能力,使学生在编程、上机操作、程序调试与正确性验证等基本技能方面得到训练和提高。实验可分两部分,一是验证性实验,主要结合课堂理论教学内容展开,学生可以对在课堂上学到的基本算法进行验证;二是运用性实验,组织学生以小组为单位设计一些实用程序,要求学生从实际出发,在具体、真实的环境中分析研究数据对象的特性,构造合理的数据结构以及相应的算法。
(3)课程整合后的考试要求
整合后的课程培养目标是提高学生的计算机应用能力,计算机应用能力包括了三个层次:操作使用能力、应用开发能力和创新能力。因此整合后的课程考核,应采取理论基础闭卷和上机操作开卷相结合的方式进行,综合评价应从以下三个方面来着手。
①笔试。笔试主要是考察学生对理论知识的系统性的理解,可由客观题型(如选择、填空题等)和主观题型组成,客观题型要立足于基础知识,小而全,避免死记硬背。主观题型要灵活多样,如问题解决分析、程序编写等。占整个评价的30%。
②上机实践。上机实践贯穿于整个教学当中,所以要注重过程考核,结合实训计划,在各单元模块结束时,进行随堂考核,并认真检查和记录学生考核情况,作为期末上机实践成绩的一部分。实行各单元过关,有了各单元模块的考核,到期末上机操作综合考核时就不成问题了。通过对上机操作实践的评价,可以考察学生应用计算机解决实际问题的能力。占整个评价的40%。
③学生的平时表现。学生的平时表现是指是否认真上课、听课,上机练习的任务是否独立完成,上机设计的任务是否有创意,作业是否按时上交等等,这些资料的积累,有利于对学生学习情况的全面认识。学生在整个授课过程中的表现,占整个评价的30%。
作者Kent D.Lee博士是美国艾奥瓦洲路德学院计算机科学教授,已成功出版两本著作:Python编程基础和编程语言基础。另一作者Steve Hubbard博士是路德学院数学与计算机科学系教授。
中图分类号:G64文献标识码:B
文章编号:1672-5913(2007)02-0023-04
1 引言
计算机教育是高等教育的基础之一,而程序设计基础是一门十分重要的计算机基础课程。运用现代教育技术的先进理论──建构主义理论构建程序设计基础的新型教学结构,不仅有利于程序设计基础学科的自身建设,更有利于培养和提高广大学生的创新思维、创新能力。
2 建构主义理论
建构主义理论是当今国际教育界影响较大,并日益显示其强大生命力的一种新的、较成熟的教育理论,它对于我们深入教育改革、进行学科教育研究等都有重要的借鉴和启示作用。建构主义理论的核心观点是:人作为认知主体对知识的获取不是被动地接受、而是主动加工建构的,即学习知识是“认知主体”的内部心理过程,并把学习者看作是“信息加工主体”,而不再是“刺激──反应”的行为过程,而把学习者看作对外部刺激作出被动反应的“知识灌输对象”。也就是说,学习是学习者在原有知识的基础上借助外来信息、通过双向、交互作用来加工建构的认知过程,用一句话可概括为:以学生为中心,强调学生对知识的主动探索、主动发现和对所学知识意义的主动建构(而不是像传统教学那样,只是把知识从教师头脑中传送到学生的笔记本上)。因此,建构主义理论的主要目的是让学生自主建构自身知识,教师只是起到通过科学的教学方法和手段帮助学生积极主动完成知识建
构的辅助、指导作用。
3 运用建构主义理论构建程序设计基础的新型教学结构
3.1程序设计基础的传统教学结构
程序设计基础的传统教学结构是以教师为中心,教师讲、学生听,主要靠教师向学生灌输知识,作为认知主体的学生在教学过程中自始至终处于被动状态,难以发挥其主动性、积极性。这样的教学,既不能保证教学的质量与效率,又不利于培养学生的发散性思维、批判性思维和创造性思维,也不利于创造型人材的成长。在程序设计基础的具体教学内容安排上,过于注重语句、语法和一些细节,基本上是以高级语言自身的体系为脉络展开满堂灌式的讲解,没有把逻辑和编程解题思路放在主体地位上;对如何分析问题和解决问题启发和引导不够,对学生的编程、上机解题的能力训练不够,直接导致学生普遍反映该课程枯燥难学,而且学过之后,不能用来很好地解决实际问题。在教学评价上,考试是“指挥棒”,它对教学目标、教学过程有着较大的负面影响,许多学生就是为了通过考试而学,学习过程中表现得十分被动,教师为了合格率而教,教学效果自然不好,也就更谈不上学生创造思维、创造能力的培养了。
3.2运用建构主义理论建构程序设计基础的新型教学结构
运用建构主义理论改革传统的教学结构,构建程序设计基础的新型教学结构,可以从根本上提高教学质量,真正培养和提高学生的计算机应用能力、实际操作能力,更有助于他们的创造性思维和创造性能力的发挥。
3.2.1构建程序设计基础的新型教学模式
运用建构主义理论构建程序设计基础的新型教学模式就是要强调以学生为中心,将学生视为教学主体,设计和安排教学首先考虑学生的认知规律和学习特点,并在具体的教学过程甚至每一个环节,都顾及到学生的实际情况,最大限度地激发学生的学习兴趣,帮助学生形成学习动机;通过创设符合教学内容要求的情境和提示新旧知识之间联系的线索,帮助学生建构当前所学知识的意义;为了使意义建构更有效,教师应在可能的条件下组织协作学习(开展讨论与交流),并对协作学习过程进行引导,使之朝有利于意义建构的方向发展,最终引导学生实现主动学习,创造性地学习。有了这样先进的教学理念,程序设计基础的教学内容安排就更趋于合理:以强调动手实践、上机编程为切入点;以任务驱动方式,通过实例讲授程序设计的基本概念和基本方法;并将授课重点放在程序设计的思路解析上,即在C/C++语言的环境下,针对问题进行分析,构建数学模型,理出算法并编程实现,努力提高学生分析、解决问题的能力,从中激发他们的创新意识,锻炼他们的创新精神,培养他们的创新能力。为此,在日常的教学过程中,我们采取了如下的细化方案。
(1)采用双语教学
程序设计基础的课堂教学采用双语(英语和汉语)授课。程序设计所选用的计算机语言(如C/C++)与自然语言(英语)很相似,采用双语教学便于学生对计算机语言的理解和掌握,有利于进一步学习程序设计。教师通过适时、必要的双语讲解和提示,启发和引导学生充分利用大学英语的语言背景,站在语言学习的基点来完成计算机语言及程序设计理论意义的建构,为顺利实现与计算机的真正交流打下坚实的理论基础。在此期间,学生作为主体直接参与教学,“外化”已学过的英语知识,并不断产生正迁移,自己发现规律、自己去纠正和补充片面的认识,进而完善程序设计知识的建构;因此,学生的学习兴趣和学习热情、主动性和建构性不断被激发,发散、逆向等创造型思维得以孕育和培养。学生完全是在一种“探索与发现”式的学习过程中,去积极主动地建构自己的计算机语言和程序设计知识。
(2)强化学生动手实践
强化学生动手实践贯穿程序设计基础的整个教学。教师明确告诉学生:程序设计是高强度的的脑力劳动,不是听会的,也不是看会的,而是自己练会的。在整个教学中,始终让学生直接参与思考、直接动手操作,鼓励和支持他们在亲自参与的实际操作中发现问题、解决问题,并积极启发和引导学生把当前学习内容所反映的事物尽量和自己已经知道的事物相联系,并对这种联系加以认真思考,最终用探索、发现的方法建构程序设计知识的意义。例如,每节课2/3的时间,学生都在教师的鼓励和支持下,积极动脑去参与具体的实际操作,教师既不是简单地指出学生的错误操作,也不是简单地解答学生的提问和要求,而是启发和激励他们进行个性化的学习,让学生自己积极主动进行所学知识意义的建构,最大限度地提高每一位学生的学习效率。除此之外,教师可将一些有较好编程基础的学生组织起来,因材施教,引导他们进行探索式的研究性学习,让他们继续提高,同时还让他们担任“辅导员”,指导和帮助其他同学解决所遇的问题,通过“自我协商”与“相互协商”,提高建构意义的效率和质量,开拓学生的创新性思维。这期间,教师始终是教学过程的组织者、指导者、知识建构的帮助者、促进者;学生则是积极、主动、快乐的学习者。
(3)培养理性思维,进行理性实践
有的学者认为:
程序设计=计算机编程语言+数据结构+算法
程序设计就是把用户解决问题的方法思路(数据结构和算法)用计算机能够读懂的语法格式表达出来,并通过运行来完成用户问题的解答。计算机是由人发明的,是“人类通用的智力工具”,它的“思维模式”完全是人类思维模式的反映。因此,在程序设计基础的教学中,教师有意识地将人的思维与程序设计的编程算法一一对照,引导学生不断寻找两者间的联系,理性思维,从而积极主动地建构起程序设计编程算法的理论和规律,并指导自己进行理性实践。
例如,在课堂教学中,针对一些理论知识,如计算机语言的语法结构及程序设计的算法等,教师可以利用5~10分钟的时间,通过精炼、简短的CAI双语课件演示和讲解,然后分别对比自然语言和人的思维,由感性认识上升到理性认识,启发他们通过理性思维递推和建构起计算机语言的语法结构;面对一些程序设计的经典实例,同样对照人的自然思维,结合一些数学知识,引导他们理性地总结和建构出程序设计编程算法的理论和规律,进而在具体的编程实战中举一反三,进行理性实践。教师平时比较注意对学生学习方式的正确引导,让他们明白:理论很重要,动手实践更重要。要在理论指导下,动手动脑、有条有理地进行实践。
因此,学生经过这样的理性思维和理性实践,掌握了程序设计的技巧和方法,成功地解决了具体问题,获得了成就感,进而对程序设计产生兴趣,真正克服了学习程序设计的畏难情绪,学习起来也会更加从容。
(4)培养良好的编程习惯
程序除了写给自己看,还要交流,良好的编程风格可以提高程序的可读性、规范性、通用性。在日常教学中,教师应该注意对学生这方面习惯的培养。比如,教师可通过规范、严谨的教学课件展示声明变量加注释,程序构思有说明,通过分析和调试典型的编程实例,让学生学会有效地编写程序、调试程序、优化程序,并对程序的运行结果作出正确与否的判断和分析,从而达到对学生良好编程素质的培养,也有助于学生严谨治学精神的塑造,这是建构主义理论对教师在教学中进行学习情景设计的要求。
(5)培养和提高学习能力,创新能力
程序设计基础是培养大学生学习能力、创新能力的大课堂。程序设计是一门实践性极强的计算机学科,所学内容与要求实践的操作完全一致。因此,适当安排学生自学,有助于提高学生的自学能力。网络平台的搭建为学生提供了一个较好的学习环境,为此,教师在教学期间可以不时地设计一些能够调动学生学习积极性的有关程序设计的最新问题,鼓励他们通过网络渠道学习和提高自己的程序设计能力,而且通过上网可以提高他们获取信息、处理信息和交流信息的能力,有助于培养他们的批判性思维和创制性思维[4]。
总之,经过近几年程序设计基础的教学实践证明:这种新型的教学结构产生了较好的教学效果,学生不仅掌握了程序设计的编程方法和技巧,还养成了良好的编程习惯,同时又培养了学生的创新思维能力和较强的动手实践能力,得到了广大学生的赞同。
3.2.2 构建程序设计基础的新型教学评价模式
运用建构主义理论构建程序设计基础课程的新型教学评价模式,主张评价不能仅依据客观的教学目标,还应该包括学习任务的整体性评价,学习参与度的评价等,即通过让学生去实际完成一个真实的任务来检验学生学习结果的优劣。而建构主义主张学习是自我建构知识意义的过程,因此,源于建构观的评价并不强调使用强化和行为控制工具,而较多使用自我分析和元认知工具。因此,程序设计基础的新型评价模式既便于学生及时了解自己学习的进展情况、存在的问题等,以便能够及时弥补知识漏洞,学生自主学习的积极性、创造性被调动和激发,同时又能够帮助教师及时调整和改进教学工作,最终促进教学质量的提高。
(1)学生学习效果的评价
考试是检验学生学习效果、评价学生学习业绩的重要环节。开课之初,我们就提醒同学:课程的考核方式是以上机考试取试,考试结果也由计算机评判,对就是对,错就是错,不纸上谈兵,不考死记硬背的东西。这样对学生的日常学习有一个正确的引导。然而,考试只是手段,不是最终目的,我们采用设计合理的阶段测试系统,对学生各阶段的学习情况进行跟踪测试,测试结果随机给出,学生可以根据结果随时调整和纠正这一阶段的学习方式和方法,及时查漏补缺,进而积极主动、创造性地完成学习。
(2)教师教学效果的评价
设计开发科学的程序设计考试系统,不仅可以实现考试功能,同时还可对考试结果进行评析,针对各位教师所教班级的考试结果给出相应的评估报告,实现学校对教师教学情况的监控,进而对教师的教学予以指导,以提高程序设计的教学质量,而教师本人也可根据评估报告及时调整自己的教学计划和教学设计,进而摸索出符合教学规律、更能培养学生创造性思维和能力的教学方法,最大限度地提高教学效果。
4 结束语
不论是从国际还是从国内的教学情况看,当前各级各类学校深化教学改革的关键都在于能否打破长期以来统治他们课堂的传统教学模式。为了改变这种状况,国内外许多教育工作者、教育学家、教育技术专家多年来从理论与实践两个方面作了大量的研究与探索,建构主义理论正是这种努力所取得的主要理论研究成果。广大教师在具体的教学实践中如何理论联系实际,将之转化成有效的教学方法和手段,还需要不懈地探索和开拓,最终才能使建构主义理论成为我们深化教学改革的指导思想和批判传统教育思想与教学观念的锐利武器。
参考文献:
[1]何克抗,李文光.教育技术学[M].北京:北京师范大学出版社,2005.
[2]冯忠良,伍新春,姚梅林,等.教育心理学[M]. 北京:人民教育出版社,2002.
当前,计算机技术飞速发展,程序设计技术已从结构化程序设计技术向面向对象程序设计技术过渡,对一个规模较大的应用程序,总体框架是由面向对象程序设计构搭而成,而在局部实现时仍需采用结构化程序设计技术。C语言是一种很好的结构化程序设计语言,因此,笔者论述了C中的的结构化程序设计的方法。
结构化程序设计(STRUCTURED PROGRAMING,简称SP)的概念是由荷兰学者E·W.DUKSTRA等人在20世纪60年代后期提出的,是以模块化设计为中心,将原来较为复杂的问题化简为一系列简单模块的设计,也就是将—个大的计算任务划分为一个个比较小的任务,这些小任务均由函数来完成。而函数既可以是C的标准库函数。也可以是自定义函数。在C中,一个具备一定规模的C程序往往是由多个函数组成,其中必有一个名为main的主函数,由main来调用其他函数,必要的话,其他函数还可以调用另外的函数。同一函数可以被一个或多个函数调用一次或多次。模块的独立性还为扩充已有的系统、建立新系统带来了不少的方便,因为我们可以充分利用现有的模块作积木式的扩展。
中图分类号:G633.67 文献标志码:A 文章编号:1674-9324(2012)03-0226-02
教材分析:
该课题的内容选自于《算法与程序设计》教材,该教材是上海市高中信息科技课程选修模块。学习本模块的内容,目的是进一步激发学生对计算机探索学习的兴趣,培养运用计算机解决具体问题的基础能力,养成良好的思维与程序设计基本习惯。
《分支结构的程序实现》是本模块第四章第一节的内容。分支结构的授课分为两课时,第一课时:分支结构的流程图绘制;第二课时:分支结构的程序实现。本课为第二课时,主要内容是用IF语句解决日常生活中涉及分支结构的实际问题。
通过本课的学习,有助于学生体会和理解程序设计的思想,提升学生解决问题的能力,而且也为之后循环结构、枚举算法的学习打下基础。
学情分析:
学生在学习本课内容前,需有两方面的知识储备:
1.通过分支结构第一课时“分支结构的流程图绘制”知识的学习,理解并掌握分支结构的特点、执行流程及其作用。
2.通过“顺序结构及其程序实现”知识的学习,基本掌握VB控件的设置、动作的实现等内容,对于VB程序的建立、运行、调试过程也有一定的实践经验。
对上述内容的学习和掌握为本节课的学习奠定了一定的基础。另外,高一的学生分析解决问题的能力、自我探究的能力也有了一定的水平。
教学资源:
根据教学内容和学生实际,在教学资源方面做如下准备:
1.技术准备:计算机网络机房、多媒体广播软件、Microsoft Visual Basic 6.0中文版
2.资源。①教师机:1个PPT课件,2个程序(1个“猜价格”的演示程序,1个“ATM机录入密码”半成品程序)②学生机:1个“半成品”程序(包含3个小任务)
教学目标分析:
1.知识与技能:①掌握分支选择中IF语句(块语句)的格式和功能。②学会用IF语句解决日常生活中的实际问题。
2.过程与方法:①通过依次学习单分支语句、双分支语句,再到分支嵌套语句,学生能循序渐进地掌握分支结构。②通过采用VB半成品加工策略来完善程序,学生能体验运用编写程序解决问题的基本过程。
3.情感态度与价值观:①培养学生严密的逻辑思维能力、自主探究能力。②加强学生利用本学科解决日常学习生活中问题的意识。
教学重点难点:
教学重点:掌握分支结构IF语句的格式。
教学难点:能根据实际分析问题,写出程序并调试成功。
教法与学法:
1.教法:半成品加工方法。采用半成品加工方法,可以淡化与分支结构无关的内容,例如可视化VB界面的设计,从而有效提高课堂效率,这种方式在巩固练习中使用非常合适。
2.学法:自主学习、小组讨论、组间交流。学生作为学习的个人主体,必须通过自主学习掌握本节课的学习内容,从而培养学生独立解决问题的能力。采用小组讨论、组间交流的方法,培养学生互助、团结协作的良好品质;增强学生协作学习、与人合作交流的意识;形成积极主动的学习和使用信息技术、参与信息活动的态度。
教学过程设计:
(一)创设情境,激发兴趣
1.教师演示猜价格的小程序。
2.提出问题:该程序是一种什么结构?顺序结构?还是分支结构?
3.举例:生活中有很多分支结构的问题。
4.引出分支结构的程序实现。
(设计意图:从生活中提取问题,让学生能有学习兴趣,并能及时了解本节课的学习任务。)
(二)合作探究,获得新知
以“银行ATM机录入密码”程序为例:
1.教师展示“密码判断”的单分支结构流程图,请同学用自然语言来描述。学生回答:如果(用户输入的密码为999)那么(程序提示密码正确)。
2.教师引出VB中单分支结构IF语句的基本用法。同时让同学们讨论IF…THEN…中省略号代表什么含义。学生回答:IF(条件)THEN(条件成立时执行的语句)。
3.师生共同共同编写代码,程序实现。
4.教师提出问题:如果密码是错误的,那么将会出现什么情况?如果要让程序在密码输入错误时,也要出现提示,该如何做。
5.教师展示双分支结构流程图,请同学用自然语言来描述算法。学生回答:如果(用户输入的密码为999)那么(程序提示密码正确)否则(程序提示密码错误)。
6.教师引出VB中双分支结构IF语句的基本用法,同时让学生讨论IF…THEN…ELSE…中省略号代表什么含义。学生回答:IF(条件)THEN(条件成立时执行的语句)ELSE(条件不成立时执行的语句)。
7.师生共同编写代码,程序实现。
8.教师讲解IF语句的两种格式:行IF语句和块IF语句的用法。
(设计意图:通过自然语言与程序设计语言的比对,加深学生对分支结构的认识。通过师生共同参与改写程序,使学生了解IF语句的书写格式,并感受程序语言的严谨性。)
(三)学生实践,解决问题
1.教师布置3个任务,学生选择其中一个进行操作,要求自主完成。①判断是否中奖,要求如下:程序设置初始中奖号码,若用户输入的号码为中奖号码,程序则显示“恭喜您,您中奖啦!”②判断是否打折,超市进行苹果促销,如果买5斤以内就按价格4.5元/斤计算,如果大于等于5斤,总价可打九折。要求如下:输入你买的苹果重量(单位:斤),程序显示总金额。③判断一元二次方程是否有解。要求:输入一元二次方程的系数a,b,c,判断该方程是否有解,如果有解,则输出解,如果没有解,则输出“该方程无解”。
2.任务分析:判断是单分支还是双分支结构?鼓励学生可多选任务来完成。
3.展示成果,教师强调IF语句的格式规范。
(设计意图:通过三道难易不同的题目进行分层训练,让不同知识基础和思维能力的学生都能够体验到成功的喜悦,提高学生分析问题、解决问题的能力,突出本课的重点。)
(四)交流提升,应用拓展
1.教师提出在任务2中,若要求如下:输入斤数,如果小于5斤,就按价格4.5元/斤计算,如果大于等于5斤,就打九折,如果大于等于10斤就打八折,程序显示总金额,该如何设计算法?学生回答:利用分支嵌套结构可以实现该算法。
2.教师展示分支嵌套流程图。
3.学生小组讨论,组间交流。
4.学生组内共同撰写程序。
5.教师展示学生的代码,再次强调语句撰写的规范。
(设计意图:通过对新任务的探讨、分析,加深学生对分支结构嵌套语句的理解。同时进一步养成良好的编程习惯。)
中图分类号:G642文献标识码:A
1引言
“C语言程序设计”是计算机系各专业的必修课程,属专业主干课,是一门学位课程。也是各高校部分非计算机专业开设的程序设计课程之一。本课程开设的目的是使学生掌握面向过程的程序设计的基本概念,逐步形成正确的程序设计思想,理解结构化程序设计方法;掌握程序设计的基本技术,程序设计的基本组织方法即函数(模块)程序设计;具备调试程序的能力。因为C语言功能强大,程序编写灵活,具有较强的实践性,是一门高级语言中的“低级语言”,既可以用来编写系统软件,又可以用来开发应用软件,因此对学生以后参与专业领域的应用软件的开发和使用会有极大的帮助。C语言是结构化的语言,学好C语言程序设计,能为后续课程(数据结构、编译原理、操作系统、C++、Java等)及其他程序设计课程的学习打下基础。同时,C语言程序设计也是计算机类各种考试所要求的重点课程之一。
2循环结构程序设计
结构化程序设计中包含三种基本技术:顺序结构、选择结构和循环结构。循环结构的程序设计是学生学习了结构化程序设计的前两种基本技术之后的第三种基本技术,是结构化程序设计技术中最重要也是最难的部分。这门课程一般都是学生学习程序设计的入门课程,第一次学习循环,可能难于理解“循环”的含义,在设计程序时正确使用循环也就更困难了。针对这些特点,循环结构程序设计的教学方法和教学手段也就值得探讨。
3循环结构程序设计的教学方法
3.1教学重点和难点
要想学生能够轻松理解和掌握循环结构的程序设计,首先得确定本部分内容的重点和难点。
本部分的重点主要是:(1)循环控制结构及其设计。(2)循环控制语句的应用。教学重点是循环控制语句中的while语句,只要把while语句的使用讲解清楚了,后面的for语句和do-while语句就容易多了。
本部分的难点是循环控制结构及其设计。
3.2突出教学重点与分散难点的方法
为了突出教学中的重点并分散难点,可以从三方面入手:
(1) 从分析问题的重复性入手。学生在日常的生活、学习中能看到、体会到重复这种行为。精心设计实例,给学生一个比较实际的切入点,通过教师的引导,使学生能体查、归纳“重复行为”,从而理解和掌握循环的主要特点:有规律地重复操作。在教师的启发、引导下,使学生在课堂上真正地成为“主体”,教师扮演“主导”角色。在整个过程中,紧紧抓住循环程序设计的思想,采用“自顶向下,逐步求精”的结构化程序设计方法,把重点突出出来,并把难点进行分散,使学生容易理解和接受。
(2) 难点内容,提前做好铺垫。在前面内容适当的地方安排出现循环程序,但不讲它的功能,为讲解现在的内容做好铺垫,打下伏笔。这使得学生的每一步学习都有基础,是一个循序渐进的过程,使学生的学习是在“走台阶”,而不是“三级跳”,效果很好。
(3) 在循环程序设计的应用中,可以从简单公式化的循环入手到复杂非公式化的循环的处理。讲解过程中,通过黑板进行详细分析和讲解,使学生加深学习和理解。适当的地方进行提问,教师引导学生积极参与到分析问题,解决问题的过程中,写出程序后,放到实际的环境下运行,让学生来分析程序的正确性,改正程序的错误,有利于学生理解难点、掌握重点。
3.3教学过程的设计与组织
(1) 提出问题
本部分的内容是循环程序设计,体现在两个方面,一是循环结构程序设计的算法表示;二是循环结构程序的C语言表示。循环程序设计是结构化程序设计中最难、最复杂的部分,而授课对象是初次接触程序设计和循环结构,因此循环的引入就至关重要。例如:通过引入求5!这个简单的例子,运用已经学过的顺序结构程序设计就可以实现;但是求复杂的阶乘,比如20!,任意自然数n!,用已经学过的顺序结构程序设计和选择结构程序设计就难于解决,要用简单的方法解决这样的问题,就必须使用结构化程序设计中的第三种基本技术:循环结构的程序设计。这样就轻松地引入了循环结构程序设计。在引入的过程中,要注重调动学生的积极性,采用互动教学法带动学生的积极性。
(2) 解决问题的方法及讲授新内容
在用问题引入了循环后,第一步,分析用循环控制结构求20!的算法的自然语言和流程图表示。第二步,为了实现这种循环控制行为,C语言提供了多种循环控制语句,while语句就是其中的一种,介绍while语句的一般形式和功能。第三步,讲解while循环语句的应用。在讲解的过程中,为了提高学生的学习效果,达到预期的目标,除了采用常用的教学方法和手段外,还可以采用以下一些教学方法和手段:
① 注重启发、引导学生。教师在讲解分析时,注重启发、引导学生主动分析问题、解决问题。
② 注重采用任务驱动的教学模式。通过提出问题,分析问题,引入新知识,解决问题,总结提高,一步步实现教学的目标。
③ 采用国际上惯用的解析教学法。
④ 把编写的程序放到实际环境下运行。让学生来分析程序的正确性,改正程序的错误,有利于学生掌握好重点、难点知识。
⑤ 应用现代化多媒体教学手段,有利于提高教学效率,便于学生理解。充分利用黑板和投影相结合的方式;分析过程用黑板进行教学,以便体现思维过程。
4结束语
要使学生轻松容易地理解和掌握C语言中的循环结构程序设计方法和技巧,必须在教学的所有环节上都进行认真研究和精心设计。通过对循环结构程序设计的教学,使学生提高综合应用的能力,为今后的后续课程及软件的设计和开发打下坚实的基础。
参考文献:
[1] 徐庆生.C语言程序设计[M].北京:科学普及出版社,2007.
[2] 高牧,杨志强,许兰兰,等. C/C++教学改革的探索与实践[J]. 计算机时代,2005(11).
The Design and Discussion of Programming Course of Iteration Structure Pedagogical
in C Programming Language
SUN Ying, XU Shun-qiong, LI Xing-mei
【中图分类号】G71 【文献标识码】A 【文章编号】2095-3089(2013)09-0249-02
在数控类专业的高等职业技能“双证”培训中,非圆曲线的数控编程与加工是一个教学重点,也是一个难点,因为它不仅是《数控编程》课程教学标准中要求掌握的内容,也是数控中级操作员职业资格证考试大纲中要求掌握的技能及各级各类数控大赛中必考的一个部分,涉及到了数控宏程序的编制,也涉及到了数控系统中变量的分配与使用。非圆曲线数控加工宏程序的编制是以计算机程序设计为基础的,学生能否正确理解并写出该加工程序,在很大程度上取决于学生能否准确理解计算机程序中数据存储的方式、数据处理的方法以及计算机程序设计中控制结构知识,掌握计算机程序编制技能,并在两个平台(计算机程序设计与数控编程系统)下将关联知识进行有效对接并完成技能迁移。本文将对这一环节的教学过程进行设计探讨,分析实施结果。
一、教学设计的思路
1.将基础知识课程与职业技能标准进行有效衔接,突出重点,突破难点
数控加工的宏程序是数控中级操作员职业资格考试中必须掌握的内容,也是学生在数控编程中的难点。程序设计中控制结构的三种形式在非圆曲线数控加工宏程序中都有所体现,如果单纯考虑程序设计而没有具体应用,程序设计就失去了原有的意义。如何将知识点在不同的平台上进行对接,将知识进行有效迁移,转换成相应的技能在实际生产中加以应用,是突破难点的关键。本次课程的设计就是通过有效突破难点达到突出重点的目的。
2.从易到难的算法案例设计、从熟悉到陌生应用平台、从理论深入到实践浅出的引导式教学
本次课程的教学目标是通过循环控制结构在非圆曲线数控加工宏程序中的应用达到培养学生在不同的平台上进行知识对接与技能转化的能力。在教学中,采用任务驱动(如图1)的模式及项目式教学法来设计教学案例(如图2)。
三个案例的选择围绕教学目的,采用循序渐进的引导式教学;案例1是计算机程序设计中循环结构设计的典型问题,学生很容易在熟悉的计算机程序设计平台(如C)下完成,该案例为案例2的问题解决建立了一个数学模型,因此,案例1不仅仅是一个计算机程序的算法问题,而是案例2中实现各拟合点步进距关系确定的基础;案例2的任务是找到曲线拟合节点,从而完成曲线拟合,而拟合节点就是案例3中数控加工的关键点,因此,案例2的算法就是非圆曲线数控宏程序加工轨迹上各点的算法,在将该算法移置到数控系统的编程平台(如华中数控系统或FANUC数控系统)中实现就可完成案例3要求的数控宏程序的编制,故此为案例2设计了“计算机编程环境下编程调试运行程序验证拟合点”的教学过程,为案例3设计了“拟合非圆曲线的计算机程序转换成数控平台下加工的宏程序按数控机床的加工要求设定毛坏与机床状态运行加工宏程序进行仿真加工检验算法及程序”的教学过程,这样的过渡让学生在知识迁移时没有突兀的感觉,符合认知的习惯和思维方式,自然而然地加深了对程序设计中循环结构理论知识的理解,掌握了将其应用于加工非圆曲线数控宏程序时的方法,在实践中获得了技能的提高。
二、教学实施的方法
1.形象直观的多媒体课件与板书的有效结合
本次课程信息量较大,重点、难点明显。在教学中,把三个案例的构建、曲线拟合的方法、曲线坐标系与编程坐标系的转换等内容中涉及到的图形图像以多媒体课件的形式进行表达,便捷直观,提高了课堂时间的利用率;将学生难以理解的非圆曲线拟合理论、过程及拟合曲线的计算机程序转化为数控加工宏程序的过程,以板书的形式完成,一方面从视觉得上强化对学生的刺激,加深印象,另一方面让学生对这一重点和难点知识有充分的时间进行思考,实现教师与学生的课堂互动,使学生的思维与老师的启发保持协调一致。根据需要,在教学过程中多媒体课件的演示与板书教学穿插实施。
2.三个软件平台的有效利用
本次课程涉及到三个软件平台的应用――计算机程序设计、斯沃数控仿真系统和传奇多媒体教学网络,其中前两个是与职业技能训练有关的软件。在计算机程序设计的环境下,实现了用循环结构进行椭圆曲线拟合的算法实施并验证,这是将曲线拟合的理论和循环控制结构的理论进行的第一次有效结合并加以实践的过程,但这一过程并没有具体的生产应用,因此它仍然停留在理论的层面上;在斯沃数控仿真系统的平台中,实现了把相应程序用数控系统要求的变量及程序格式转化而成的数控加工程序进行零件的模拟加工,并有了一个可见的虚拟加工成果,虽然不是真实的加工生产,但这两个软件的有效利用已经将循环结构在非圆曲线轮廓数控加工宏程序中的应用推上了一个真实的应用环境,学生从这两个软件的教学过程中非常直观地感受到了课程内容与职业标准之间的关系。
3.“教、学、做”一体化的有效教学过程
本课程是一门理论与实践结合较为紧密的课程,理论与实践并重,教学中不仅要解决“怎么做”的问题,还要解决“为什么这么做”的问题才能达到让学生知识迁移与技能转化的目的。因此在教学中采用了“教中做”、“做中教”、学生“做中学”、“学中做”、“做中会”的教学过程,将程序边讲解边输入到相应的软件中,现场进行程序的调试及运行,学生边看边学,有问题教师可以及时在传奇多媒体教学网络的监控中发现并解决。学生在自己动手的过程中增加了学习的兴趣,提高了技能。
三、教学的总结与反思
1.本课程是一门计算机编程理论与实践相结合的课程,它不仅有利于提高学生的编程能力、思维能力,还培养学生的实际动手能力和创新能力。触类旁通、举一反三、实现知识对接与迁移、提升技能是本次课的教学目的,课后的作业应该体现这一点。
2.《计算机程序设计》这门课程的设置影响本次课程的教学效果。如果学生对计算机程序设计基本理论与方法有比较好的基础的话,用本次课来实现数控宏程序的编制,效果很好;反之,基础较差的话,仿真软件上模拟加工过程可以直接以视频的形式展现,也会激发学生对《数控编程》这门课程的兴趣。
DOI:10.16640/ki.37-1222/t.2017.02.034
1 引言 背景技术
液压支架为煤矿机械化采煤的主要支护设备,结构件是液压支架的主体框架,其结构多呈箱型,目前,对于液压支架结构件箱体断面抗弯强度设计计算,多为依靠OPT液压支架计算程序、采用迈实软件或人工列方程计算等方式进行计算,前者涉及到程序不能升级、不能支持win7以上操作系统,且界面可视化程度不好;中者为采用导入截面图形来识别各个截面图形尺寸分别对每块板进行计算,原理不同,使用起来效率方面并不算出众;而后者在计算时效性方面计算太烦琐,耗时耗力,多已放弃采用。
2 计算原理
根据液压支架受力分析给出结构件危险断面的最大弯矩M进行抗弯强度校核,画出该部件危险断面图,该断面图通常为数十块钢板拼装组成,首先需对相同类型尺寸钢板进行归类,整理出若干组钢板类型;分别对每组钢板进行截面积、截面型心高度计算,进而计算出断面的总型心高度、并分别计算出每组钢板的矩形截面惯性矩,进而计算出断面总惯性矩J;依次计算出最大、最小弯曲应力、、最大最小安全系数;通过使用VB语言编制出自动计算结构件断面抗弯强度计算分析程序,获得相应安全系数并校核出该断面是否设计合理;如图1所示为某一部件危险断面图:
3 设计意图及VB程序的实现
(1)设计意图:使用VB语言编写程序代替人工计算意义在于利用计算机快捷准确、功能强大以及具有可视化界;本程序设计目的在于克服上述缺点,基于VB语言设计,对各功能模块编写代码、并进行编译生成可执行exe文件。该程序包括信息参数输入模块、导入导出模块、计算结果显示模块,并设有计算按钮、导入、导出、清除按钮;断面抗弯强度计算分析截图如2所示:
(2)信息参数输入模块:可按要求将已知的箱体截面的组件数量、断面最大高度、箱体选用的材料强度、断面位置所受最大弯矩,各组件的宽度、高度、形心高度、块数依次输入模块;如该断面中有某组钢板高于或低其他材料强度,可按相应的板材屈服强度比比值换算出该组钢板在与其他钢板使用相同材料强度时的厚度换算输入即可;如钢板组数9为使用Q690材料,其他各组钢板都采用Q550材料,相应厚度换算为30*690/550=37.636。
(3)计算结果显示模块:点击计算按钮后,计算程序就会根据信息参数输入模块中的数据计算出截面形心高度y、截面惯性矩Jz、最大弯曲应力σmax、最小弯曲应力σmin、最大安全系数Nmax、最小安全系数Nmin,并在计算结果显示模块中相应位置显示出来,液压支架工艺设计人员可根据计算分析安全系数大小作出相应的强度增补或验证措施。
(4)导入导出模块:点击导出按钮后,计算程序会弹出另存为对话框,将信息参数输入数据及输出分析按txt格式保存;以备后期存档或方便查看。点击导入按钮后,计算程序会弹出打开对话框,供工艺设计人员选择已保存的txt文件进行导入至信息参数输入模块,方便设计人员及时验算用;既可在信息参数输入模块直接输入数据方式,也可按导入txt数据文件方式计算,期间可以根据设计意图临时更改输入的参数,并且还可识别原OPT生成格式文件进行导入、计算分析进而实现新旧计算工具的融合体现。
4 使用效果及结语
在早期的计算机程序开发中用的比较多的方法即是结构化程序设计,因此也出现了一批优秀的结构化程序设计的语言,如C语言、Pascal等。但是随着计算机软硬件的不断发展,传统的的程序设计方法出现的弊端:结构化方法开发的软件,其稳定性、可修改性和可重用性都比较差,这是因为结构化方法的本质是功能分解,从代表目标系统整体功能的单个处理着手,自顶向下不断把复杂的处理分解为子模块,这样一层一层的分解下去,直到仅剩下若干个容易实现的子模块功能为止,然后用相应的工具来描述各个最低层的处理。因此,结构化方法是围绕实现处理功能的整个过程来构造系统的,我们又称其为面向过程程序设计。
由于结构化程序设计存在一定的问题,因此势必有一个新的程序设计思路来完善,这就是面向对象程序设计出现和发展的必然。
一、结构化程序设计存在的问题
1.软件的重用性差
重用性是指同一事物不经修改或稍加修改就可多次重复使用的性质。软件重用性是软件工程追求的目标之一。如果软件的重用性较差那么软件的造价就相对高。
2.软件的可维护性差
软件工程强调软件的可维护性,强调文档资料的重要性,规定最终的软件产品应该由完整、一致的配置成分组成。在软件开发过程中,始终强调软件的可读性、可修改性和可测试性是软件的重要的质量指标。实践证明,用传统方法开发出来的软件,维护时其费用和成本仍然很高,其原因是可修改性差,维护困难,导致可维护性差。
3.开发出的软件不能真正满足用户需要
结构化方法开发大型软件系统涉及各种不同领域的知识,在开发需求模糊或需求动态变化的系统时,所开发出的软件系统往往不能真正满足用户的需要。
二、面向对象程序设计的思想
从现实世界中客观存在的事物(我们称为对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以现实世界中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。这可以使系统直接地映射问题域,保持问题域中事物及其相互关系的本来面貌。
面向对象方法是以认识论为基础,用对象来理解和分析问题空间,并设计和开发出由对象构成的软件系统的方法。简言之,面向对象就是面向事情本身,面向对象的分析过程就是认识客观世界的过程。面向对象方法从对象出发,发展出对象,类,消息,继承等概念。 面向对象方法的主要优点是:符合人们通常的思维方式,从分析到设计再到编码采用一致的模型表示具有高度连续性,软件重用性好。
面向对象的程序设计语言必须有描述对象及其相互之间关系的语言成分。这些程序设计语言可以归纳为以下几类:系统中一切皆为对象;对象是属性及其操作的封装体;对象可按其性质划分为类,对象成为类的实例;实例关系和继承关系是对象之间的静态关系;消息传递是对象之间动态联系的唯一形式,也是计算的唯一形式;方法是消息的序列。现在用的比较多的面向对象的程序设计语言有Java,C#等。
三、面向对象程序设计的实现过程
1.选择面向对象语言
采用面向对象方法开发软件的基本目的和主要优点是通过重用提高软件的生产率。因此,应该优先选用能够最完善、最准确地表达问题域语义的面向对象语言。
在选择编程语言时,应该考虑的其他因素还有:对用户学习面向对象分析、设计和编码技术所能提供的培训操作;在使用这个面向对象语言期间能提供的技术支持;能提供给开发人员使用的开发工具、开发平台,对机器性能和内存的需求,集成已有软件的容易程度。
2.类的实现
在开发过程中,类的实现是核心问题。在用面向对象风格所写的系统中,所有的数据都被封装在类的实例中。而整个程序则被封装在一个更高级的类中。在使用既存部件的面向对象系统中,可以只花费少量时间和工作量来实现软件。只要增加类的实例,开发少量的新类和实现各个对象之间互相通信的操作,就能建立需要的软件。
一种方案是先开发一个比较小、比较简单的来,作为开发比较大、比较复杂的类的基础。
3.应用系统的实现
应用系统的实现是在所有的类都被实现之后的事。实现一个系统是一个比用过程性方法更简单、更简短的过程。有些实例将在其他类的初始化过程中使用。而其余的则必须用某种主过程显式地加以说明,或者当作系统最高层的类的表示的一部分。
4.面向对象测试
把各个子系统组装成完整的面向对象软件系统,在组装过程中同时进行测试。
从事面向对象编程的人按照分工来说,可以分为“类库的创建者”和“类库的使用者”。使用类库的人并不都是具备了面向对象思想的人,通常知道如何继承和派生新对象就可以使用类库了,然而我们的思维并没有真正的转过来,使用类库只是在形式上是面向对象,而实质上只是库函数的一种扩展。
面向对象是一种思想,是我们考虑事情的方法,通常表现为我们是将问题的解决按照过程方式来解决呢,还是将问题抽象为一个对象来解决它。很多情况下,我们会不知不觉的按照过程方式来解决它,而不是考虑将要解决问题抽象为对象去解决它。
由于面向对象的程序设计还是有待发展和改进的,我们势必对它有一个期待,结构化程序设计的思路我们也不是全部都要丢弃,因为面向对象里面也有过程的东西,不过面向对象的程序设计思路是程序开发的一个主流的方面,也是对结构化程序设计的一个发展的新思路。
中图分类号:TP311.1 文献标志码:A 文章编号:1006-8228(2016)10-54-03
Design of program structure analyzer based on Clang compiler
Zhou Rui
(Shaanxi institute of technology, Xi'an, Shaanxi 710300, China)
Abstract: At present, the research of software testing in China is still in the basic stage of theoretical methods and management methods, and it has not made any breakthrough in the software testing technology. Based on the front end of current popular Clang compiler, using different rules to identify the structure of statement in the abstract syntax tree generation process, and to carry out the reform and correction of the intermediate structure, an effective program structure analyzer with high accuracy is obtained. The design of program structure analyzer lays a solid underlying data support for realizing a theory based comprehensive white box testing tool.
Key words: Clang compiler; abstract syntax tree; program structure analysis; software testing
0 引言
程序结构分析器的实现离不开一个高效的编译前端作支持,而编译技术到目前为止在各领域得到了广泛的应用。从银行的管理软件到高性能计算,大多数都是高级语言进行编写完成,然后通过静态或动态编译最终在计算机上运用。目前比较流行的编译器是在Apple上使用的LLVM/Clang编译器、由GNU开发的程序语言编译器GCC用于Linux系统下编程、IBM公司研制开发的Java编译器Jikes、Inter公司开发的Open Research Compile,还有常见的MSVC、Borland c、myeclipse和jbuilder等等[3-4]。
程序中的缺陷检测是编译器的一项重要任务,也是目前研究的热点和探讨的核心问题。要识别各种错误包括:变量未定义、类型检验、语义错误以及内存泄漏和违规等,就必须在程序分析方面投入更多精力进行设计研究。在保证可靠性和安全性的同时也要减少分析工具的误报,从而避免给程序员带来不必要的麻烦,节约时间,提高效率。因此,编译器技术中静态或动态的程序分析对识别程序中的错误和缺陷有着重要的作用,不过现在面临的问题还不少,出现了许多新的挑战[5]。
1 clang的静态分析器
现有的Clang静态分析器已经完成了过程内分析(Intra-ProceduralAnalysis)和路径诊断(Path Diagnostics)两个大模块。其中已实现的过程内分析功能包括源代码级别的控制流图、流敏感的数据流解析器、路径敏感数据流分析引擎、死存储检查和接口检查。而路径诊断信息模块已经提供路径诊断客户端(提供开发新bug报告的抽象接口、独立于生成过程的可视报告、HTML诊断报告)、缺陷报告器(为前一个模块服务)[6]。
1.1 静态分析概述
静态分析(static analysis)[1]是指在不执行的情况下对代码进行评估的过程。静态分析非常强大,这是因为它允许对多种可能性进行快速参考量。一个静态分析工具能够探查大量“如果……将会……”的假定情况,而不必为所有这些假定进行计算,进而执行这些代码。静态分析技术非常适合于识别安全问题。
⑴ 静态分析工具彻底而一致地进行检查,而不管程序员的检查角度和代码的复杂程度。
⑵ 通过对代码本身的检查,静态分析工具往往能指出安全问题的根源,而不仅仅是指出某种症状。