程序设计的基本结构汇总十篇

时间:2023-11-25 09:29:48

程序设计的基本结构

程序设计的基本结构篇(1)

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

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

程序设计的基本结构篇(2)

1 基于服务的应用程序设计开发描述

1.1 基于服务的应用程序的设计描述

基于服务的应用程序的设计过程中,根据程序应用系统需求以及项目特点确定建模目标的结构,并保证建模目标结构符合基于服务的应用程序的开发要求。一般建模目标结构具有以下特点时,可以运用基于服务的应用程序的开发模型进行程序的设计开发工作。

1.1.1 建模目标结构具有较低的程序运行实时性要求

Web服务是在SOP协议的基础上开展的,在程序运行过程中,SOP协议中的XML文档数据现象会延迟数据的运算与传输,在实时性要求较高的程序系统中,数据的延迟现象会导致同步通讯失真现象,造成系统运行故障等。相反的,当实现Web服务的过程中,如果系统结构复杂,需要较长的计算时间时,数据延迟对Web服务功能的实现没有影响,可以利用远程设备进行复杂的计算等,从而实现Web服务的目的。

1.1.2 大量异构系统并存

基于服务的应用程序的开发模型可以用于大量异构系统并存的程序开发大幅度提高了程序开发的效率,同时也有效降低了程序开发设计的成本。由于计算机硬件设备配置不是完全相同的,计算机操作系统以及编程语言也存在一定的差异,在进行程序的开发与设计时,尤其是对于复杂度较高的程序,程序的开发与设计很难与不同的计算机硬件设备完全匹配,不利于程序的推广与普及,也提高了程序开发设计的难度。

1.1.3 软件在高速网络支持的环境下运行

基于Web服务的应用程序的运行优势是在网路环境能与其它系统共享数据,实现不同系统的交流与沟通,这也是利用基于服务的应用程序方法开发设计软件的基础。

1.1.4 软件结构清晰简单

基于服务的应用程序的设计与开发要考虑程序的实际运行速度,结构过于复杂的结构实现某一功能所需的时间较长,不仅不利于程序的运行与功能的实现,同时也增加了网络的运行负担与程序运行的成本。

1.2 基于服务的应用程序的开发描述

基于服务的应用程序的开发过程不是单一的对程序功能进行分解与控制,而是对程序功能进行部署,建立程序的功能实体,并将各部分功能实体组合成为软件系统,从而实现程序在应用过程中适应网络运行的特点,提高程序开发设计质量。基于服务的应用程序的开发过程包括软件静态结构建模、软件动态结构建模、管理人员分析与反馈、组件软件、软件成型与测试以及软件投入使用等。

2 Web服务技术及架构分析

2.1 Web服务特点

Web服务是基于XML技术而建立的Web规范技术,是通过包含、模块化的应用程序实现在网络功能的、描述、查找以及调用,具有封装性、松耦合性、互操作性以及较高的程序集成能力。其中,封装性是指在可以对网络技术进行保护,用户通过服务列表选择所需服务。松耦合性是指Web服务界面是不随Web服务的变化而变化,Web服务的变化对Web服务功能的实现没有影响。互操作性是指Web服务允许符合网络技术要求的设备对网络进行访问并实现网络服务,同时也允许Web服务与其它Web服务进行通讯,避免了不同网络协议存在差异造成的不便。

2.2 Web服务架构

Web服务的体系结构的建立是基于面向服务的体系结构,将应用Web网络的服务进行组合成为应用程序是Web服务体系结构的主要思想,实现Web网络服务在程序间的共享,并对程序实现某一功能细节进行封装。Web服务体系架构主要包括三个部分:Service provider、Service broker、Service requester。其中Service provider主要功能是服务并响应自身服务的请求,Service broker的主要功能是对Web网络服务中的服务进行注册与分类,以便于使用者根据自身需求进行搜索,Service requester则是在使用者进行搜索时,利用UDDI查找所需服务并实现服务器与与某一特定服务的绑定。

3 基于Web服务的程序集成

传统的程序集成模式是在Web服务的支持下,为集成应用程序提供了推广平台,通过服务捆绑等多种形式,在最小的运营成本下实现对Web服务的开发、与推广。基于Web服务的程序集成模式则是在Web网络服务的基础上,制定程序的集成方案并实现应用程序的集成,基于Web服务的程序集成是通过封装应用程序的功能接口,并通过Web网络进行,利用不同系统、不同应用之间数据的共享功能实现应用程序的集成。

基于Web服务的程序集成模式主要包括客户端应用程序、适配器以及Web服务等三个部分,各部分的基本结构与功能为:(1)客户端应用程序的功能是创建适配器并在程序运行过程中对基本函数的调用,从而实现程序功能。基于Web服务可以实现远程操作与控制,客户端应用程序可以根据自身运行需求对现有应用进行修改,提高客户端应用程序与客户实际需求保持一致。(2)适配器是在客户端应用程序不具备相应的访问接口的情况下,通过适配器构造可访问接口,为程序与Web网络之间构架了一个桥梁,便于实行程序的互操作等。(3)Web服务的实现过程主要为提取应用程序的函数调取与计算功能,并在Web服务层上完成Web服务的集成。Web服务的具体调用功能的实现首先要浏览注册服务器查询自身所需要的Web服务,并下载所需服务的WSDL文件,下载完成后利用本地服务器的组件生产客户端带来程序,通过在本地服务器运行该程序调用Web服务,从而满足自身服务需求。

4 总结

基于Web服务的程序设计是一种新型的程序设计方法,能适应多种运行环境,不仅缩短了程序开发设计时间,降低了程序开发成本,同时也有效提高了程序运行的效率与可靠性,是值得推广的一种程序设计方法。在基于Web服务的程序设计中,也要不断对其技术与结构进行优化,进而完善基于Web服务的程序设计水平,提高程序的使用性能与经济性能。

参考文献

[1]张强,夏阳,王亮.基于Web服务的程序设计新思路[J].计算机工程与设计,2006, 27(22):31-32.

[2]朱敏,丁秋林.基于SOAP的Web服务程序设计[J].计算机应用,2003,23(25):65-66.

程序设计的基本结构篇(3)

3、树的基本概念:二叉树的定义及其存储结构;二叉树的前序、中序和后序遍历。顺序查找与二分法查找算法;基本排序算法(交换类排序,选择类排序,插入类排序)。

4、程序设计基础:程序设计方法与风格。结构化程序设计。面向对象的程序设计方法,对象,方法,属性及继承与多态性。

5、软件工程基础:软件工程基本概念,软件生命周期概念,软件工具与软件开发环境。结构化分析方法,数据流图,数据字典,软件需求规格说明书。结构化设计方法,总体设计与详细设计。

6、软件测试的方法:白盒测试与黑盒测试,测试用例设计,软件测试的实施,单元测试、集成测试和系统测试。程序的调试,静态调试与报考调试。

程序设计的基本结构篇(4)

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

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).

程序设计的基本结构篇(5)

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

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

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

程序设计的基本结构篇(6)

近年来,计算机程序设计技术已从结构化程序设计技术逐步向对象程序设计技术过渡,特别是当设计一个较大规模的应用程序时,面向对象设计思路成为首选。纵观计算机软件技术的发展,在局部功能的实现上及功能模块的设计上,结构化程序设计仍然有其不可替代的独特魅力。在结构化程序设计中(以C语言为例),巧妙地运用一些设计技巧,对增强程序的稳定性和可靠性,简化程序操作步聚,提高程序的运行效率十分有效。

结构化程序设计的概念最初是由荷兰学者E・W・DUKSTRA等人在20世纪60年代提出的,它的基本思路是:以模块化设计为中心,将原来较为复杂的问题简化为一系列简单模块的设计,也就是将一个大的计算任务划分为若干个较小的任务,这些小任务均由函数来完成。函数既可以是C语言定义的标准库函数,也可以是自定义函数。在实际应用程序中,一个具备一定规模的C语言程序往往由多个函数组成,其中必有一个命名为main的主函数,由main来调用其他函数。必要时,其他函数还可以调用另外的函数,同一函数可以被一个或多个函数调用一次或多次。

结构化程序设计把程序归结为用顺序结构、选择结构和循环结构等三种基本结构来描述的逻辑问题。顺序结构的程序流程是按语句的书写顺序依次执行;在C语言中,有4种语句是顺序执行的:即空语句、表达式语句、函数调用语句及复合语句;选择结构是对给定条件进行判断,根据判断结果决定执行两分支中的一个分支或多分支中的一个分支,选择语句有if语句和switch语句;循环结构是在给定条件成立的情况下,反复执行某个程序段,循环语句有for,while和do-while语句以及一些辅助流程转向语句如continue,break,go to等等。以上三种结构通过流程控制语句来实现。流程控制语句在程序设计中起着十分重要的作用,通过三种基本控制结构的合理调配使结构化程序具有唯一的入口和出口,不会出现死循环,而且程序的静态形式与动态执行形式之间具有良好的对应关系。

从以上结构化程序的基本特点分析,结构化程序设计主要强调的是程序。程序=算法+数据结构+程序设计方法+语言工具和环境,其中算法是灵魂,是解决“做什么”和“怎么做”的问题;数据结构是加工对象;语言是工具;编程需要采用合适的方法。具体解决主要问题包含以下几个步骤:

分析问题,找出解决问题的模型根据模型设计出适合计算机特点的处理方法即算法进行编程程序,以实现算法上机编辑(.c)、编译(.obj)、连接(.exe)、运行所编制的程序,直到得出正确结果对结果进行分析,整理出文字材料。

程序设计的任务不只是编写出一个能得到正确结果的程序,还应考虑程序的质量,否则编写的程序就会出现质量低下、可靠性差、开发周期长、维护费用高等不良后果,即所谓的的“软件危机”,它会严重阻碍计算机应用的发展。由于大多高级语言都支持结构化程序设计方法,其语法上都含有表示三种基本结构的语句,所以用结构化程序设计方法设计的模块从结构到程序的实现是直接转换的,只需用相应的语句结构代替标准的控制结构即可。笔者在实际应用中,总结出以下几点实用技巧。

一、通过引申法廓清思路,选准目标

“引申法”就是通过对某一结论的合理引申,结合已经解决的问题,因势利导,在此基础上解决相关联的其他问题。“引申法”可以培养人们在程序设计方面的发散思维,提高程序设计的应变能力。问题是活的,但程序是有章可循的;语法是有限的,可解决的问题是无限的。程序设计相当一部分工作是分析问题,找到解决问题的方法,再以相应的语言写出代码。要熟练掌握一些简单的算法,根据不同的问题,再灵活应用。如用100元钱买100只鸡,公鸡、母鸡、小鸡分别是5元、3元、1元一只。在数学上解三元一次方程,三个未知数,两个方程好像解不出来。通过“穷举法”,我们要费好大一番工夫才能算出结果,但是通过计算机“引申”编程运算却不用一秒钟即可解决问题。只有在分析实际向题的基础上,以清晰的思路去设计算法,才能举一反三,以不变应万变。通过“引申”法,我们可使初学者对函数设计的关键问题有清晰的认识,利于从统筹全局的角度去考虑问题,体现了程序设计逐步求精的思路。

二、利用框架法培养全局思维和算法的整体设计能力

其具体体现在两方面。一是在有了一点编程基础后要利用伪代码或流程图,从算法设计的角度讲解编程思路,而不应拘泥于语法细节,不分主次、逐条语句地讲解代码。这样可以层次分明,突出算法设计的关键,利于培养编程思路。二是在学习重点章节函数时,由于新的算法已很少,主要是学习用函数调用的方法来重新编制以前所熟悉的程序,我们可以把着眼点放在函数的设计框架上,体现参数设计、返回值设计等关键问题,而无需细讲函数体的实现细节。结构化构造减小了程序的复杂性,提高了可靠性、可测试性和可维护性,使用少数的基本结构,就可使程序逻辑结构清晰,易读易懂,并且容易验证程序的正确性。

三、借助求异法引导新思路,启迪新思维

结构化程序设计方法的基本思路是:把一个复杂的问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。一个固定的问题,解决的方法可能不唯一,如果能启发人们多角度、多侧面去寻求解决问题的办法,则可激发思考的积极性,提高其学习兴致。对一个初学计算机语言的人来说,最重要的就是要有正确的程序流程概念,不仅要懂得,而且要灵活应用。由此可见,用结构化方法设计的结构是清晰的,有利于编写出结构良好的程序。在C语言中一题多解的情况有很多,有意识地引导新思路,鼓励新方法,以培养人们在编程中的求异思维,而不是死记硬背,墨守成规。结构化程序设计强调程序设计风格和程序结构的规范化,提倡清晰的结构。

四、选准切入口,合理划分功能模块“分而治之”

结构化程序设计的关键在于功能模块的选定和划分。模块化设计的思想实际上是一种“分而治之”的思想,把一个大任务分为若干个子任务,每一个子任务的划分以相对简单为前提。划分子模块时我们应注意模块的独立性,即:使一个模块完成一项功能,耦合性愈少愈好。具体应用时从问题本身入手,自顶向下,逐步细化,精益求精,将解决问题的步骤分解为由基本程序结构模块组成的通过程序流程图、N-S图、PAD图表格等表示的结构化程序框图。在实践应用中往往会出现以下几个问题:一是用户要求难以在系统分析阶段准确定义,致使系统在交付使用时产生许多问题。二是用系统开发每个阶段的成果来进行控制,不能适应事物变化的要求。三是系统的开发周期较长。

为解决这些问题,我们要求模块的设计要简洁明了,语句的选用要直观,不要拖泥带水。下面是一段小程序,从中可以看出一些语句选用的技巧。

某淘宝商城为鼓励更多网友光临本店,对新老网友给出如下优惠:凡是购买10件以上者,打9折;20件以上者,8.5折优惠;30件以上者,8折优惠,40件以上者,7.5折优惠。如用习惯上的if嵌套语句编写程序如下:

Main()

{float x,y;

printf(“请输入优惠购额款X:\n”);

scanf(“%f”,&x);

if(x

y=x;

else if(x

y=0.9*x;

else if(x

y=0.85*x;

else if(x

y=0.8*x;

else

y=0.75*x;

printf(“网友应付优惠后款额Y为:y);}

显然,这段程序冗长,一旦情况有变化,难以扩展。转换为switch语句结构后,程序就变得相对简单:

Main()

{float x,y;

Int t;

Printf(“请输入优惠购额款X:\n”);

Scanf(“%f”,&x);

If(x>=40)

t =4;

elst

t=(in)(x/10);

switch(t)

{case 0:y=x;break;

case1:y=0.9*x;break;

case2:y=0.85*x;break;

case3:y=0.8*x;break;

case4:y=0.75*x;break;}

printf(“网友应付优惠后款额Y为:y);}

两种方法可谓异曲同工,但是对于程序的调试性和可维护性却有天壤之别。在结构化程序的编程实践中,我们要查找某些错误比较困难,所以要尽可能避免出现这些问题。编程技巧需要在编制和调试结构化程序时不断总结和完善,力求找出最简便、最直观的方法。

总之,结构化程序设计方法在实际应用中有许多技巧可以合理运用,这需要我们对算法和数据结构展开深入分析,寻找最佳结合点,有的放矢,对症下药;更需要在实践中不断总结和积累。在编写过程中我们觉得有些程序没什么问题,但是一上机调试,就出现这样或那样的问题,这说明程序还不完善,还需要调整或改进。当今,高效率和快节凑的生活与工作方式对程序的设计提出了更高的要求和更苛刻的标准,我们只有不断创新设计理念和方法,才能编制出更多高质量、高性能、低故障的优质程序。

参考文献:

程序设计的基本结构篇(7)

一、面向对象设计方法

软件设计有两种主流设计方法:以结构化程序设计为基础的结构化软件设计和由面向对象设计方法导出的面向对象的软件设计, 20世纪70年代末到80年代初的结构化设计方法即传统设计方法,以区别于后来兴起的面向对象的设计方法。在软件设计周期中,面向对象设计方法是一种全新的设计和构造软件的方法,它使计算机解决问题的方式更符合人类的解决问题的思维方式,更能直接的描述客观世界,同时也可以增加的代码的可重用性,是目前和未来软件开发的方向[1]。

面向对象设计在整个软件设计中占据着非常重要的部分,面向对象设计也是将分析阶段所建立的分析模型转变为软件设计模型,但是面向对象分析和面向对象设计之间没有明显的界限,面向对象的方法是基于抽象、信息隐藏、功能独立和模块化等重要软件设计概念基础上的,现阶段的软件设计基本上都运用了面向对象的设计方法[2]。面向对象的开发支持鼓励软件实践中的信息隐藏,数据抽象和封装,可以对单独对一个对象内部进行隔离修改,那么就使得运用面向对象开发的软件更容易修改、扩充和维护[1]。

对象和类是面向对象程序设计的基石,其基本的机制便是方法和消息。消息是要求某个对象执行类中某个操作的规格说明;方法就是对象执行的操作。面向对象程序设计三个重要特征:封装性,继承性和多态性。

(一)对象(Object)和类(Clasess)

对象即指现实生活中无所不在、各种各样的实体,它可以使具体的事物,也可以是抽象的实体[2]。从对象的构成和内容来看,设计程序时使用对象有以下优点:对象是对物体的直接抽象,这种抽象简化了实际物体的模型,同时以一种可以操作的形式将实体表达出来。进行了数据的封装后,掩蔽了实现的复杂性,对于用户使用起来就更加方便。

在现实生活中,具有相似性质,执行相同操作的对象,称为同一类对象,即类是同一种对象的集合与抽象[2]。例如,在Visual Basic中窗体都是Form类的实体,一个单独的窗体也是一个类。

(二)数据封装(Data Encapsulation)

数据封装是类的一个重要特性。数据封装是把数据和相关的操作设在一个包中,那么程序不能直接访问对象中的变量,只有通过对象的方法才能作用于数据。

(三)继承(Inheritance)

我们首先在对象的基础上创建对象,新的对象就会继承原先对象的所有属性和特点,同时根据实际情况也可以选择和修改父对象的属性和功能,这就叫做继承。利用这点,可以将旧的程序扩充为当前所需要的,也可以从已知的类中派生出新的类来。

(四)多态性(Polymorphism)

多态性就是多种表现形式,不同事物具有不同表现形式的能力,具体来说,可以用“一个对外接口,多个内在实现方法”表示。多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减少代码的复杂度。

二、结构化程序设计与面向对象程序设计

结构化程序设计是由算法和数据结构组成,算法指处理数据的特定的方法。结构化程序设计首要想法是如何处理数据,然后再选择最为方便处理的数据结构,那么重点主要集中在数据上了。结构化程序设计的基本思想是:系统按功能要求分解为若干个子模块,子模块再根据需求进一步分解为子模块,不断的进行分解,从上往下进行分解,这样的形式是自顶向下的“瀑布式”设计,仅运用了顺序、分支和循环三种结构设计编码。

面向对象程序设计中,用户需要做的事向对象传送消息。编程人员在设计过程中要做的就是向对象处理适当的消息以及它的内部数据,这样就最大限度了提高了代码的可重用性,缩短了调试时间。面向对象程序设计与结构化程序设计是相反的,面向对象的程序设计是从下往上的“喷泉式”的设计,对象是数据处理方法紧密结合的整体。

三、Windows及应用程序与面对对象的程序设计

Windows中的图形用户接口包括窗口,下拉式菜单,对话框等各种控件,这就使得Windows应用程序非常容易使用。我们用结构化的程序设计方法开发Windows应用程序非常困难,即使要在屏幕上生成一个简单的窗口或是一个简单的下拉式菜单也要编写几十条甚至几百条复杂的代码,写这些代码的前提必须是我们对Windows具有非常深入的了解。那么在这种情况下,一种开发时间短、质量高、复用性高等比结构化程序设计方法优良的设计方法。由于Windows的进城的核心也是对消息的处理,因此Windows程序编程是以消息为核心。消息也是面向对象程序设计的基本机制,程序的进程的核心也是对消息的处理,因此面向对象程序设计比结构化程序设计更适合于开发Windows应用程序。利用面向对象程序设计的封装性可以把Windows应用程序的所具有的行为进行封装,形成一个类层次库,这样就为Windows应用程序提供一个一致、直观和简单的与Windows的接口。面向对象程序设计具有继承性这一特性,Windows的应用程序可简单、方便的继承和选择性的使用Windows特性而不必重写这些代码,同时,编程人员也可以借用其他应用程序的功能代码,或是稍作修改,也不必考虑Windows底层的细节。那么这样看来,类层次库就大大的降低了Windows程序设计的复杂性,编程人员也不必一条一条代码的编写,显著的减少了创建Windows应用程序界面所需的源代码量,因此面向对象的程序设计在开发应用程序方面显示出巨大的优越性。

四、结语

面向对象的程序设计方法是当前软件设计的一个主要潮流,采用这种方法开发出的软件具有极大的稳定性、可维护性和可重用性,面向对象程序设计方法运用于软件设计中极大的提高的功能代码的复用性,大大的提高了工作效率。

参考文献:

程序设计的基本结构篇(8)

程序设计是计算机专业领域中最为核心的工作。在程序设计工作中,既要对问题进行分析,又要考虑各种设计的可能性,更高层次地,还要考虑运行程序的代价问题。作为计算机各专业的三大基础课之一,学生对其掌握的熟练程度将直接影响后续课程的学习。

一、 程序设计基础课程教学的现状及面临的问题

1、教学的现状

各院校开设的程序设计基础课程,多为教授学生某一种程序设计语言,其中Pascal、VB、C、C++、Java语言较为多见。 C语言作为当今最为流行的程序设计语言之一,不但成为计算机专业的必修课,而且也越来越多地成为非计算机专业的学习课程。但在实际的课程教学中,许多教师和学生都认为C语言涉及的概念比较复杂,规则繁多,使用灵活,容易出错,教师教学和学生学习都感到困难,并不同程度产生畏难心理。特别地,多数院校将C语言作为计算机专业学生进校后首先接触的第一门专业基础课,这种现象尤为明显。

2、面临的问题

一直以来,关于如何讲授面向大学生的程序设计基础课程,许多人争论的焦点放在了语言选择上,把讲授的重点放在了语言的语法规则介绍上。从短期看,这样做便于学生学,也便于教师教。但从长期看,越是注重以语法来衡量学生对语言的“掌握”程度,就越是忽略了程序设计真正使用的基本思维方式和方法,最后导致学生可能在学习完一学期的课程之后,满脑子除了一些语法知识,几乎没有任何分析解决实际问题的技能。

二、教学内容的改革

纵观教学的现状和所面临的问题,笔者认为程序设计基础课程应围绕程序开发周期,即分析问题、设计程序、编写程序代码、测试程序以及其他额外步骤等展开教学。但这并不容易实现。首先,若要从程序开发周期的各个方面教授学生,需要花费较多的课时。目前各院校开设的程序设计基础课总课时不尽相同,但大多在50到60课时之间,其中有三分之一是学生实验实训环节。换句话说,教师用于讲授的时间一般只有30课时左右。其次,以C语言为例,涉及基本数据类型、运算符和表达式、控制结构、数组、函数、指针、结构体和共同体、位运算和文件等诸多内容,显然,要在30课时内讲授完是很困难的。第三,即便是用填鸭式的方式将上述知识全部灌输给学生,学生也是不可能学会的。反而会造成学生的抵抗情绪。第四,本科计算机专业的程序设计教学一般是在一年级上学期先开设程序设计导论课,然后再开设具体的语言程序设计课,这是个循序渐进的过程。然而高职高专计算机专业的培养目标和教学进度与本科的是有区别的,因此,本科计算机专业的教学模式不能全部采纳。笔者以总学时50课时,其中讲课30课时,教授C程序设计语言为例,认为课堂教学可以进行以下改革。

1、以结构化程序设计为核心,重点讲授程序设计的控制结构

人类的自然语言有千百种,归根结底都是人类思想交流、记录的工具。计算机语言同样也是对解决具体问题的算法思想的表达工具。表达的形式――程序设计语言千差万别,但表达的内容――算法则是殊途同归。这里所说的算法不单是算法的概念和具体的某种算法,还包括算法的表示方法如流程图、结构图和伪代码等。程序设计语言本身只是在最后用来描述算法的一种工具,而任何程序不外乎由顺序结构、选择结构和循环结构组成。不论用哪种语言编写程序代码,都无法脱离这三种控制结构。可以说,是否掌握它们的用法决定了学生设计程序的优劣。因此,笔者认为,在高职高专的程序设计基础课中,让学生学习、掌握如何分析实际问题和设计解决它们的算法及算法描述的同时,应重点传授三种控制结构。

以往除了三种控制结构外,指针也是C语言的教学重点,或者说是重中之重。不可否认,指针是C语言的精髓,对程序设计有锦上添花的作用。能够驾驭C这门程序设计语言,势必熟练掌握指针的运用。而且,在目前的各类计算机等级考试中,C语言的指针也是必考而且重点考查的内容。那么,仅把教学重点放在控制结构上是否合适呢?笔者是这样考虑的:

第一,学习指针需要研究指针四方面的内容:指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区、以及指针本身所占据的内存区。这个学习的过程是相当费时的。较短的课时教授较多的内容之间存在矛盾。

第二,学习指针还要有一定数据结构的知识,对于初学程序设计的学生而言,过快地接触指针会使他们措手不及。有限的认识能力和知识水平与较复杂的应用之间存在矛盾。

第三,作为高职高专的程序设计基础课,浅显易懂实际上是非常重要的。高职高专学生的学习基础相对本科以上层次的还是较弱的,更应当使课程真正发挥“基础”的作用,成为为学生打下的坚实基础的奠基石。

那么,在高职高专的程序设计基础课中,是否就不必教学生指针的知识呢?当然不是。在学生掌握了程序设计的控制结构以后,选择性地将指针的概念及其一般的规则进行讲授,其他复杂及带有技巧性的内容,可以放在后续课程,或者在应考培训班里再作深刻的研究。

2、始终贯穿程序开发周期的教学,培养学生建立良好的程序设计风格

如1中所述,不能从语法规则角度来衡量学生对语言的“掌握”程度,不能忽略程序设计真正使用的基本思维方式和方法的教学。人类学语言很多时候不是先学语法语义规则的,而是先能听懂,然后会跟着说,然后才是学习书写以及其它更高形式。学习计算机语言也是一样的。让学生从感性再到理性去认识和理解程序设计,学生才有可能在学完课程之后大有收获。

现实中一个程序的开发是要经历一个漫长的开发周期的:分析问题阶段是整个周期中最困难的部分也是最重要的部分,需要明确期望的结果,需要明确有哪些信息参与来得到结果,需要对什么样的数据进行什么样的操作去得到期望的结果;设计程序阶段是开发过程的核心,需要把分析阶段的结果模块化,并采用算法加以描述;编写程序代码阶段用具体的计算机程序设计语言实现前一阶段的算法;测试程序则需要花费更为漫长的时间,因为实际的用户无法容忍一个有隐患的软件。这样看来,具体的程序设计语言要在整个开发周期的第三阶段才发挥作用。而程序设计风格就像一个人的习惯一样有好坏之分,好的程序设计风格会增强程序的可读性和易用性。因此,在学生学习程序设计基础之初,就应该注重培养学生的良好编程习惯,并在每个章节的教学中展开对程序开发周期的学习,让学生认识和理解整个程序开发过程,这样才不致使程序设计语言的教学脱离实际的应用。

必须注意到,高职高专的目标是培养应用型人才。学生在掌握一定理论知识的同时,更重要是实践。适量的实验实训环节必不可少,教师也应重视学生的实验实训课。以往有些教师因为总课时少,在不能增加总课时的情况下为了多讲理论便压缩实验实训课时的做法不可取。

三、教学策略的改革

作为程序设计基础课,让学生了解到什么是程序设计的基础是重要的。其实,具体的程序设计语言已经是实现程序的方式了,所以它才规则详尽、语法严谨、技巧多样。从这个角度也不难理解初学的学生为什么会感到困惑和吃力。

1、注重培养学生描述算法的能力

要用计算机解决实际问题,那么,在对问题进行分析后,就要针对问题设计解决该问题的算法。设计算法就是要把解决问题的步骤用清晰的语言表示出来。有多种方法可以描述算法,如自然语言、图像符号、伪代码等。用自然语言表示算法,人比较容易理解,但书写较烦琐,而且在某些场合,由于自然语言含义的不确切性,容易引起歧义,造成误解;对较复杂的问题,用自然语言又难以表达准确。因此,一般情况下较少采用自然语言这种方式表示算法。据笔者所知,部分院校的程序设计基础课在算法描述这个知识点的教学上以介绍流程图或结构图这类用图形符号的描述方法。笔者认为除此方法之外,也应注重对伪代码的讲授。伪代码介于自然语言与程序设计语言之间,代码简单、可读性好、并且类似自然语言,使用它可使被描述的算法较容易地以任何一种程序设计语言去实现。教师在教学过程中不一定限于具体的一种程序设计语言,训练学生用不同方法描述解决问题的算法,特别是伪代码,可以增强他们组织语言的能力,进而更好地理解程序的控制结构。

2、注重培养学生良好的程序设计风格

程序是最复杂的东西,良好的格式能使程序结构一目了然,便于编程人和其他人理解它,同时有助编程人的思维,帮助其发现程序中不正常的地方,使程序中的错误更容易被发现。因此从学生学习开始,教师就该讲授什么是良好的程序设计风格,并严格要求学生按分层缩进法书写和键入程序代码,尽量避免学生养成不良习惯后再去纠正,为时已晚。

3、注重培养学生分析问题的能力,从不同角度分析问题

多数教材在第一章就能见到程序代码,虽然在代码后会有注释,但学生在课程学习之前多数是从未接触过程序设计语言的,他们不懂语法语义规则,这个时候即使只是简单的格式输出程序代码,学生也是难于理解的;在学生学习一段时间有一定基础之后,他们又迫切需要阅读那些用于解决问题的可执行的程序代码。可见,机械地讲解教科书上的例题教学效果不好。对于一个问题,可以从提出问题的角度入手给出分析的步骤,如:什么是问题要输出的结果?什么是问题已经有的数据?用什么方法可以得到结果?或者从算法描述的角度给出同样的分析步骤;亦或从程序代码的角度,边讲解边让学生思考代码究竟是要解决一个什么问题。并且引导学生举一反三,逐渐使学生具备解决问题的能力。

四、结论

本文主要针对课时少知识点多这一矛盾对高职高专程序设计基础课教学内容和教学策略的改革进行了探讨。笔者也注意到:一个完整的课程内容通常有九大要素,即吸引注意、告知目标、追忆学前经验、呈现教材、提供指导、实际演练、提供反馈、评价成就及强化学习、保留与迁移。因此在教改过程中,除了教学内容和教学策略外,还有许多待研究的问题。

上述教学内容、教学手段的改革,已经在程序设计导论课程教学实践中运用。笔者将继续努力研究,使程序设计基础课程教学日趋完善。

参考文献:

[1](美)维尼特(Venit,S.),(美)德雷克(Drake,E.).《程序设计基础》(第三版)[M].北京:清华大学出版社,2008

[2]高林,周海燕.《程序设计方法与案例分析》[M].北京:人民邮电出版社,2005

程序设计的基本结构篇(9)

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

程序设计的基本结构篇(10)

【摘要】数据结构是高职院校计算机专业中一门专业基础课程和核心课程,本文关注了当前《数据结构》课程教学的现状,总结该课程教学中存在的一些不足,并提出了一些见解。

关键词 数据结构;算法;程序设计

1 《数据结构》课程的作用及意义

1968年美国唐纳德·克努特(Donald Ervin Knuth)教授开创了数据结构的最初体系,他所著的《计算机程序设计艺术》第一卷《基本算法》是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的著作,是《数据结构》的经典之作。随后,数据结构作为一门独立的课程开始进入大学课堂。

数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。主要内容包括数据的逻辑结构,数据的物理存储结构和对数据的操作(或算法)。通常,算法的设计取决于数据的逻辑结构,算法的实现取决于数据的物理存储结构。数据结构是通过对数据的抽象与研究,帮助我们把生活中具体的事物抽象出数学模型,从而帮助我们写出“好”的算法。

数据结构课程与数学、计算机硬件和软件有十分密切的关系,它是介于数学、计算机硬件和计算机软件之间的一门计算机专业的核心课程。伴随计算机应用领域的扩大和软、硬件的发展,非数值计算性问题使得人们越来越重视数据结构,所有的计算机系统软件和应用软件的设计、开发都要用到各种类型的数据结构,已成为高级程序设计语言、操作系统、编译原理、数据库、人工智能、图视学等课程的基础。同时,数据结构技术也广泛应用于信息科学、系统工程、应用数学以及各种工程技术领域。《数据结构》的学习越来越被人们所重视,成为构建计算机类专业群的重要课程。目前,这门课程不仅在本科段开设,同时也是高职高专院校计算机相关专业开设的主要课程之一,许多非计算机专业的理工专业也都将它作为必修课程或热门选修课。

学习数据结构的目的是使学生在软件开发的过程中能够正确、合理地选择数据的存储结构,有效地设计算法,从而提高软件整体质量,既可以为后续课程的学习以及软件设计水平的提高打下良好的基础,也可以培养学生的分析与解决问题能力,提高学生的思维能力和程序设计能力,进而促进学生的综合应用能力和专业素质的提高。

2 《数据结构》课程教学现状

《数据结构》课程具有概念抽象、理论性强、逻辑性强、难度大等特点,它涉及到不同的数据逻辑结构和存储结构,以及相应结构上的算法,因而总被认为是一门深奥、抽象的课程,一门理论性很强、和实践相脱节的课程。学完后不能形成一个完整的知识体系,学生为了考试而学习,而在程序设计的能力上不能得到提高,分析原因主要有以下几点:

2.1 教学目的不够明确

《数据结构》课程本来是以在程序设计过程中总结而得到的数据组织和操作的体验和认识,用于程序设计的指导工作,而当下的教学很大程度上只要求掌握数据结构的几种基本类型和基本操作,期望通过基本数据类型的掌握能够用于指导实际程序设计。这就使得教学过程偏重理论而忽略了本课程的根本目的和意义,导致学生对学习这门课程的作用不够明确。从而使学生感觉课程内容抽象、算法复杂、实用性不强。

因此,学生的学习目的主要变成是为了应付考试,只注重课本上的理论内容,而不去考虑在具体程序设计中如何去使用《数据结构》基本理论来设计和解决具体的问题。在课程设计中,学生只是为完成编程去苦苦思索,而根本就想不到如何去进行数据的有效组织和实现数据的基本操作。很难想象不带问题去学习一门课程,会有很高的学习积极性。

2.2 教学内容不尽合理

学习《数据结构》课程的最终目的是为了使学生获得求解问题的能力,就是从实际问题中抽象出数学模型,选择合适计算机表示的数据结构,再把解决问题的算法程序化,这是一个复杂抽象思维的过程,是一项创造性的智力劳动。但从目前的教学内容来看,强调的是数据结构的各个模型内容,每个模型只是说明模型的结构和模型的计算机实现,在理论描述上力求做到尽善尽美,从内容安排上,各个模型之间表现为相对独立的关系,使得学生在学习过程中不能将课程的内容联贯在一起而形成一个整体,更就谈不上思维训练、分析和解决问题能力的提高了。

而课程安排的实验环节,通常是对所讲述的内容的伪代码翻译成高级语言进行调试,或者是仿造例子依葫芦画瓢地来解决一个简单的问题。没有通过具体应用教会学生解决问题的思路、算法思想和数据结构的使用,在实验中也只能停留在完成课本内容,而对实际问题则是一筹莫展。

2.3 教学方式不够新颖

计算机技术日新月异,程序设计的思想也在不断发展。程序设计方法已从面向过程的设计方法发展到面向对象的程序设计方法。然而目前大部分的数据结构教学方式还是停留在面向过程的设计思路上,所使用的教材也大致类似,教师按照课本的思维方法传授知识,学生被当成听众。这种教学思维严重落后技术发展的的现象制约了教学效果的提高。

教学手段比较单一,依然主要是老师讲,学生听的状况。学生接受的知识局限于教材和老师授课的内容,学生的认知水平被压制,出现能力强的学生不满足,能力弱的学生比较吃力的现象。这种单向的教学方式,不利于《数据结构》课程的学习,对锻炼学生创造和分析问题的能力也无益处。

2.4 学生素质有所制约

必要的数学知识是学好《数据结构》课程的前提。目前,由于高职学生的基础较差,特别是数学基础更加薄弱,这对《数据结构》课程的学习极为不利。另外,《数据结构》课程的教学基本上都是在学过一门或几门程序设计语言(如C语言)的基础上进行的。不少学生对这些程序设计语言课程就没有学好,因此学习《数据结构》课程就觉得困难。再加上学习的积极性不高,学习的目的性不明确,学习习惯不良等,因此学习效果可想而知。

3 方法出路

基于改变上述现状的思考,可以从以下几方面着手:

3.1 整合教学内容

首先从教材的选用上,力求教材版本新、质量高,以防止教材内容滞后。教材内容的编排,要以程序设计的基本原理引领数据结构的内容;教材内容的描述,要以程序设计技术发展相对应的手段,如现阶段可选择面向对象的方法描述;其次要及时把反映学科前沿动态的新成果反映在授课内容里,如数据结构的描述上尽量使用面向对象的方法,描述语言尽量选择目前较为流行的C++、JAVA等语言;再次是教师在授课过程中,对教学内容进行整合,将形似分散的各种数据结构类型通过实例能够组成一个整体。

同样的,实验的内容也应是配合授课内容,对同一项目能够逐步深入,从低效率的程序设计,随着数据结构内容的不断深入,不断完善程序。体会采用不同的数据组织方式,带来不同的程序运行的效率。

3.2 改进教学方法

将学生为主体,教师为主导的教学模式始终贯彻于教学的全过程。采取实例式与研讨式教学相结合的方式,以项目作为切入点,分组组织学生对项目展开讨论,在讨论的过程中发现并提出问题,老师参与学生的讨论并针对问题讲解解决问题所需要的数据结构的知识。这样学生由被动变主动地学习课程内容,既增加了师生之间的互动,也调动了学生学习的主观能动性;同时,学生的发现问题,分析问题、解决问题的思维能力也得到提高。

3.3 加强实践环节

提高学生程序设计的能力是《数据结构》课程的目的之一,实践环节自然必不可少。而且也只有通过实践才能体会到数据结构对程序设计的影响。首先对每一部分的理论内容安排实验内容,既要使学生能够加深对所学内容的理解和应用,也要通过实验让学生逐步提高程序设计的逻辑思维能力,摆脱的单纯的为了解决某个问题而编程的粗放方式。其次是要合理安排课程设计的内容。课程设计是对所学内容的一个综合练习,也是检验学生具体应用所学内容的能力。在题目选择上应考虑学生的知识水平层次,从难度上做到难易结合,由浅入深完成设计内容。关注解决问题中程序设计的过程,规范化程序设计思维。三是剖析讲解典型程序设计中数据结构的具体使用过程,以增加学生对数据结构的实际应用的直观感性认识。

4 结束语

纵观作者数年来的《数据结构》课程的教学实践,仅是根据自己的教学经验和体会,提出了存在的问题,并在实际的教学工作中积极摸索改进方法。经过多年的努力,学生的程序设计能力都得到不同程度的提高,也增强了学生对计算机课程的学习积极性。

参考文献

[1]张红霞.数据结构教程与实践[M].北京理工大学出版社,2006.

上一篇: 碳减排的经济影响分析 下一篇: 科普宣传内容
相关精选
相关期刊