HI,欢迎来到学术之家,发表咨询:400-888-7501  订阅咨询:400-888-7502  股权代码  102064
0
首页 精品范文 结构化程序设计

结构化程序设计

时间:2023-06-01 09:09:37

结构化程序设计

结构化程序设计范文1

摘要:C语言是一种很好的结构化程序设计语言;结构化程序设计方法可以概括为自顶向下、逐步求精、模块化、限制使用goto语句,将原来较为复杂的问题化简为一系列简单模块的设计;一个程序的任何逻辑问题均可用顺序结构、选择结构和循环结构这3种基本结构来描述。

关键词:结构化程序设计;顺序结构;选择结构;循环结构;算法

中图分类号:TP311文献标识码:B文章编号:1009-9166(2010)023(C)-0084-01

当前,计算机技术飞速发展,程序设计技术已从结构化程序设计技术向面向对象程序设计技术过渡,对一个规模较大的应用程序,总体框架是由面向对象程序设计构搭而成,而在局部实现时仍需采用结构化程序设计技术。C语言是一种很好的结构化程序设计语言,因此,笔者论述了C中的的结构化程序设计的方法。

结构化程序设计(STRUCTURED PROGRAMING,简称SP)的概念是由荷兰学者E•W.DUKSTRA等人在20世纪60年代后期提出的,是以模块化设计为中心,将原来较为复杂的问题化简为一系列简单模块的设计,也就是将―个大的计算任务划分为一个个比较小的任务,这些小任务均由函数来完成。而函数既可以是C的标准库函数。也可以是自定义函数。在C中,一个具备一定规模的C程序往往是由多个函数组成,其中必有一个名为main的主函数,由main来调用其他函数,必要的话,其他函数还可以调用另外的函数。同一函数可以被一个或多个函数调用一次或多次。模块的独立性还为扩充已有的系统、建立新系统带来了不少的方便,因为我们可以充分利用现有的模块作积木式的扩展。

结构化程序设计的思想是一个程序的任何逻辑问题,均可用顺序结构、选择结构和循环结构这3种基本结构来描述。顺序结构的程序流程是按语句的书写顺序依次执行;选择结构是对给定条件进行判断,根据判断结果决定执行两分支中的一个分支或多分支中的一个分支;循环结构是在给定条件成立的情况下,反复执行某个程序段。实现这些程序流程的语句都是流程控制语句。流程控制语句在程序设计中起着重要的作用,通过3种基本控制结构使结构化程序具有唯一的人口和出口,没有死循环,而且程序的静态形式与动态执行形式之间具有良好的对应关系。在C语言中,有4种语句是顺序执行的:1、空语句,光有一个分号“;”作为语句结束符,它表示什么也不做。2、表达式语句,表达式后面加一个分号,表达式语句主要有赋值语句、自加减运算符构成的语句和逗号表达式语句。3、函数调用语句,它是由一个函数调用加上一个分号组成的。4、复合语句,由“{”和“}”把一些变量说明和语句组合放在一起,又称为语句块。选择语句有if语句和switch语句。循环语句有for,while和do-while语句以及一些辅助流程转向语句如continue,break,goto等。顺序结构,选择结构和循环结构共同作为各种复杂程序的基本构造单元,由这3种结构经过反复嵌套构成的程序称为结构化程序,也就是说,结构化程序是由上述3种基本结构组成的。但如果在编程过程中无限制地使用转移语句(goto),会使程序的控制流程强制性地向前或向后跳转而导致程序的流程无序可循,结构杂乱无章。结构化构造减少了程序的复杂性,提高了可靠性、可测试性和可维护性,使用少数的基本结构,就可使程序逻辑结构清晰,易读易懂,并且容易验证程序的正确性。对―个初学计算机语言的人来说。最重要的就是要有正确的程序流程概念,不仅要懂得而且要灵活应用。由此可见,用结构化方法设计的结构是清晰的,有利于编写出结构良好的程序。因此。结构化程序设计方法的主要原则可以概括为自顶向下,逐步求精,模块化,限制使用goto语句。将程序设计针对的问题进行分解,直到分解到对应于一个个功能更简单,又独立的模块,每个模块再分解到上述3种基本程序结构。

实质上,结构化程序设计主要强调的是程序。程序=算法+数据结构+程序设计方法+语言工具和环境,其中算法是灵魂。是解决“做什么”和“怎么做”的问题;数据结构是加工对象;语言是工具;编程需要采用合适的方法。具体解决问题包含的步骤:1、分析问题,找出解决问题的模型;2、根据模型设计出适合计算机特点的处理方法即算法;3、进行编程程序,以实现算法;4、上机编辑(.c)、编译(.obj)、连接(.exe)、运行所编制的程序,直到得出正确结果;5、对结果进行分析,整理出文字材料。

现在人们已经认识到,程序设计的任务不只是编写出一个能得到正确结果的程序,还应考虑程序的质量。否则将会使程序质量低下、可靠性差、开发周期长、维护费用高,这也就是我们平常说的“软件危机”,它会严重阻碍计算机应用的发展。由于大多高级语言都支持结构化程序设计方法,其语法上都含有表示3种基本结构的语句,所以用结构化程序设计方法设计的模块结构到程序的实现是直接转换的,只需用相应的语句结构代替标准的控制结构即可。

作者单位:徐州空军学院基础部

结构化程序设计范文2

关键词:程序设计教学;实例拓展法;结构化程序

0 引言

在传统的结构化程序设计课程中,教师往往按照知识点的先后顺序和难易程度讲解程序的基本结构。在课堂上也只是列举一些典型例题来引导学生理解所讲内容,例子之间可能没有内在的逻辑关系。因此,常常造成学生只能靠死记硬背学习程序结构的各种语句,不能真正理解为什么使用这样的方法编写程序,无法达到灵活应用的教学目的。为此,在教学过程中,应该选取更加合适且具有合理的逻辑关系的例子,便于学生深入理解相关知识。

1 实例拓展法的原理

实例拓展法属于教学模式的一种,其显著表现是教师的教和学生的学,都是围绕实例来完成,使得学生通过积极主动地运用学习资源,进行自主探索和互相协作学习,在完成教师教的实例同时,产生新的实例的一种学习实践活动。它有利于培养学生的自主学习能力和独立分析问题、解决问题的能力,尤其适用于计算机课程的教学。

2 实例拓展法的应用

下面以VB程序设计课程为例,来说明教学过程中如何选择合适的实例,以便于学生的拓展学习。所用实例分为两大类,一类在教师课堂讲解时使用,另一类在学生上机练习时使用。

1)课堂讲解所用实例。

课堂实例的精心设计是教学设计的关键。实例的安排应考虑学生心智发展水平、不同年龄阶段的知识经验以及生活中的实际需求。实例的拓展难度应该由浅入深,让大部分学生通过思考都能完成,并且要能够充分包含所讲授的知识点,能够很清楚地说明问题。

结构化程序设计的课程内容主要包括5大部分:顺序结构、选择结构、循环结构、数组应用与过程设计。在教学过程中一定要遵循课程内容之间内在的逻辑关系,由浅入深、循序渐进地讲解。

下面列举出讲解结构化程序时所用的实例,程序代码从略。

例1顺序结构程序举例:输入圆的半径,计算圆的面积。介绍程序的基本组成,包括数据输入、数据处理和数据输出3个部分。

例2选择结构程序举例:对例1进行拓展,让学生思考,如果输入的半径小于0时该如何处理。引入选择结构的if语句。

例3选择结构程序举例:通过键盘任意输入三个数,求它们的最大值和最小值。介绍if语句的两种格式(单行格式和多行格式)。

例4选择结构程序举例:求分段函数的值。介绍两种多分支结构的语句格式(if语句和Select Case语句)。

例5循环结构程序举例:在窗体上显示1-10之间的奇数。引入循环结构For…Next语句。

例6循环结构程序举例:对例5进行拓展,让学生思考,如何实现求1-10之间的奇数之和。

例7循环结构程序举例:对例6进行拓展,求1+3+5+7+…的值不超过100时的最大奇数。引入循环结构Do…Loop语句。

例8数组应用举例:对例3进行拓展,让学生思考,如何实现求10个数的最大值和最小值。引入数组的概念和静态数组的使用方法。

例9数组应用举例:对例8进行拓展,让学生思考,如何实现求任意多个数的最大值和最小值。引入动态数组的使用方法。

例10过程设计举例:对例3进行拓展,将求三个数的最大值和最小值分别定义成两个函数,并调用函数。引入过程的概念以及Function过程(即函数)的建立和使用方法。

例11过程设计举例:对例10进行拓展,将求三个数的最大值和最小值分别定义成两个Sub过程,并调用Sub过程。引入Sub过程的建立和使用方法,并与Function过程进行对比。

以上的实例主要是在引入相关概念和讲解程序基本原理时使用的,需要在多个课时中讲解。根据所讲内容的课时安排,可适当补充其他实例,更加详细地讲解相关知识,也可以补充一些比较有趣实用的综合例子,如制作计算器、打印九九乘法表、求素数、求水仙花数和完全数等,以扩展学生的思路和眼界。

2)实验练习所用实例。

上机实践是学生巩固课堂所学知识的必要阶段,是检验学生学习效果的有效手段,对提高学生的自主学习能力和实际操作能力具有极其重要的作用[2]。为了让学生能够有效利用上机练习的宝贵时间,教师需要给学生提供一些与课堂讲解实例有关,而且比较典型的练习题,让学生通过思考去独立完成,这样可以使学生深入理解所学知识,灵活掌握编程技术。

下面列举出以上课堂讲解部分对应的上机练习所用实例,程序代码从略。

练习1顺序结构程序练习:输入圆柱体的底面半径和高,计算圆柱体的体积。让学生练习数据输入、数据处理和数据输出三部分的相关语句。

练习2选择结构程序练习:输入两个数,按从大到小的顺序输出这两个数。让学生练习选择结构程序的相关语句。

练习3选择结构程序练习:输入一个学生成绩,判断其所在的等级(大于90为优秀,大于80为良好,大于60为及格,小于60为不及格)。让学生练习选择结构程序的相关语句。

练习4循环结构程序练习:求1-2+3-4+5-6+……+99-100的值。让学生练习循环结构程序的相关语句。

练习5循环结构程序练习:输出1~100之间的偶数,并显示为10个数一行。让学生练习循环结构程序的相关语句。

练习6循环结构程序练习:输入多个学生成绩,计算平均成绩,要求当输入一1时停止计算。让学生练习循环结构程序的相关语句。

练习7数组应用练习:先随机生成30个0-1000之间的随机数,再求这一组数的最大值和最小值。让学生练习数组的定义和使用。

练习8数组应用练习:先随机生成30个0~1000之间的随机数,再显示这一组数中的所有奇数,每10个数一行。让学生练习数组的定义和使用。

练习9过程设计练习:定义一个求阶乘的函数Fact,并调用函数求任意输入的一个数N的阶乘N!。让学生练习Function过程(函数)的建立和使用。

练习10过程设计练习:定义一个求阶乘的Sub过程Fact,并调用该过程求任意输入的一个数N的阶乘N!。让学生练习Sub过程的建立和使用。

在上机练习时,教师应当遵循以下原则:尽量让学生自己完成拓展实例及创新实例,要给学生留出思考、探索、醒悟的时间,并把握好信息反馈,及时了解学生的学习进展及存在问题,在恰当的时候予以点拨。

3 教学效果

笔者通过多年的教学实践工作进行总结和检验,发现使用实例拓展法教学之后,学生从学习兴趣、课堂反应到作业成绩以及考试成绩等各方面都有了明显的提高和改善,学生能够从中学到自己需要的知识,并真正将其转化为实际应用,设计出实用的小软件来,对于他们将来学习其他知识和提高计算机操作水平都有很大的促进作用。

以下为近四年来采用实例拓展法教学之后学生的出勤率、作业成绩和考试成绩的对比图表。通过图表可以看到,通过教学方法的改进,学生的学习积极性和学习效果整体有了明显提高。

4 结语

结构化程序设计范文3

关键词:C语言;程序设计;循环结构;教学方法

中图分类号: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

(Department of Computer Science, Chuxiong Normal University, Chuxiong 675000, China)

结构化程序设计范文4

【关键词】Android手机; 音乐播放器; 界面设计; 应用程序

0 引言

在对Android手机音乐播放器设计结构理念中,主要满足当前用户的设计需要。在界面设计和软件结构构件上不断创新,笔者在此分析了Android应用平台的构架结构,包括应用程序的结构设计和手机音频结构的设计;在软件应用程序需求上也进行了分析,对软件设定功能的需求以及软件界面的创新设计需求,满足当今用户主体对音乐播放器软件程序的设计需求。在设计界面上采用UI数据模型的结构,使操作流程简化;在软件应用程序上采用了嵌入式的应用平台,保证传输音质的质量以及减少占用CPU的大小。在手机音乐播放器整体系统设计结构中,对播放器的功能的设计、功能的流程分析以及功能时序图的设计也进行了简要的分析,以便于为今后Android应用系统开发的设计人员提供可参考性的结构。

1 Android系统应用平台构架结构

Android系统应用平台按照构架层次可分为四层,分别为程序编码层、程序应用层、运行系统数据层以及程序运行核心层。四层结构主要完成数据结构的抽样、量化、编码,抽样是对传输数据结构频率的抽取,数据包在传送时要经过带通滤波器完成对数据信号频率的抽取,抽取的频率为8000Hz。量化就是对Android系统中模拟的信号转化为数字信号,保证幅值不发生连续的变化,编码便是对抽样和量化后的信号进行编码,完成在数字传输信道的传输。

1.1 Android应用系统布局的设定

Android系统在设计开发时,会根据应用程序设定一些专用的数据包,包括:界面管理、日历、通讯录、计算器、邮件接收装置以及地图查询等。

在音乐播放器界面设计流程中基于六个设定目标的程序进行设计,其中在界面的最上端为隐藏窗口的设计,用户在搜索项目列表时,点击屏幕的最上端,则小窗口便会浮现出来。在规定时间内若是没有响应变化,则该窗口便会自动隐藏。下面便是封面的设计流程,按照所选模式类型的不同分为水平界面模式、垂直界面模式以及3D立体界面模式。播放程序的设计,分为单曲循环模式、随机模式、列表顺序模式,用户在选定播放的歌曲时,可按照不同进度进行调整。第四个便是本地搜索按钮,当小窗口没有浮现在界面管理器时,用户可点击自行设定的搜索按钮,也可搜索出本地的项目组。第五个操作按钮为播放进度按钮,用户可自动调节音乐播放快慢得节奏,减缓等待时间。第六个操作按钮为音效调节按钮,播放器中播放音效的效果有流行音乐、古典音乐、爵士乐以及轻音乐,这样可以满足用户对不同种音质的调整。

1.2 Android音频构架结构的设计

Android音频构架结构的设计是根据Linux中ALSAD的设定程序进行设计,在原有的基础上加入了混响效应,音频驱动设定在内核应用处理程序中,驱动库在S0C音频系统调解下,进入到Audio射频硬件数据层,处理音频的数据结构,按照音频的不同调节程度范围,分为左音频、右音频、立体音频。三种逻辑结构的设计是根据用户听音乐不同的节奏进行调制,对于左音频的设计主要对定调频率的节减,减少多余的冗余数据,使之处于高保真的效果。右音频是针对音频硬件中输入电流的控制,右端的射频端点的幅值高于左端点临界的幅值,保持水平状态向前传输。立体音频是Android应用层的调制结构,在SRC和HAL调制语音信道的带宽,增大传输带宽的占有量。使在两边能产生音质的共鸣,混音器的混音程度才能减至最低。

2 手机音乐播放器模块系统的设计

2.1 音乐播放器功能的设计

音乐播放器的主要功能设计包括暂停、停止、歌曲搜索、当前播放进度以及歌曲信息的查询等。其中曲目的搜索查询主要是为了能够满足用户能够在短时间内搜索到查询的曲目,在Android应用程序系统中,把嵌入式的设计结构与曲目的单字码片信息融合在一起。即在xml的后缀名中包含了曲目的关键信息,xml主要用于数据库信息的检索,只要在数据库内保存的数据,xml便能在短时内获取根源的有效性信息,xml系统还能完成对数据库的扩充,使数据逻辑结构都够完全映射到应用层,保证数据信息的独立性。按到播放器菜单单选钮的设计可分为3D交互的投影模式、列表水平模式、垂直模式以及按照信息量排版的模式,3D交互的投影模式是将节目信息以立体投影的方式展示给用户,再设计上采用了数轴的设计结构,包括X/Y/Z轴偏向角的设定,X轴与Y轴之间的偏向夹角为45度,Z轴所在的平面为向量X与向量Y的差乘。

2.2 音乐播放器功能时序图

音乐播放器的功能时序图是根据UML程序进行设定的,按照功能进程的顺序进行排序。当一种程序运行时,下一个程序的命令代码便会随机触动,使整个模块的交互集中在一个操作命令程序上(图1)。音乐播放器的时序图包括主页面运行程序的设定、播放音乐次数的设定、界面管理运行的设定、播放顺序程度的设定、画面转变模式的设定、数据信息切换模式的设定以及核心系统运行程序的设定。主页面运行在Android应用程序中完成数据信息的集成,将播放数据的列表集成在xml系统中,这样系统在读取数据信息时便会简化检索的范围。用户点击音乐模式,便会自动进入到播放列表中,最后切换到应用版块播放器上,播放点击的歌曲。

3 结语

通过对Android手机音乐播放器的设计与实现,用户可以根据自身的需要点击曲目,设定的界面流程可以对播放的曲目自动调整,并且还会获取终端设备有效性的数据信息。在时序图中按照操作流程顺序进行曲目的加载和删除,这种开发的应用平台解决了大部分操作流程。

【参考文献】

[1]赵国安,郁斌.基于Linux嵌入式原理与应用开发[Z].北京:清华大学出版社.2007,12(7):11-12.

[2]张东升,陈兴林.多任务技术在嵌入式系统中的应用[J].北京:机械工业出版社,2004,21(24):7-8.

[3]薛炯隽,周玲玲,唐卫国.使用UML的嵌入式软件系统需求描述[J].项目管理技术,2009(S1):467-471.

[4]余兰.浅谈如何利用均衡器来改善音质[J].技术与艺术,2007,41(18):15-17.

结构化程序设计范文5

关键词:认知教学;组织;粒化;因果;计算机程序设计

作者简介:彭珍(1981-),女,山东东明人,华北科技学院计算机学院,讲师。(北京 101601)吴立锋(1978-),男,河北隆尧人,首都师范大学信息工程学院,讲师。(北京100048)

基金项目:本文系华北科技学院教育科学研究2011年指导类课题“计算机程序设计课程教学方法的研究”、华北科技学院试题库项目“《C++与面向对象程序设计》试题库建设”、首都师范大学青年教师教学研究项目“以培养能力为核心的《ACCESS 数据库》课程教学方法的研究与探索”的研究成果。

中图分类号:G642     文献标识码:A     文章编号:1007-0079(2012)11-0059-02

目前已有的问题教学、[1]任务驱动教学、[2]案例教学、[3]引导教学等都侧重于教学形式与手段的变新与改革,[4]很少从教授内容的本质出发,研究教学内容的认知规律。为此,本文基于教学赖以存在和发展的认知机理,提出一种新的认知教学方法,条理地、逻辑地、系统地组织教学内容,符合学生学习思维的逻辑认知过程。

“程序设计”是计算机领域中一门重要的软件技术,是其他软件技术的基础。“程序设计”课程是伴随着计算机应用和程序设计语言的发展而发展起来的一门重要学科,已发展成为计算机专业中重要的专业必修课程,在高等教育中确立了不可缺少的公共基础课的地位。作为使用和开发计算机的重要工具,程序设计课程具备统一的抽象与规律。

本文将这种认知教学应用于“计算机程序设计”课程的教学过程中,有组织、有规律地将该课程的教学内容贯穿始终,为学生掌握程序设计方法、提高学生程序设计能力与逻辑思维能力打下坚实基础。

一、认知教学的概述

本文提出的认知教学是基于Zadeh的认知原理,Zadeh将人类的认知概括为:[5]组织(organization)、粒化(granulation)和因果(causation)。“组织”指从部分合并为整体,“粒化”指将整体分解为部分,“因果”指原因和结果的关联。前两者可看作互拟的过程,因果结构是一切知识的共性,它是对知识的一种本质抽象,因果有直接因果关系和间接因果关系,也有潜在因果关系和真实因果关系。所谓潜在因果关系是指一个具有普遍适应范围的概括性的因果规律,表示给定一定的条件,原因X的满足将引起结果Y的满足;而真实的因果关系则是在一个特定情形下实际发生的事实,即X和Y事实上发生了,而且是因果相关的。在知识表示的层次上,教师所研究的是潜在因果关系,真实因果关系可以看作是潜在因果关系在某一特定情形下的一个实例。人类认知事物是从事物的不同侧面、不同层次上认知事物的本质,将复杂的信息结构化(粒化),然后研究在不同结构层次上新事物具有的特性和不同侧面或层次上新事物特征之间的关系,进而从本质上全面认知事物。

认知教学,就是按照人类认知事物的规律进行教授知识,即将教学知识组织、粒化、因果化,从而使得学生抓住知识的本质、全面地掌握知识。这里,组织可以理解为对知识宏观的掌控,粒化是对知识微观的演化,因果则是知识之间的关联。因此,认知教学能够条理地、逻辑地、系统地组织教学内容,是一种符合学生学习逻辑认知过程的科学方法。

二、计算机程序设计课程

几乎所有高等学校的每个专业的学生都要学习诸如C、VB或VF语言这样的程序设计课程(必修课程),而且随着各具特色的高级程序设计语言(C++、Java等)及网页程序设计语言(JSP、等)的不断涌现,程序设计课程是高等教育中不可缺少的公共基础课,而且已成为计算机专业的一门独立必修专业课程。程序设计是大学生必备的一种计算机技能,更重要的是对其思维的特殊训练和对其智慧的重大挑战。

“计算机程序设计”课程主要是学习如何用某种计算机语言编写程序来解决问题。程序=数据结构+算法,所以程序设计的本质就是设计出合理的数据结构与算法。

根据软件工程理论,[6]程序设计大致可以分为结构化程序设计(Structured Programming,SP)、面向对象程序设计(Object-Oriented Programming,OOP)、面向数据结构的程序设计(Jackson System Development,JSP),国内主要用的是前两种程序设计方法。

同一类型的计算机程序设计有若干不同程序设计语言,同一类型的语言采用的数据结构大致相同,比如结构化程序设计语言采用的数据结构绝大多数是基本数据类型,还有其他构造类型如结构体等;面向对象程序设计语言主要采用的数据结构则是类,其中还涉及继承机制等。因此,程序设计课程首先介绍的都是数据结构,在程序中体现在数据的定义上。

算法的设计与具体问题有着密切的关系,但无外乎是对数据结构的操作,比如输入、计算与输出。其中计算最为复杂,可能是函数,或标准的表达式语句,或带有顺序、选择、循环结构的混合。因此,程序设计课程中的重点和难点都在算法部分。

三、认知教学在计算机程序设计课程中的应用

根据计算机程序设计课程的抽象特征,拟从以下几个方面将认知教学应用于计算机程序设计课程中。

按照数据结构+算法的思路将计算机程序设计教学知识合理组织在一起,形成程序设计知识的宏观体系结构;对宏观架构中的每一个知识点进行细化,即构建出每一知识点的微观结构;搭建宏观知识点之间、微观知识点之间以及相互的关联。

以“C程序设计”课程为例,[7]图1概括了C程序设计的所有知识点,形成了一个多层次、逐层深入的组织结构。每一层次可以看作其上层的粒化,每一层次与其上层和下层都有直接或间接的因果关系,同层次知识点之间也存在因果关系。比如定义数据、输入数据、计算数据和输出数据构成了程序的基本步骤,前一步是后一步的基础和条件;比如定义数据中的基本数组类型是所有定义的基础,为了存储多个有序数据(同一类型)形成了构造性数据即数组;为了存储不同类型的数据才有了构造型数据即结构体和共用体;为了便于表达更为复杂的数据结构及方便有效地使用数据提出了指针,所以在定义数据中各部分之间存在着关联。

最底层中的知识点还可以进一步深入细化。“C程序设计”课程中,有关数组的认知体系以包含10个整型数据的一维(10*10二维)数组、字符数组为例,如图2所示。数组认知按照数组的组成和编程的思路分别从纵向和横向展开。纵向坐标:一维数组、二维数组和字符数组,一维数组是二维与字符数组的基础,二维数组又是二维字符数组的基础;横向坐标:定义、输入、计算和输出数组。特别地,(一维)字符数组的输入/输出的因果关系来看,它采用类似于一维数组的输入/输出方法,将输入/输出格式中的%d改为%c,进一步可以简单地采用%s格式输入/输出(去除了循环结构),更进一步采用函数gets/puts调用来完成。

四、结束语

科学的教学方法应该遵循教学赖以存在和发展的认知机理和学生学习思维的逻辑认知过程,认知教学即从牢牢抓住教学本质出发,深化知识的组织、粒化与因果关系,将所有知识融为一体,尤其对于程序设计,这类逻辑性强的课程,该方法更适合。本文以“C程序设计”课程为例,阐述了认知的应用,并通过实际教学,验证了该方法的有效性。

参考文献:

[1]罗祖兵.教育学问题教学:涵义、价值与操作[J].高等教育研究,2010,31(3):71-75.

[2]王春婷.浅谈任务驱动教学法在计算机教学中的应用[J].太原大学教育学院学报,2011,(2):103-105.

[3]赵月坤,高常.案例教学法在数学教学实践中的应用[J].中国成人教育,2011,(15):162-163.

[4]陈越,何钦铭.计算机专业研究型课程教学模式与创新能力培养的探索[J].计算机教育,2009,(24):99-101.

[5]Zadeh L.Some reflections on soft computing,granular computing and their roles in the conception,design and utilization of information/intelligent systems[J].Soft Computing,1998,(2):23-25.

结构化程序设计范文6

关键词 高职教育 C语言 结构化编程 互联网

如何提高高职计算机类专业学生非图形模式下的结构化编程能力,是高职计算机教育中的一个普遍问题。作者通过三年的努力,对“C语言程序设计”课程在教学内容、教材建设、实训设计、网站建设和考核方式等诸多方面,进行了大胆的改革和探索,将电子教材、电子教案、学习论坛、编程工具、学习资料等,整合成为学习网站,在教学过程中通过论坛程序不同版本,实施案例驱动,课后通过QQ群进行辅导答疑,通过论坛、电子邮件进行作业提交批改,建立了基于案例驱动的结构化编程教学模式。本文具体论述了基于案例驱动的高职C语言结构化编程教学的过程和方法。

1 教学内容

在课程设计上,针对高职计算机专业学制短,技能要求高的特点,提出了“一条线两阶段,三结构四循环”的教学模式。

“一条线”是指在一年级的编程教学课中,贯彻C语言一条线。曾经有一种观点,认为高职计算机专业的编程语言教学,直接从面向对象语言开始学习,可以节约时间。但是,70%的企业依然要求学生具备面向过程的结构化编程能力。考虑到企业的需求,结合后续的课程安排,我们决定在一年级的课程安排上,贯彻C语言“一条线”,即在第一学期,开设“程序设计基础”,第二学期,开设面向过程的“C语言程序设计”。

“两阶段’指课程安排分为“程序设计基础”和“C语言程序设计”两个阶段。“程序设计基础”解决程序的基本结构,重点在建立学生的结构化程序的基本框架和概念;以C语言为基本语言,使学生能有实际操作的平台,但准确把握“把C语言作为伪语言”的原则,不让学生陷入C语言多变的泥淖,而把注意力放在结构化程序的基本结构上。“C语言程序设计”放在解决C语言的使用上,把握“C语言”是编程工具而不是研究对象的原则,根据企业的编程规范,对“C语言”进行简化,重点是如何使用C语言解决一般复杂程度的结构化编程问题。

“三结构”是指在一年的学习中,学生要学习三个成绩管理软件的编程,分别是基于一维数组、二维数组和动态结构数组。从企业实际应用来看,动态空间的使用,可以用动态数组解决。因此我们去掉了链表,重点是让学生写出有工程实际意义的结构化程序。

“四循环”是指编写基于“三结构”的每一个成绩管理软件过程中,教师四个以上的程序版本,引导学生改写、增加函数,让学生直观地看到软件的功能是如何一步一步构建起来的。

结构化程序设计的教学中,如何让学生建立起结构化程序的框架是很困难的。一个简单的成绩管理软件,代码就超过300行。对初学者来说,看懂超过100行的程序就需要很长时间,学生又如何能在短短的课堂时间里通过增加/改写函数来增加功能呢?这也就是很多学生学完了C语言程序设计,依然不能编写一个简单的应用程序的主要原因。我们发现通过论坛程序版本,利用工具软件BeyondCompare,比较不同的程序版本之间的差异,可以让学生直观地看到软件的功能是如何一步一步构建起来的,如图1所示。程序的第一个版本,就是一个主函数,不超过10行,只显示程序的几项功能菜单,学生很容易理解,然后通过第二个、第三个版本,每一个版本实现或改进一个菜单的功能,直到最后版本。

通过图1,我们可以看到程序功能的增加是由哪些代码实现的,而通过不断反复的比较,学生就可以掌握结构化程序设计的过程和方法。

在教学过程中,通过比较版本,让学生直观地看到复杂的程序功能是如何由简单的函数一个一个构成的。学生经过“程序设计基础”的课程设计,基本掌握主函数与模块函数的作用和相互关系,可以看懂超过100行的C语言源程序,理解基于一维数组的成绩管理系统;在“C语言程序设计”的课程设计中,学生对主函数与模块函数的理解更加深入,可以看懂超过300行的C语言源程序,理解基于动态结构数组的成绩管理系统,掌握主函数的设计方法,并按照规范的格式写出自己的函数。回想三年前,因为没有采用这种方法,只要是超过20行的程序,学生就普遍反映看不懂。由此可见,采用新的方法后,学生编程能力的提高十分明显。

2 教材建设

2004年9月清华大学出版社出版了作者主编的21世纪高职高专规划教材《程序设计基础》,教材主要在三个方面进行了改革。

(1)强调把生活中的问题转化为程序的能力,使学生真正能够编写实用的程序

在教材编写思想上,重点放在培养学生把生活中的问题转变成为程序并进行处理的能力,强调转变讲授思路,推行引导学生首先想清楚“我要做什么?”,然后才教给学生“如何做”,最后上机进行验证的三步教学法。

在教材的编写风格上,对全书所有的例题进行了通盘的考虑,在循环、数组、函数和结构化设计等单元,所有的例子都有前后的联系,强调内容的前后衔接,特别注意工程规范的引入,在变量的命名、程序格式方面,均按工程要求进行。在案例选择上,全部采用工程实际和实际生活中的案例。

(2)提出了以“三大区域”为特色的c程序的基本框架

通过把一个基本的C程序从上到下分成预处理区、变量声明区、执行语句区“三大区域”为特色的C程序的基本框架,让学生树立正确的程序格式与规范。“三大区域”概念的提出,明确规定了程序的基本框架,让学生从一开始就按固定的格式进行编程,养成良好的编程习惯。

(3)提出了使用函数的“三大步九要素”的基本方法,建立使用函数的清晰框架

我们提出的使用函数的“三大步九要素”的基本方法,在教学中取得了很好的效果。

所谓“三大步”,是指我们在使用自定义的函数时,对函数进行声明、定义和调用。三大步按顺序进行。

所谓“九要素”,是分别指函数声明、定义、调用各有三要素共九点:函数声明的三要素:返回值的类型、函数的名字、形式参数。函数定义的三要素:形式参数、功能、返回值。函数调用的三要素:名字、实际参数、返回值。通过对“九要素”的理解掌握,学生能够建立起使用函数的清晰框架。

3 实训设计

对高职学小的技能培养,实训是很重要的环节。我们采用了项目驱动的思想来设计实训项目,每一单元的实训,都是构成最终程序的不同版本,在“程序设计基础”头程序版本8个,“C语言程序设计”共程序版本10个,构成了实用的软件框架,学生相当于参与了一个中等复杂程度的软件开发,积累了经验。在今后的实际工作中,完全可以以此为模板,进行结构化程序的开发。

4 网站建设

利用互联网技术,建立基于互联网的学习资源。2003年建立了“光华之窗”教学网站,在网站平台上,将电子教材、电子教案、学习论坛,编程工具、学习资料等,整合成为学习网站,设计了“程序设计基础”、“C语言程序设计”教学论坛,两年来积累了完整的教学过程资料。可以说,网站的建设和运行,为课程的质量提供了保证,避免了“课随老师走”的问题。

5 考核方式

结构化程序设计范文7

论文摘要:该文分析了程序设计在计算机学科中的地位以及程序设计有关的知识和能力构成,结合自己多年的计算机专业教学实践,探讨了在计算机教学中培养学生程序设计能力的有效策略。

计算机科学是一种创造性思维活动,其教育必须面向设计。计算机的本质是“程序的机器”, 只有懂得程序设计,才能懂得计算机,真正了解计算机是怎样工作的。培养学生程序设计能力对计算机专业的学生来说不仅是培养职业技能的需要,也是培养大学生创造性思维的重要途径。学习程序设计语言可以培养学生运用算法来解决实际问题的能力,这种解决问题的方式是计算机所独有的,也只有通过对计算机的程序设计语言和程序设计方法的学习才有可能获得这种解决问题的能力。

1 程序设计在计算机学科中的地位

程序设计是利用某种计算机语言,编制完成某一特定功能的程序的过程,是涉及描述、开发及有效实现求解的一系列活动,是利用计算机实现自动化的重要手段。

计算机学科主要是系统地研究信息描述和变换的算法过程,包括它们的理论、分析、设计、效率、实现和应用。可以这样说,一切算法的基本问题是“什么能被自动化”以及“如何有效地自动化”。这个自动化的过程就是程序设计的过程。

程序设计语言是人们学习计算机的最基本的工具,也是人们学习计算机基础与应用知识的基本课程。通过学习,使学生掌握程序设计的基本概念、基本知识和基本方法,养成良好的程序设计风格,得到一定的程序设计训练,具备初步编写程序解决实际问题的能力。程序设计也正是有形表达抽象思维的方法,在程序设计过程中贯穿阅读判断、分析思考、工具利用、抽象表达、综合创造等多项技能,是理论、抽象、设计和应用的综合能力培养过程。因此程序设计是计算机学科教学的重要内容之一,对计算机专业人才素质的培养至关重要。

2 程序设计的知识和能力构成

根据循序渐进的原则,与程序设计有关的教学内容主要有:计算机基础知识和操作、程序设计语言和基本的程序设计方法、最基本的数据结构及其基本算法、常用的算法设计方法等。在学习这些知识的同时,必须与能力的训练有机地结合起来。程序设计能力表现在以下几个方面:

1)自然语言能力。要有较强的运用自然语言描述现实事物的能力,只有运用背景知识正确且清晰地陈述问题及其求解目标,才能确定程序的功能。

2)数学描述能力。程序设计是为了告诉计算机做什么和如何做。这就需要利用定义、定理、公式、函数等数学工具把问题形式化,建立数学模型。

3)数据结构设计能力。选择合理的存储结构,在计算机中表示数学模型,是程序设计的一个重要方面。

4)算法构造能力。好的程序由精心构造的、好的算法构成。给出问题求解的离散化计算过程,是程序设计中最具有创造性的工作。

5)程序编码能力。用某种程序设计语言表达算法,尽管这种能力往往被认为技术含量不高,但也需要对程序设计语言的熟练掌握和对算法设计的深刻理解。

6)程序调试能力。程序调试能力是一种专业综合技能,需要对程序设计语言和程序结构有深刻的理解,需要熟练的操作技能,需要会设置测试数据和设置程序断点,这些都有待于学生在实践中逐步积累经验。

可以说,程序设计能力的高低很大程度上反映在驾驭自然语言、数学语言和计算机语言的能力上。这3种语言是人们毕生有用的3种通用智能工具。前两者是后者的基础,良好的英语和数学训练是学好程序设计语言和培养程序设计能力的重要基础。

3 培养程序设计能力的有效策略

知识的价值在于运用,知识的运用需要技能,而技能的形成则依赖训练。程序设计知识的学习和能力的培养需要各方面的知识基础,它是一个系统的教育训练过程,需要多个教学环节的紧密配合才能完成。

1)明确教学要求

程序设计语言课程一般是为应用性教学而设置的,因此,课程的教学不仅仅是传授知识,而且应该强调应用性,应该以培养学生的能力为主。程序设计语言的内容比较丰富,在教学中如果面面俱到,必会耗费较多课时,而且教学效果不一定好。因为过分强调程序设计语言的系统性和完整性就可能会转移学生对课程重点的注意力,关键在于教会学生如何正确运用程序设计语言编写程序,训练实用编程能力。所以必须突出重点,突出应用性,侧重教思想,即把程序设计语言的基本思想、基本环境、基本概念、基本知识和基本方法教给学生,使他们在学习中对硬件、软件环境、程序设计的基本思想和基本技巧,所学程序设计语言的基本概念和使用方法以及编程技术有一个比较全面的感性认识,从而提高解决实际问题的能力。

2)打好数学基础。严格的数学训练是程序设计能力的基础,学习和加强排列与组合、数列、数学归纳法等离散系统的数学方法对提高程序设计能力尤为重要。问题描述和建立数学模型是程序设计的前奏,数学归纳法、穷举法、构造证明法等证明技巧是算法设计方法的基础。

3)强化英语水平。程序设计语言的符号系统以英语为基础,程序设计文档语言首选英语。英文资料是计算机最新和最大的技术资料来源,英语水平是我国软件产业发展和参与国际竞争的制约因素。

4)重视阅读训练。从某种意义上来说,程序设计是用程序设计语言和方法进行的一种写作。可以想象,如果学生没有阅读过一份完整、规范、有实用价值的标准程序,即使记住了有关语言的语法规则,也不可能写出像样的程序。所以,大量阅读、分析、修改和扩充典型的算法和程序,是提高程序写作能力的有效途径。而这个重要学习环节往往未得到应有的重视,缺乏配套的程序设计阅读分析教材。教师应经常指导学生阅读程序,理解程序,提高学生分析程序的能力。

5)注重算法设计,突出数据结构内容。瑞士科学家、PASCAL语言和MODULA-2语言的发明者沃思(Wirth)教授提出了著名的公式:程序=算法+数据结构。这个公式表达了程序的实质,说明对于一个程序设计问题来讲,算法与程序设计是紧密联系的,绝不能脱离数据结构去讲解算法设计。程序设计语言的教学应该结合数据结构的基本内容。对于同一个计算问题,选用不同的数据结构,其算法大不一样,算法的优劣程度也不同。因此,要教会学生对不同的问题选择合适的数据结构。在整个程序设计课程中,必须强调算法设计方法,通过不断的算法设计训练,使学生切实掌握迭代、枚举、递归、分类等常用算法设计方法。

6)更新教学内容。计算机学科是一门综合性学科,而且程序设计语言的应用领域在不断扩大和发展。因此,在教学中应结合专业的特点和教学的要求,将软件工程的思想方法贯穿于整个教学过程,介绍程序设计语言的最新发展和应用,重视面向对象程序设计方法的引入,搞好教材内容的更新。如图形程序设计、下拉式或弹出式菜单、计算机病毒防治等等。这样不仅能把最新的知识和最新发展动态充实到教学上来,大大丰富了教学内容,而且使学生加深对程序设计语言的理解和掌握,保持对信息技术和专业的兴趣,及时跟上信息技术日新月异的发展趋势,在今后工作中保持领先地位。

7)采用先进教学手段。用传统的课堂教学方法讲授动态的算法和数据结构是十分低效的,像排序、递归等抽象动态的内容讲解就常常是费力不讨好。应该根据课程特点,采用先进的现代教学方法,如直观教学方法:利用挂图、教具等讲解,以及计算机辅助教学(CAI)和计算机辅助学习(Computer Aided Learning,简称CAL)进行教学,通常开发利用与课程内容与教学特点相适应的多媒体课件进行教学。它们是讲解算法和进行程序设计训练的最佳教学平台,既能增加学习的趣味性,又可利用图形的直观性帮助抽象和动态过程的理解。

8)加强实践环节,强化创造性思维能力培养。在教学中,常常听到学生提出这样的问题:“程序设计语言有什么用?”,有的学生还反映:“程序设计语言并不难学,就是不知道如何应用?”一些学生学到了一定的科学知识,但上机动手水平低。这种现象与普遍忽视实践环节有关。为了扭转这一局面,在整个教学过程中,必须强调实践环节的重要性,充分安排上机实践时间,加强系统训练和实践能力的培养,强化创造性思维能力培养。根据课程特点,在教学中,采用案例驱动教学,进行兴趣引导;在实践中,可以精心组织一系列由易到难、由浅入深、配套衔接、结合学科学习、有一定设计技巧的程序设计作业,最后再安排一次综合性强、有一定难度的课程设计实践,对学生进行项目训练,提高学生应用能力。通过上机作业和课程设计的完成,使学生独立思考,各显才干,总结经验,培养他们的动手能力和编程能力,以及分析问题和解决问题的能力。

4 结论

总之,培养学生计算机程序设计能力的方法和途径很多,但是编程序不难,编好程序不易。作为教师,必须从培养学生编程思维的角度出发,按照以上策略认真进行编程知识的教学和技能的培养,加强实践,提高学生科学思维的能力,真正学会程序设计的真本领。

参考文献:

[1] ,王楠.浅谈程序设计语言课程教学方法[J].吉林大学学报(信息科学版),2005(S2).

[2] 徐进华.提高学生程序设计能力的几个措施[J].计算机时代,2005(11).

[3] 李凌.浅谈高级语言程序设计课堂教学方法[J].淮北职业技术学院学报,2005(04).

结构化程序设计范文8

关键字:“提问-引导-探究性” 程序设计 循环语句 网络教学资源 程序优化

一 引言

(一)问题的提出

由于学生刚接触程序设计,很难把数学知识融入到循环结构的运用中,通常在学习中对书本上提供的程序容易理解,但只要把条件和要求略加变更或者在独立解决一些实际问题,这时学生表现为应变能力低,编程实现也就有点困难。

(二)解决问题的思路

思维是活跃的,程序是变化的,程序设计不能僵化于一种讲授模式,重在“启发引导”,就是呈现层次分明的“提问”内容,再结合问题的具体实际,因势利导,最终“引导”学生自己来“探究”完成任务。实践证明,充分运用“提问-引导-探究性”教学模式来加强程序设计教学中的引导,是提高程序设计能力与解决实际问题的应变能力的有效途径。

二 实践

在课程改革和信息技术与学科课堂整合的今天,教师是教学资源的提供者、研究探索的引导者。除了引导式的展示不同阶段学生思考的不同问题、提供必要的多媒体信息资源之外,还要指导学生依托信息技术所提供的丰富网络教学资源进行研究、讨论和发表见解的,拓展式、开放性的学习。在循环结构的教学中,我充分运用“提问-引导-探究性”的教学模式,循序渐进地提出层次性的问题,从而实现引导变通,这时,师生一起进入"聊天室"进行知识问答、交流谈心、专题探讨等活动(这种聊天式的讨论本身就是一种学习活动)。学生在交流探讨的过程中发展思维,学习新知,培养技能,提高汉字输入速度。具体实施如下:

(一)改变语句中的变量,加强语句的理解与应用

在程序设计的初始阶段,学生对某些语句的功能还不甚了解的实际,求和求积等基本问题入手,在及时纠正初编程序时所出现的语法错误和逻辑错误的基础上,引导对已编程序的某些语句或语句中的某些变量作力所能及的变通,以加强对语句的理解与应用的基本功。

呈现“求S=1+2+…+50”的例子:

Program cbh1;

var

t,s:integer;

Begin

s:=0;

for t:=1 to 50 do

s:=s+t;

writeln('S=',s);

readln

End.

要求学生关注以下三个问题:

1、循环中的循环变量是什么,其初值、终值分别为多少?

2、放累加和的变量是什么?每次的累加项是什么?

3、请注意累加项和累加和的值是如何变化的。

学生上机调试、分组讨论、结合网络资源,师生问答等方式来完成。学生解答这三个问题的过程,其实是对所学的变量、循环等概念的进一步理解、说明和归纳的思维过程。但并不意味着学生对程序的每个语句的功能清楚了。为了加深对赋值语句和循环语句的执行过程的理解,在这一简单程序基础上可引导学生做以下变化练习:

1、S =1+1/2+1/3+……+1/50

2、S =20 +21 +22 +……+210

3、S =1×2+2×3+3×4+……+99×100

4、S =10!=10*9*8*……*2*1

这种一题多变,一例多用的练习使学生从单纯的模仿阶段,通过自己的观察、对比、联系和想象,过渡到独立应用所学的概念和规则,灵活地、举一反三地、独创性解决问题,锻炼了学生思维能力,使其在思维的灵活性、批判性、深刻性、创新性方面都有所提高。通过以上一系列角度不同的变通,学生对每一个语句的认识深刻了,对语句中每一个变量的确定谨慎了。

引导对语句变量的改变,必须目的明确,同时,变化还要注意控制难度,先易后难,逐步深入,把引导与示范,引导与评价,引导与纠错有机结合起来。

(二)采用不同的程序设计方法,进一步认识语句与程序结构

循环结构的理解与运用是程序设计的基础,因此在学完循环基本结构的三种语句(for/repeat……until/while)后,为了加深对三种语句的理解,做到灵活应用,在处理程序设计时引导学生采用不同的方法进行设计,加强横向联系,启发学生自己进行总结,达到理想的教学效果。

呈现 “N!=1*2*3*……*10”例子:

先采用for语句设计发如下:

Program cbh2;

var

i,n:longint;

Begin

n:=1;

for i:=1 to 10do

n:=n*i;

witeln(n,'!=',n);

readln

End.

提出使用其它两种循环结构应该怎样设计?

学生经过探究、分组讨论、聊天室交流、程序调试、师生总结如下程序:

Program cbh2_1;

var

i,n:longint;

Begin

n:=1;i:=1;

repeat

n:=n*i;

i:=i+1;

until i>10;

writeln(n,'!=',n);

readln;

End.

Program cbh2_2;

var

i,n:longint;

Begin

n:=1;i:=1;

while i

begin

n:=n*i;

i:=i+1;

end;

writeln(n,'!=',n);

readln;

End.

然后引导学生对三个程序进行比较,得出决定循环终止的条件是布尔表达式,同时得出不同循环结构的布尔表达式关系。

又呈现“求出下式中n的最大值:s=12+22+32……+n2

先向学生提问:用什么循环语句来设计程序?

通过讨论,学生自己得出结论:

1、用for语句无法设计;

2、只能使用repeat……until与while两种循环设计;

3、同时再次对repeat……until和while 两种循环中的布尔表达式之间的关系有进一步的认识;

正确的程序如下:

Program cbh3_1;

var

n,s:integer;

Begin

s:=0;n:=1;

repeat

s:=s+n*n;

n:=n+1;

until s>=500;

n:=n-2;

writeln('n=',n);

readln;

End.

Program cbh3_2;

var

n,s:integer;

Begin

s:=0;n:=1;

while s

begin

s:=s+n*n;

n:=n+2;

end;

n:=n-1;

writeln('n=',n);

readln;

End.

最后小组得出结论:三种语句实现循环结构,即for语句,while语句和repeat……until语句, 对于能确定循环次数且可利用一个简单循环控制变量(只能使用顺序类型数据)时,使用for语句最合适了;对于循环次数不能预先确定,宜使用while或repeat……until语句,但while 语句适用于有可能根据条件判断使其成为空语句的情况,而repeat……until 语句适用于不论什么条件至少要执行一次循环体的情况。

通过如此的引导,使学生对循环结构的三条语句使用得心应手,在编程过程中能够灵活应用;同时也培养了学生发散性思维。

(三)改变程序结构,达到程序优化

在掌握了基本语句的准确使用与简单程序编写的要领之后,要引导学生从“按步思维到灵活思维”的转变,注意从程序的结构与设计思路上考虑变通,培养结构化和优化的意识,迅速提高编程能力。

一个程序设计出来了,不能满足于没有语法错误,能上机通过等起码要求,有必要引导学生从以下几个方面作一些深层次的思考:

1、程序的结构是否合理?

2、程序的设计思路是否清晰?

3、程序占用的机器空间与时间是否合适?

4、能不能作进一步的优化?

呈现“S =1-1/2+1/3-1/4+……+1/99-1/100”例子。

表达式中各项正负相间,基本的设计思路是把右边表达式分成正与负两组考虑,可以用两组双重循环来实现,这样做,思路显然比较简单但程序的编码较多,结构也显复杂。能不能把两组双重循环简化为一组单重循环来实现呢?可引导学生使用一个符号变量f解决正负符号相间,设计出结构非常简明的程序:

program cbh4;

var

n,f,t:integer;

s:real;

begin

s:=0;t:=1; f:=1;n:=1;

while n

begin

s:=s+t;

n:=n+1;

f:=-f;

t:=f/n;

end;

writeln('s=',s:10:8);

readln

end.

运行此程序会发现结果为1,为什么?引导学生自己分析,寻找原因,最后学生发现:感觉从第2项开始就没有参与运算,由于程序的说明部分,t是整型数,t无法等与一个分式的值(实型),始终为0。改程序的说明部分中的n为实型数即可。

这一设计打破了原来的正负分组的模式,从而优化了程序。

从设计思路,引导学生程序结构上变通,目的是培养程序的优化意识,寻求程序的优化途径,通过变通,具体建立程序的可读性比较,运行时间与占用空间的比较,结构化比较等优化概念,自然,对程序结构的变通较之前面对程序中某些语句某些变量的变通要深一个层次,要求更高,涉及面更广,因此,在变通的引导上要做到具体、细致,切忌简单了事,操之过急。

(四)构造合理算法,提高编程解决实际问题的能力。

算法是程序设计的依据。确定合理的算法是编程解决实际问题的前提与关键。引导对算法的变通,包括递归、搜索、迭代、递推、模拟等基本算法的改造,传统算法的推陈出新,必须紧密联系具体问题的实际。

呈现“一个整数的每位数字都是1,至少多少位才能使这个数被13整除呢?”例子。

这是一个有趣的实际问题,一般考虑的,无非是整除,一个个进行试商检验是基本的算法,一些学生往往“跃跃欲试”地编出程序:

Program cbh5;

Var

a,i:integer;

Begin

a:=0;i:=0;

repeat

i:=i+1;

a:=a*10+1;

until a mod 13=0;

writeln('i=',i);

readln

End.

在程序调试运行受阻之后,就要启发学生分析算法上的问题:当a的位数超过定义的整型数范围后,程序出错,然后引导学生思考:如果不用计算机,怎么求解?让学生在写出几步整数除法的竖式的基础上进行模拟寻求模拟变量(被除数、余数、商)建立模拟循环,从而设计出简练可行的程序:

Program cbh6;

var

b,i,a:integer;

Begin

b:=111,i:=3;

repeat

i:=i+1;

a:=(b*10+1) p 13;

b:=b*10+1-13*a;

until b=0;

writeln('i=',i);

readln

End.

由于以上程序中每次作整除运算所得的余数b要小于13,因此下一次的被除数B*10+1(体现增加一个“1”)不超出整数的范围,可确保整除的实现。可见, 算法的变通,有时直接关系到程序设计的成败。

三 总结

所谓“提问-引导-探究性”教学模式,就是以提问为前提,引导为路径,探究为目的的教学。具体说它是指教学过程是以教师精心设计的问题为前提,在教师的启发诱导下,以学生独立自主学习和合作讨论为前提,以现行教材为基本探究内容,以学生周围世界和生活实际为参照对象,为学生提供充分自由表达、质疑、探究、讨论问题的机会,让学生通过个人、小组、集体等多种解难释疑尝试活动,将自己所学知识应用于解决实际问题的一种教学形式。

把“提问-引导-探究性”教学模式应用于程序设计的教学中,实施引导变通程序设计,课堂教学气氛活跃,教师和学生双方都参与活动,他们都将以导师和主人的双重身份进人课堂、辩谬纠错、比较鉴别、层次分明、思维灵活,可以在提高程序设计能力,增强程序优化意识上收到良好成效。

程序设计中“提问-引导-探究性”教学模式,究竟在哪几个问题上“设疑”,如何去“设疑引导”,本身就是“应变”的,并没有一成不变的模式可套,必须因课制宜,因题制宜,因不同专业特点和学生实际而异。“辩疑解难”的实施,关键在引导,切忌想当然,脱离实际,强加于人,代替学生去完成变通,最后进行“释疑巩固”,同时注意,“设疑”应有梯度,有针对性,不能面面俱到,贪广求深,欲速不达。

参考文献:

[1] 周春荔. 数学观与方法论. 北京:首都师范大学出版社,1996

[2]何克抗.网络教学结构与网络教学模式探讨.教育技术通讯.

[3]高文主编.现代教学的模式化研究.山东教育出版社,2000

结构化程序设计范文9

关键词:程序设计基础;数据结构;计算思维;教学衔接

0、引言

程序设计基础与数据结构是计算机类专业的两门专业基础课,在计算机类专业教学中具有举足轻重的作用,都旨在培养学生的编程能力和计算思维能力,并为后续课程打下坚实的专业基础,但在这两门课程的教学过程中,存在一系列问题,严重影响课程的教学效果。笔者分析和研究产生这些实际问题的原因,对这两门课程的知识融合、内容衔接以及教学实践等进行探讨,提出切实可行的解决方案,更好地实现两门课程的教学目标。

1、课程教学内容和教学目标

程序设计基础课程是学生接触的第一门专业基础课,也是进行计算机编程的入门课程。课程的教学目标是使学生掌握程序设计的基本方法,培养其拥有良好的程序设计风格、较强的软件开发能力以及一定的计算思维能力,为后续课程打下良好的基础。

数据结构是继程序设计基础课程之后的一门综合专业基础课,是计算机类专业的核心课程之一,具有举足轻重的作用。它是程序设计基础课程所讲知识的自然延伸和具体应用。对数据结构的理解、掌握和应用拓展,将对学生解决具体实际问题时的数据分析、数据组织、数据处理和编程能力有着深远的影响。课程的教学目标是培养学生缜密的逻辑思维和数据抽象能力以及学生在软件设计领域中科学的计算思维能力,帮助学生将数据结构和算法与具体的编程实现相结合并灵活地应用到实践和工程实际中。

2、两门课程间的关系

从程序与数据结构本身的关系来说,一个好的程序离不开合适的数据结构,而数据结构中算法的实现离不开具体的程序设计。在计算机类专业的课程体系中,数据结构和程序设计基础课程虽然独立开设,但是它们之间的联系是紧密的。在课程设置上,程序设计基础是数据结构的前导课程,两门课程一脉相承,不可分割。

学生对程序设计基础课程的掌握程度、具备的计算思维和编程能力,直接关系到以程序设计语言实现算法的数据结构课程的教学效果。数据结构课程通过创造性思维的训练,重点突出数据抽象与程序抽象能力的培养,从而进一步提升学生的计算思维能力和编程能力,但两门课程在实际教学中存在一些问题,主要原因是课程设置、教学内容、教学方法和教学实践方式等多方面存在缺陷。经分析,对程序设计基础和数据结构课程进行知识整合和内容衔接,采用适当的教学方式,改进教学实践是探讨和研究的主要内容。

3、两门课程在实际教学中存在的衔接问题

3.1 两门课程教学内容的脱离

目前,在实际教学中,程序设计基础和数据结构课程虽然关系紧密,但是一直被设定为两门完全独立的课程,而且教师在制订教学大纲和教学目标时容易忽视两门课程问的联系,在教学过程中出现一些盲区,要么两门课程在教学内容上出现不同程度的交叉,要么出现知识衔接的断层,令学生对两门课程的内在联系没有整体概念和认识,从而导致不能深入系统地学习相关知识。尤其是先行课程序设计基础的教学内容和课程案例完全脱离了数据结构课程,使数据结构中最频繁使用的知识和内容在程序设计基础课程中甚少提及,不能为数据结构课程的讲解打下扎实的程序设计基础。

3.2 程序设计编程语言与数据结构实现语言不一致

程序设计基础课程所教授的编程语言与数据结构教材或实验所使用的实现语言不一致,如将C++语言作为程序设计基础的教授语言,而在数据结构的实现上选择c语言或Java语言,以至于数据结构的理论教学与具体上机编程实现脱节,严重影响了上机实验和课程设计环节。

3.3 程序设计方法与数据结构实现方法不一致

程序设计基础课程中或注重面向过程的程序设计方法,或注重面向对象的程序设计方法,但在数据结构课程中却很难利用前导课程中学到的程序设计方法实现相关的数据结构和算法,从而影响了学生对数据结构课程知识的应用与实现。另一方面,学生在学习过程中没有充分理解数据结构课程的作用和实际意义,以至于在实际项目和问题中不知使用什么方法(面向过程或面向对象)分析解决问题,不知如何运用数据结构知识解决实际问题。

3.4 前导课程对后续课程实践环节的影响

数据结构实验环节相对课堂理论环节较薄弱。此问题的存在多半是因为数据结构具体实现的关键技术在程序设计基础课中未被讲解或强调,在进行数据结构算法从理论到伪代码、再由伪代码到真代码转换的过程中难以真正编程实现,使学生对数据结构的理解和掌握仅停留在抽象层、概念层、理论层,难以上升到实现层,从而影响学生的学习兴趣和积极性。同时,课程中的实践项目过于单一且相对独立,使实践环节与实际项目的联系过于松散,学生运用所学知识解决实际问题的能力和实际工程能力很难得以锻炼。

3.5 缺少计算思维能力的培养,缺乏理论知识与实际应用的联系

提高学生计算思维能力是程序设计基础和数据结构课程共同的目标。计算思维是抽象的多个层次上的思维,而抽象是表达实际的方法。然而,现行教学方法过多关注程序设计和数据结构知识点的讲解,缺乏对学生思维能力的培养。

如果缺乏理论联系实际,那么将影响学生计算思维的培养。数据结构中的知识又太抽象,如果缺乏相应的实际案例对抽象知识加以应用,那么就会导致学生不知道怎样将所学的知识应用到实际中,缺乏具体问题具体分析和解决的能力。

3.6 教师本身知识结构欠缺,上机实践指导教师数量不足

授课教师知识结构的缺乏将导致一些现实问题:如果程序设计基础的教师不懂数据结构,那么其自然不会将相关知识引入课堂,同时也缺乏用所教授的语言具体实现数据结构中结构和算法的能力;如果数据结构的教师缺乏相关编程语言知识,那么就会给上机辅导带来困难。同时,两门课程具有很强的实践性,若上机实践辅导教师不足,将不利于学生编程能力的提升以及相关软件大赛学生的培养和辅导。

针对以上实际教学中存在的问题,可知为提高程序设计基础与数据结构课程的教学效果,根据计算机类专业这两门课程教学内容和目标,对两门课程进行知识整合和内容衔接的必要性,对课程衔接的方法和思路等进行探讨势在必行。同时,课程教学不仅要关注知识的传授,还要培养学生主动获取知识并综合已有知识创造新知识的能力。

4、程序设计基础和数据结构课程衔接的新方法和思路

4.1 做好两门课程教学内容的融合和衔接

教师需紧密结合计算机类专业的培养目标,精心设计程序设计基础和数据结构课程的教学内容,既要满足课程的专业基础性,又要满足后续课程学习的需要,严密制订教学大纲,做好程序设计基础与数据结构教学内容的衔接以及相关教材的选定。

在程序设计基础课程教学中,教师需要关注学生计算思维能力的培养,将重点放在讲解思路上,教学生如何对问题进行抽象,还要介绍一些简单的基础算法和数据结构。程序设计与数据结构的联系过程必须做到循序渐进,若引入的数据结构相关知识过难,会打击学生的学习积极性。例如,教师讲数组时可引入几种数据结构中简单的排序算法冒泡排序、选择排序等;讲完指针和结构体后可引入最基本的数据结构――链表;讲完嵌套函数调用后可引入“递归”,它是数据结构中解决问题的常见思想和算法,可以通过简单的递归函数帮助学生理解递归思想和递归调用过程,这些是理解数据结构中复杂递归函数的基础。在程序设计基础教学中,只讲递归函数的简单应用,而在数据结构教学中,需要介绍递归函数的复杂应用:栈、树、八皇后问题、N个数的全排列等。围绕“递归”这一重要知识点,从易到难并结合课程本身特点进行理论分析,将有益于整合课程教学内容,引导学生循序渐进地学习和思考。

针对在程序设计基础课程中不重要但在数据结构及算法中被广泛使用的知识点,教师需要在讲解程序设计课程时将其点出并告诉学生此知识在后续数据结构课中的重要性,引起学生对该知识点的兴趣和重视,如指针的灵活使用、结构体类型的复杂应用、类型重命名、类的拷贝构造函数(深拷贝)、函数模板、类模版等。

同时,教师要对程序设计基础课程内容进行适当补充和扩充,如增加c++函数模板、类模板的相关知识,为将泛型程序设计、c++的STL引人数据结构课程奠定知识基础,缩小教学知识与实际运用的距离,提高学生的动手编程能力和知识运用能力。

4.2 保证程序设计编程语言与数据结构实现语言的一致

程序设计基础课程所教授的编程语言要与数据结构教材或实验所使用的编程语言一致,这样不仅能大大提高学生的编程能力,还有利于数据结构课程的上机实现。

4.3 将面向对象思想引入程序设计与数据结构中

随着程序设计方法从传统的结构化程序设计演化到面向对象程序设计,数据结构在面向对象程序设计中也将成为面向对象的数据结构,且将随着程序设计理论和技术的发展而不断变化发展。在程序设计基础课程中讲授面向对象的编程语言如c++语言,既可以实现面向过程的数据结构,又能实现面向对象的数据结构。数据结构课程采用面向对象的观点讲授并以C++语言作为算法的描述工具,从而强化数据结构基本知识和面向对象高级程序设计基本能力的双基训练以及实际动手能力培养。在设计数据结构实践项目时,将面向对象的程序设计思想、面向对象的程序设计语言和数据结构课程教学内容恰当地融合,有效整合两门课程中的重叠部分,突出各自的侧重点,符合当前软件设计思想和软件开发趋势。

4.4 加强课程中计算思维能力的培养

在程序设计和数据结构的教学方法上,将面向语法为中心的教学逐渐转变为面向问题求解的教学,从问题出发采用适当的数据结构,将其抽象成解决问题的算法描述,用程序设计语言实现问题求解,使课程从过去的仅讲授孤立的知识点,转变为讲授计算思维和问题求解的过程,从而达到突出思维方法训练的目的。在程序设计基础和数据结构授课时尽量将理论联系实际,将知识点解释和应用为身边容易理解的真实案例。例如,讲“图”时,可以把现在流行的复杂网络、社交网络引入其中;讲解“队列”时,可将春节买票引入其中,让学生从身边的例子理解理论知识的具体应用。对有些案例可以提倡“一题多解”,不局限于一种数据结构、解题思路和实现方法,通过一题多问、一题多解带动学生探索、比较、寻求更好的解决途径,达到学生分析解决问题能力的提高和计算思维能力的培养。

4.5 提升教师能力,配备充足的上机辅导教师

学校要加强程序设计基础与数据结构课程相关授课教师整体能力的提升。教师不仅要掌握自己所教授课程的知识,还要对该课程的前续及后续课程内容有所了解,便于维护教学的整体秩序和融合学生的知识体系。同时,教师要积极参与各种软件大赛和企业培训,将教授的理论知识和实际项目相结合,达到应用知识解决复杂问题的目的。此外,两门课程的上机实践环节要配备足量的辅导教师,不让学生输在编程入门的起跑线上。

4.6 依托程序设计竞赛,提高学生的编程能力

依托全国软件大赛、ACM大赛等程序设计竞赛,将竞赛题目引入程序设计基础和数据结构课堂中。此类题目强调考查学生对各种算法的应用能力,综合性较强,非常适合辅助学生学习和体会数据结构的妙用,提升学生分析和解决实际问题的能力,引导学生将所学知识准确而灵活地运用到实际生活中,大大提高学生的实践动手和程序设计能力,促进其知识的融会贯通。另外,通过竞赛等多种活动可以为学生提供展现程序设计能力的舞台,激发学生学习的主动性,培养其计算思维能力。

例如,在教授程序设计基础时,讲完逻辑表达式和多重循环结构后,可以将大赛中的逻辑推理题目引入教学中并引出常见的解题方法和思路一枚举法,从而加深对枚举法的认识。通过采用数据结构中的双向链表和线性数组两种方式实现大赛中常见的约瑟夫环问题。

4.7 引入OJ平台。加强课程实践环节

引人在线判题(Online Judge,oJ)系统,提高学生的实践能力。能力需要以丰富的知识作为支撑,而实践是能力赖以生长的土壤。在OJ系统中,学生可以在线提交程序源代码,系统对源代码进行编译和执行并通过预先设计的测试数据检验程序源代码的正确性。引入0J系统不仅可以辅助教师批改作业,减轻教师工作压力,还可以促使学生加强平时上机编程练习,通过编程排名方式提高学生的学习兴趣。OJ系统中拥有大量题库,可以让学生进行上机实践,培养自身的计算思维能力,提高编程能力。0J系统不仅可以作为程序设计基础课程的实践平台,还可作为数据结构课程的实践平台。

结构化程序设计范文10

关键词:软件工程;程序设计;课程群;建设;实践

软件工程专业的培养目标是面向我国软件产业培养急需的工程应用型人才。软件产业的发展要求学生具备较强的系统分析、设计、开发与维护能力[1]。为培养学生软件系统方面的相关能力,许多高校的软件工程专业都设置了系列课程模块,如程序设计课程模块、网络技术课程模块、计算机体系和操作系统课程模块、软件工程课程模块等,这些模块往往是一些单独课程的组合,有很多学生学了这门课程,又忘记了那门课程,到毕业时专业能力达不到社会所要求的层次。程序设计课程群是软件工程专业系列课程的重要组成部分,其承载的技能培养目标是专业培养的子目标[2],处于非常重要的地位。课程群建设是专业建设的一部分[3],有利于打通课程知识脉络,避免课程内容重复或前后脱节,使前后连贯,内容融合,进而获得整体优势[4]。程序设计课程群主要培养计算思维能力、算法设计与分析能力、程序设计与实现能力和系统分析开发能力[5]。学生通过程序设计课程群的学习,可掌握1~2门程序设计语言,更进一步理解程序设计方法,熟练掌握常用的数据结构和算法,形成良好的程序设计风格,可独立分析、设计和开发中小型软件系统。所以对程序设计课程群进行研究并积极实践对专业培养目标的实现具有重要现实意义。

1问题分析

目前,大多数高校信息类相关专业都开设了程序设计系列课程,一般为C语言程序设计、数据结构与算法、java程序设计等。许多高校都将C程序设计作为第一门程序设计课程[6],一般安排在第一学期或者第二学期,学完C语言之后,再学其他程序设计课程,如数据结构等。由于C语言本身比较灵活且语法内容比较多,对于初学者来说并不太好掌握。一些教师在授课过程中,没有站在软件设计的高度思考教学内容,往往过多地强调语言成分的语法和语义,而忽视了计算思维能力[7]的培养,使学生从开始就扎进程序设计语言的细枝末节中去,忽略了软件工程思想的渗透,到最后学生掌握了一些语法,却不能写出较为优美的程序或没有形成较好的程序设计思维和风格。算法是程序的灵魂,数据结构和算法在课程群中具有基础和核心地位[8]。在实际教学过程中,学生普遍反映数据结构和算法课程抽象难学,在学习和实际应用中出现的问题比较多,很难写出能正确运行的程序,学习过程中成就感不强,学完之后还是不知道如何应用,很难达到预期的效果。由于在前期的学习中,程序设计基础没有打牢,对常用的数据结构和算法没有真正掌握,模块化程序设计思维没有有效建立,良好的程序设计风格没有形成,导致后续的高级面向对象语言程序设计学习很难深入,最终导致软件分析与设计能力得不到有效的提升。

2程序设计课程群建设

我校软件工程专业采取校企合作办学模式,由吉首大学和中软国际共同建设,企业参与人才培养的全过程,在具体实施过程中,学校侧重于理论教学部分,企业侧重于实践教学部分[9]。程序设计课程群是软件工程专业课程体系的重要组成部分,企业参与讨论与建设,确定该课程群以软件设计能力培养为主线,以C语言程序设计、数据结构、面向对象技术、算法设计与分析几门课程为基础组建课程群,C语言程序设计开设在第一、二学期,数据结构、面向对象技术、算法设计与分析分别开设在第三、四、五学期,第六学期可开设JavaWeb程序设计或Web程序设计,使课程群在能力构建和开设形式方面形成一个不间断的体系。

3程序设计课程群实施

3.1精讲课程主要内容,提高程序设计能力

课程组教师首先需要站在软件分析与设计的角度研究各门课程在课程群中的地位和作用,把课程群中的系列课程作为一个有机的整体,研究各门课程的主要教学内容,针对课程重点、难点、疑惑点进行精讲,做到理论与实践课并重,有效提高学生程序设计水平。在课程群系列课程中,由于第一门课程是后续系列课程的基础,所以学生必须掌握它。在C语言的教学中,要渗透软件分析与设计的思想,把握程序的主要框架,不纠缠于一些细枝末节的语法。函数是C语言教学中的重点,需要重点突破,从模块设计的角度来考虑函数设计,对于一个具体的函数,则要掌握函数的返回类型、参数类型以及参数个数。如用函数处理一个数组时,需要传递数组的首地址和数组的规模,首地址用指针表示,数组的规模则有两种表示方法,一是数组的长度,二是数组的起始下标和结束下标,这两种方式可能会分别应用到不同的地方,如果教师一直不提示第二种方法,则将来学生在写数组做参数的递归程序时可能会遇到困难。从多年的教学实践来看,如果学生真正掌握了函数设计方法,再加上必要的算法知识,一般情况下,程序设计就会变得得心应手而且十分有趣;对于数据结构课程,采取以数据存储(内存)为主线的方法,将重点放在数据的存储和相关算法方面,在算法实现时渗透模块化的思想,需注意头文件和实现文件的定义,因为数据结构内容具有很强的连贯性且程序的初始化工作较多,如链表的具体应用则先要建立链表、树的遍历和节点的查找等则先要建立树、图的遍历和最短路径及关键路径等则先要建立图,在实验过程中有意识地把一些基础工作放入头文件,则会极大地提高实验的效率;在面向对象技术教学中,以面向对象程序设计的方法为核心,以语言中的面向对象机制为主要内容,在适当的时候引入《ThinkinginC++》、《EffectiveC++》、《ThinkinginJa-va》等优秀书籍中的一些思想和经验,要注重面向对象程序设计过程中大的程序框架的合理性以及具体处理算法的正确性;在讲授算法设计与分析的时候,应集中精力将主要算法讲透,直到学生学懂为止,在实现算法时,应充分运用面向对象设计的思想,将算法封装在类中;在web程序设计教学中,采用案例驱动的方式,精讲软件项目设计中的主要方法和主要问题,培养学生工程化设计思想。精讲的目的是让学生多练,精讲之后要布置任务并为学生提供练习环境和相关指导,必须充分发挥教师主导和学生主体作用,教师要认真检查学生的作业、实验和练习情况,及时纠正问题,引导学生运用软件工程的思想设计程序,培养学生良好的程序设计思维和程序设计风格,激发学生自觉学习和实现相关算法,最终提高程序设计能力。

3.2大规模开展程序设计训练,培养程序设计能力

为培养学生算法设计与分析能力,学院在晚上和周末开放了实验室,在实验室搭建了ACM在线测评系统(ACMOnlineJudgeSystem),并接入了校园网,结合C程序设计、数据结构与算法等课程部署了大量习题。学院利用课余时间,有计划组织学生进入实验室进行编程训练,并为每次训练配备了指导教师。平时,学生也可以在寝室登录平台进行训练。教师在讲授C程序设计等课程的时候,要求学生利用课余时间在ACM平台上完成至少上百道题的训练,并将完成情况计入课程的平时成绩。通过大规模开展在线程序设计训练,学生的程序设计能力有了明显的提高。

3.3开展课程设计训练,培养工程化设计思想

在课程群中除开设理论课程对应的实验项目之外,还针对整门课程开设了综合性课程设计项目,如C语言课程设计、面向对象技术课程设计、javaweb课程设计,单个课程设计周期为1-4周。学院课程设计项目主要由企业教师指导完成,该类项目采用分组形式,在组内模拟软件企业运行模式设置相关岗位角色,学生在仿真企业环境中,利用仿真的软件开发项目,进行轮岗和角色体验,培养学生的软件工程应用能力、软件项目开发与测试能力、职业素质等,从而使学生熟悉软件项目开发流程和规范,养成良好的软件开发习惯。课程设计结束时,要求学生演示并讲解自己的项目开况,由学院教师和企业教师组成评定小组进行评分。

3.4改革考核与评价方式,理论与实践、平时与期末相结合

理论与实践相结合。程序设计课程群内的课程都是实践性很强的课程,其目的是运用所学的知识解决实际问题,决定了课程的期末考核要综合考虑理论和实践两部分内容。理论部分主要考查学生对基本概念的理解和对基本知识的掌握情况,实践部分侧重考查学生的综合应用能力,这两部分成绩都在期末完成,占课程总成绩的60%左右。平时与期末相结合。期末考核重在体现学习的结果,平时成绩则侧重于体现学习过程,在课程总成绩中,平时成绩占40%左右,即一门课程约有40分来自平时的学习过程。平时成绩一般由出勤、作业和平时实验情况、课程设计情况组成。在学期开始第一堂课的时候将课程评分方式告知每一个学生,必须抓紧平时的学习,若平时分小于20分,则取消课程考试资格或直接将课程总成绩记为不及格。

4结语

程序设计课程群对培养学生计算思维能力、算法设计与分析能力、系统分析与设计能力具有重要作用。本文分析了学生在课程群学习中遇到的一些问题,从软件分析与设计的角度对课程群进行建设与改革,提出了以C语言程序设计、数据结构、面向对象技术、算法设计与分析等几门课程为基础组建程序设计课程群,给出了课程群的主要知识与能力体系要求,通过精讲课程主要内容、大规模有组织地开展程序设计训练、企业教师指导课程设计、改革考核与评价方式等方法进行教学改革,学生的程序设计能力得了到较大的提高。

参考文献

[1]韦迎春,文俊浩,陈蜀宇.以能力培养为核心构建示范性软件学院实践教学体系[J].中国高等教育,2011(2):49-50.

[2]乔付,王国权,张凤武.CDIO理念下计算机程序设计课程群建设探索[J].内蒙古师范大学学报,2011,24(11):39-41.

[3]孙雷,王新.计算机专业程序设计课程群的研究与实践[J].教育教学论坛,2013(11):222-224.

[4]翁伟,吴克寿,吴芸,等.程序设计课程群建设探索与实践[J].计算机教育,2009(23):123-125.

[5]王海舜,蒋巍巍.基于程序设计能力培养的软件设计类课程群架构[J].计算机教育,2012(2):23-26.

[6]万臣,谢芳,胡泉.计算机专业程序设计课程群的建设与研究[J].合肥工业大学学报:社会科学版,2009,23(1):33-36.

[7]汪红兵,姚琳,武航星,等.C语言程序设计课程中的计算思维探析[J].中国大学教学,2014(9):59-62.

[8]熊回香.数据结构课程与信息化人才培养的关系研究[J].高等理科教育,2008(5):43-46.

结构化程序设计范文11

关键词:卓越计划 实践教学 考核模式 创新能力

中图分类号:G642 文献标识码:A

学生的实践能力与创新精神的培养是教育部卓越计划的核心目标,如何改革原有专业教学模式与课程体系,更好地满足对卓越工程师实践与创新能力培养的根本需求,成为卓越计划实施中的关键问题。作为教育部第一批卓越计划试点专业,山东理工大学计算机学院从计算机科学与技术专业最重要的实践与创新能力――程序设计能力培养入手,以程序设计基础类课程的建设与创新为切入点,结合多年来“定制式培养”“校企合作”的专业改革经验,先后从课程的教学内容整合优化、实践教学模式创新、考核模式改革和创新能力培养等方面,进行了深入的探索实践。

1.程序设计基础类课程内容整合优化

程序设计基础类课程包含了程序设计基础、数据结构、编译原理等课程,这些课程均是计算机专业卓越工程师计划中最核心的专业基础课。程序设计基础主要介绍基本的程序设计思想与方法,数据结构主要介绍数据的逻辑组织形式与存储组织形式、编译原理则通过介绍程序设计语言编译器的构造原理、设计方法和实现技术,使学生在更高的层次上理解程序设计语言工作原理与程序运行机制。从课程特点来看,这几门课程在教学内容上既是紧密关联的又是直接衔接的。首先,程序设计基础为数据结构与编译原理的学习提供了必需的程序设计方法与基本技巧;数据结构既实现了复杂数据下程序设计基础内容的进一步的延伸与发展,又为编译器构造提供了结构化数据的逻辑与存储形式;编译原理则完成程序设计的经典方法与数据结构合理组织的有效结合,为在解决问题中实现程序设计方法的选择以及合理数据结构的表示提供了一个综合应用的平台。

基于卓越计划的培养要求以及三门课程内容上紧密关联的特点,我们对各门课程的教学内容进行了整合,根据课程之间的衔接关系适当的调整了部分教学内容。比如,基本线性结构的组织作为程序设计能力的重要基础,虽然既是数据结构也是编译技术中的基本问题,但在课程整合之前的课程中介绍均不够突出,在整合后就以专题的形式在程序设计基础上强化基本的线性数据结构(包括数组、Y构体、单链表等)表示与实现的知识,使得学生可以有重点的集中学习并掌握这些基本结构的表示与使用方法。再如,经典的算法设计思想是程序设计与编译程序设计实现必备的能力,在课程整合之前,与之相关的知识是零散的分布在三门课程中的,但每一门课程都未做特别的强化,学生掌握的总体效果并不好。在课程整合之后,把经典算法的设计思想与实现的内容更多地放在了数据结构课程中,结合各类不同数据的组织来讲授相关的经典算法,会使学生对算法与数据结构理解的更加深入。

2.课程实践教学模式的改革与创新

卓越计划的核心目标之一是提高学生的实践动手能力,程序设计基础类课程都是理论与实践紧密结合的课程,这些课程实践教学环节的教学水平与质量,对学生动手编程习惯的养成和编程水平的提高,有至关重要的作用。

首先,在实践教学环节设计上,实现了各门课程实践教学内容的优化整合以及有序连接。整合之后,三门课程实践教学内容各有侧重,其中基本编程能力的训练集中在程序设计基础实验以及实训中完成,数据组织技巧与算法应用训练集中在数据结构实验以及课程设计中完成,程序设计语言编译器的比较、系统分析与设计集中在编译原理中完成。

其次,课程的实践教学平台的建设是实践教学的关键,优质的实践教学平台可以非常高效的达到实践教学的目的。传统的实验教学存在着诸多的弊端,主要表现在:一是课内的上机课时非常有限,短时间内,学生调试不了几个程序,效率非常低;二是虽然也可以指定一些课外上机的题目,但教师无法实时地跟踪学生课外编程过程,学生无法得到及时指导。基于上述问题,我们从程序设计基础课程开始对实践教学模式进行彻底的改革。借鉴国际ACM大赛的竞赛平台模式,建立了山东省高校第一个程序在线评测系统(Oline Judge)SDUTOJ,针对不同学生的学习水平,提供了适合各层次学生的难度不同的大量题目,为各个层次的学生提供了选择的余地。学生可以随时随地通过网络提交自己的源代码程序,并且立即得到程序正确与否以及错误类型的信息反馈,还可以看到别的用户的提交状态以及各个题目的提交汇总信息,整体排名以及班内排名的信息等。截止到2017年4月6日,程序在线评测系统SDUTOJ已有注册用户24639个,实践性题目2870道,累计提交次数251万余次,是山东省高校中用户最多、题目数目最多、开放性最好、教学应用最为广泛的实践教学平台。在课程内容整合后,将该实践教学平台引入到数据结构与编译原理的实践教学中,并按照类别在程序在线测试系统中增加了大量的与数据结构以及编译原理有关的练习题目。程序在线评测系统平台被其他课程共享使用后,学生的动手实践积极性明显提高,特别是学生利用课外时间做题的数量越来越多,很多学生的课余时间都用在了程序调试上。课程实践教学所在的学期,每班的题目提交数量将近10000次,每个学生提交通过的程序数目在平均在150个以上。

3.课程考核方式的改革与创新

课程的考核方式应该体现课程教学的核心理念,程序设计基础类课程的核心理念已经从以往的单纯理论知识学习改变为理论与实践并重的学习,原有的考核模式已经无法适应对实践能力考核的需求。经过多年的改革与实践,我们逐渐摸索出一种有效的考核模式,对程序设计基础类课程原有的考核方式进行了彻底的改革,将传统的以理论考核为主转换为理论与实践同步考核的方式。在新的考核方式中把课程的考核分为基本理论与实践技能两个模块,基本理论考核以考察相关课程的基本思想与基础理论知识为主,主要的考核方式是期末的理论考试,试卷成绩占总成绩的40%。实践技能考核又分两个部分,第一部分是平时的实验成绩,以学生平时在程序在线测试系统(SDUTOJ)中通过的题目数量与质量作为评价依据,根据学生的排名得到平时实验成绩,占总成绩的30%;第二部分是期末的上机考试成绩,利用ACM竞赛的模式,学生在规定时间内独立上机编程,在规定时间内按照学生提交通过的题目数量以及专业相对排名次序核定成绩,占总成绩的30%。

4.课程建设对学生创新能力的培养

学生的创新精神与创新能力培养是卓越计划的另一核心目标,也是程序设计基础类课程建设的重要目标,与课程有关的大学生创新竞赛是改革效果的重要检验平台。我们建立了“以校赛带面、以训练带片、以大赛拔尖”的三级创新能力训练机制,培养学生程序设计能力。自2009年开始组织学校ACM大赛,参赛人数超过300人,以ACM创新实验室为训练基地,组织学生进行程序设计能力训练,参加程序设计基础训练的学生人数从最初的100人左右达到现在的800人左右。在此基础上选拔部分学生参加山东省和国际ACM大学生程序设计竞赛。

近年来,课程组先后组织卓越班学生参加了山东省以及国际ACM大学生程序设计创新竞赛,以检验课程建设在学生创新能力培养方面的效果。其中,在2010―2016年山东省举行的第一届至第八届ACM大学生程序设计大赛中,我校的25支参赛队伍全部获奖,其中获得一等奖7项,二等奖10项,三等奖8项。在2009~2016年的ACM/ ICPC国际大学生程序设计竞赛中,共获得30余项亚洲区域赛优胜奖、17项铜奖、6项银奖,并于2016年获得1项亚洲区域赛金奖,ACM竞赛总成绩位列山东省高校前三位。

5.课程创新与实践的效果

经过各项课程创新与实践措施的实施,程序设计基础类课程的教学质量得到明显的提升。2010-2012三届卓越班毕业学生均反映通过课程的学习,个人的实践动手能力得到逐渐地提升。课程任课教师也一致反映,通过程序设计基础类课程改革,卓越班学生的程序设计能力,特别是动手编程的能力较以前有了非常大的提升,学生综合竞争力增强,就业质量和考研继续深造的学生比例有大幅提高。从整体情况来看,我们的程序设计基础类课程的创新和实践改革处于省内领先水平,可以为卓越计划的教学改革和学生能力培养提供有益的借b。

参考文献:

[1] 刘晓静,王晓英,张玉安,黄建强,刘志强.以创新人才培养为目标的数据结构实验教学改革[J].实验技术与管理,2014,(11).

[2] 金兰.程序设计基础课程教学改革探索与实践[J].中国教学信息化,2017,(1).

结构化程序设计范文12

关键词:ANSYS参数化语言 APDL 钢结构 优化设计

中图分类号:TU3 文献标识码:A

1.引言

结构优化设计理论已有近四十年的发展历史,目前在一些重要的结构(如飞机结构)上已经得到了应用,这也引起了土木和建筑工程界人士的广泛关注,寻求建筑结构优化设计的理论、方法一直在紧张有序的进行当中。由于传统的优化方法,例如准则法、数学规划法以及两者的结合(即所谓的混合法)等静态优化方法都是基于代数方程模型的;最优控制理论中的动态规划优化方法是基于微分方程或差分方程模型的。而这些传统数学模型的描述能力和求解方法有相当的局限性,使得最优化理论和方法在实际应用中受到了很大的限制,存在着局部最优解、维数灾难、不确定性等问题,这些困难需要寻求新的优化设计方法,才能得到最终解决。

随着有限元理论的迅猛发展和日趋成熟,特别是计算机技术的广泛应用,基于ANSYS参数化设计语言APDL的结构优化设计越来越体现出它强大的生命力,这无疑给建筑结构的优化设计注入了新的活力。

ANSYS是一种运用广泛的通用有限元分析软件,其有限元分析过程主要包括:建立分析模型并施加边界条件、求解计算和结果分析3个步骤。对于某一有限元模型来说,当分析结果表明需要修改设计时,就必须修改有限元模型的几何尺寸或改变载荷状况,建立新的有限元模型,然后再重复以上分析过程。这种/设计)分析)修改设计)再分析)再修改0的过程,在有限元分析中存在着大量的重复性工作,将直接影响设计的效率。而运用ANSYS提供的参数化设计语言(APDL),通过结构设计参数的调整,则可以自动完成上述循环功能,进行优化设计,从而大大减少修改模型和重新分析所花的时间。

2.结构优化设计的基本理论

2.1结构优化设计概念

假定分析搜索最优设计一般被归纳为结构优化分析过程的流程。而这其中优化分析的核心部分为搜索过程。在包括满足各种给定条件的前提下,是否达到最优是结构优化设计最先对设计方案进行的判断。如果没能达到,但又为了使得预定的最优指标能逐步达到,就需要遵循某一设定的规则进行修改。而以数学规划为基础,进行数学模型建立,并对计算方法进行选择,使得工程结构设计问题转化为数学问题,然后在多种可行性设计中运用计算机选择出相对属于最优设计的方案,这也正是结构优化设计的主要任务。

2.2结构优化设计的数学模型

设计变量、目标函数和约束条件是结构优化设计的主要要素:。其数学模型的一般表达式为

求设计变量

使目标函数

满足约束条件

3.基于APDL的钢结构优化设计

3.1APDL语言简介和使用

APDL是指ANSYS 参数化设计语言,是使得某些功能或建模可以自动完成的脚本语言之一。它提供如参数、宏、标量、向量及矩阵运算、分支、循环、重复以及访问ANSYS 有限元数据库等一般程序语言的功能,同时其可以实现参数交互输入、消息机制、界面驱动和运行应用程序等,因此它也提供简单界面定制功能。为了扩展了传统有限元分析范围以外的能力,它可以根据指定的函数、变量设定程序的输入,同时选它使用户对任何设计和分析属性有控制权,也就是说其为了为用户提供了自动完成繁琐循环的功能而运用了建立智能分析的手段,从而为优化设计运行繁琐的迭代提供了可能和高效率,具体为参数、函数、分支与循环、重复、宏等功能。

3.2优化基本原理

优化方法采用复形法。复形法优化是一个运用较多且较为成熟的非线性数学规划方法,其基本思路来源于无约束优化算法的单纯形法。而无约束优化算法的单纯形法就是复合形法的基本思路的来源。

3.3优化设计流程

为了将有限元法与优化方法结合起来,可以采用基于APDL语言的ANSYS优化设计模块(OPT)来实现。基本流程图如图1所示。

图1ANSYS软件优化设计程序流程图

3.4APDL优化程序关键技术

首先建立钢框架结构参数化有限模型。参数是指APDL中的变量与数组。参数化模型的建立,便于模型的修改,也便于设置优化设计变量。

其次建立钢框架结构优化设计模型。下面是部分优化命令:

/POST1!进入后处理器

*GET,V,SSUM,,ITEM,EVOL!提取结构体积,赋予参数V

……

/OPT!进入优化设计器

OPANL,1.LGW!指定分析文件

OPVAR,W1,DV,.1,.4!定义设计变量

OPVAR,TW1,DV,0.005,0.02

OPVAR,TY1,DV,0.005,0.02

……

OPVAR,MS1,SV,0,225750!定义状态变量

OPVAR,SS1,SV,0,125000

……

OPVAR,V,OBJ,,,.01!定义目标函数

OPKEEP,ON!要求保留最优设计序列时的数据库和结果文件

OPTYPE,SUBP!使用零阶方法

OPFRST,40!最大40次迭代

OPEXE!运行优化

4.优化设计实例分析

本文以单跨单层钢框架结构厂房为例,跨度为 12m,层高为4.5m,框架梁、柱均采用焊接H 型钢截面且翼缘采用焰切边,材质均为Q235 钢。为简便起见,取恒荷载为0.5kN/m2,活荷载为2.0kN/m2。通过APDL 优化程序,得出用钢量约为18.2kg/m2。优化前后的结果对比分析见表1。

表1 优化前后结果分析

5.结语

本文首先论述了进行钢框架结构优化研究的意义,介绍了优化算法(复形法)和ANSYS 中的APDL语言。并通过与实际工程相结合,并分别采用复形法和有限元软件ANSYS优化模块,同时以最低化用为优化的目的,使一平面钢结构的梁柱截面尺寸得到优化并进行相应的分析。通过理论分析与结果的分析比较,证实了该优化方法是可行的,不仅能明显降低工程造价,促进钢结构的普及和推广。而由设计实例可知,基于ANSYS 的二次开发语言APDL 语言建立的钢结构优化设计模块操作方便,优化程序可自定义优化过程和控制性变量,适应了不同的结构类型和荷载组合,具有很强的灵活性。本文的优化设计思想,可以推广到其它结构形式,可对其它类型结构优化起到借鉴作用。

参考文献:

[1] 王富强,芮执元,魏兴春.基于APDL语言的结构优化设计[J]. 科学技术与工程. 2006(21)

[2] 赵霞,邰英楼.基于ANSYS的结构设计优化[J]. 辽宁工程技术大学学报. 2006(S2)

[3] 陈珂,张茂.基于ANSYS的参数化设计与分析方法[J]. 机械工程师. 2007(01)

[4] 王学文,杨兆建,段雷.ANSYS优化设计若干问题探讨[J]. 塑性工程学报. 2007(06)