欢迎来到易发表网,发表咨询:400-808-1701 订阅咨询:400-808-1721

关于我们 期刊咨询 科普杂志

程序设计的基本结构优选九篇

时间:2024-04-02 11:29:39

程序设计的基本结构

程序设计的基本结构第1篇

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

当前, 计算 机技术飞速 发展 ,程序设计技术已从结构化程序设计技术向面向对象程序设计技术过渡,对一个规模较大的应用程序,总体框架是由面向对象程序设计构搭而成,而在局部实现时仍需采用结构化程序设计技术。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语句。将程序设计针对的问题进行分解,直到分解到对应于一个个功能更简单,又独立的模块,每个模块再分解到上述3种基本程序结构。

程序设计的基本结构第2篇

【关键词】 程序会计; 结构化程序会计; 结构化; 会计基础规范

【中图分类号】 F230 【文献标识码】 A 【文章编号】 1004-5937(2016)20-0015-03

我国现实会计实务中,由各种原因形成的财务不规范和失真等问题已引起了会计专业内外人士广泛的关注,这些问题给会计监管、会计安全、会计公正带来不小的隐患,也给惩治腐败和预防国有资产流失留下漏洞。目前,针对这些方面的问题会计学术界给予了高度的重视,对其现象、成因也有许多的论述与分析,并提出了不少可行的建议,尤其是程序会计理论的提出,从理论层次指出“从会计的程序公正层面实现会计的公正”[1]的途径和可能性。但在实际会计实务中,程序并不能完全保障会计业务处理的规范,程序的设计、参数、执行、结果处理等方面都制约和影响程序的最终结果,这就提出必须使程序会计的运行符合一定的条件,也就是程序必须在一个结构的约束下来进行运行,结构化程序会计思想正是解决这一问题的假设模型。结构化程序会计思想有其自身的特点和优势,只有在这个模型下才能更有效地实现会计基础规范。

一、程序会计理论

程序会计是建立在程序公正理念上的关于会计确认、计量、记录和报告的时间顺序和方法步骤范畴(包括建立这些规范的程序本身)的总称。或者说,程序会计是一种程序化的会计确认、计量、记录和报告体系[2]。程序会计理论来源于对程序价值的充分肯定,不管是从“纯粹的程序正义”“完善的程序正义”“不完善的程序正义”[3]三个方面来看,还是从程序法法律实践看,“程序公正的标准是确定的、绝对的、容易遵循的、便于操作的”[1]。

程序会计理论将程序会计分为“纯粹的程序会计”“完善的程序会计”“不完善的程序会计”三个方面,认为程序具有独立的价值,应当树立起程序至上的理念。

二、程序会计理论在实践中的局限及结构化程序会计的提出

朱小平和马元驹提出的程序会计理论阐述了采用严格构建并遵循预设置的会计程序就能达到会计合理的结果,但该理论却忽视了程序运行所依赖的外层环境和基础设置,理论提出“程序会计追求会计过程的合理,只要严格构建并遵循预设置的会计程序就能达到会计合理的结果”[1]这一假设,但如何保障严格构建?如何确保“严格遵循预设置”并没有进一步的论述。所以,程序会计理论需要进一步完善。会计实务中很多问题并不是没有按“会计程序”操作但还是产生了,实际上,常见的一些问题正是因为一个设置不正确从而导致最后会计程序结果的错误。这样的例子很多,以某局系统会计基础规范化考核情况的通报为例:

(1)某系统下属全额单位自行发放或超出政策规定标准和范围发放补助、补贴。(2)某单位由于历史原因,几年前的财务人员对账不及时,截至检查日该单位有三个银行账户已销户,但银行存款账面尚有余额,银行存款账实不符。(3)个别单位未按要求设置会计岗位,岗位分工不明,等等。

这些问题并非完全是会计程序的问题,而是“严格构建并遵循”的问题,那么如何解决呢?结构化程序会计思想为解决“严格构建并遵循”这一问题提供了框架和可能。

三、结构化程序会计

(一)结构化的概念

结构是物质系统内各组成要素之间的相互联系、相互作用的方式。结构既是物质系统存在的方式,又是物质系统的基本属性,是系统具有整体性、层次性和功能性的基础与前提[4]。

结构化是指将整体经过分析分解成多个互相关联的组成部分,并从整体的视角去揭示各组成部分在整体这一架构内的功能和关联性,它强调组成部分在整体中相对完整的意义及在整体这一架构内的所处位置和功能,同时也强调架构在整体中所具有的功能性、独特性和稳定性。

结构化也可以从工具的视角进行理解,从结构化角度来研究事物系统,可以根据对象系统的结构来推测对象系统各组成部分的功能;反过来也可以依据对象的功能来预测系统整体的结构,从而实现对事物系统的充分利用和改造。

结构化强调架构在整体中所具有的功能性、独特性和稳定性的特征,使任何一个系统建构变得具有完整性、可控性、可移植性和简洁性。

结构化和单一性相对立,结构化揭示架构内各单一性要素的广泛联系和作用,结构化也因其具有稳定性而具有可移植性并呈现标准化。

结构化概念在其他领域也起着广泛和重要的作用,如德国西门子公司实施的结构化面试。结构化面试是按照一套标准的结构程序来进行,面试的内容、形式、程序流程、评分标准以及最终结果的生成与分析等,全部按照一套完整的设置和标准来进行,使得面试的实施过程更为规范,面试结果也更为客观、公平、有效[5]。

(二)程序的结构化

结构化是指所有要素的结构化,也包括程序的结构化。程序是指特定的一系列动作、行动或操作,而这些行动、动作或操作必须被运行于相同方式以便在相同环境下恒常得出相同的结果(例如紧急应变程序)。不太精确地说,程序可以指一序列的活动、作业、步骤、决断、计算和工序,当它们保证依照严格规定的顺序发生时即产生所述的后果、产品或局面。一个程序通常引致一个改变。

程序的结构化是用结构化概念对程序进行分析和理解,不管任何类型的程序,都具有一些基本的架构和功能,可以划分为输入、循序、选择、重复、输出等。

输入:指原始值的进入,在会计实务中是指各种需要处理的各种原始财务数据。

循序:指按照一定的顺序进行作业,在会计实务中是指报账流程、记账流程、核算流程、报废流程。

选择:指预设的各种判断和执行方向,在会计实务中是指对标准的判断和执行不同的标准,如绩效考核方案的执行。

重复:指从某一点开始再次按照一定的顺序进行作业,也常用于纠错流程,在会计实务中是指预算控制、核对证、账、表的相符,各级的检查。

输出:指最终值的产生,在会计实务中是指最终的财务数据,如月、季、年报表等。

(三)设置的结构化

设置是指保障程序运行的环境和基础。现有程序会计理论提出:只要严格构建并遵循预设置的会计程序就能保证会计的公正结果,但这个假说是有一个“严格构建并遵循预设置”的前提条件的,这个前提条件就是说程序是需要一定的环境和基础才能正确运行的,这个环境和基础是一个重要的前提条件,不管任何类型的程序流程都需要环境和基础,都需要环境和基础这个设置。设置的结构化就是用结构化方法对程序流程的环境和基础进行分析和建构,通过分析就会发现会计程序流程的环境和基础必然包括一些最基本的架构和要素:即程序流程的控位、框架、操作点、机能等。

1.控位

控位是指程序流程中的控制位,结构化程序会计中的“控位”(控制位)设置是必须的,程序不论其系统的大小,如果缺失“控位”,程序会计将难保规范。在“控位”中,“位”的设置是关键的要素,如“控位”在结构中的层级、多少、所属等,它处在程序流程中的关键控制点和关键环节点。如核算系统中(组织、层级)总负责机构(人)。

结构化程序会计的“控位”可以近似地理解为会计实务中的各级负责人或稽核人。

2.框架

框架是指结构化程序会计程序流程初始值的设置,它定义了程序的性质、方向等特征。可分为基础性框架、倾向性框架、强制性框架。

基础性框架为会计一般性常规规范,如会计数据的分析、鉴定、登记、归类、计算和编报的要求和方法。还包括凭证格式、编号、算法、系数的采用等。

倾向性框架为各种倾向性设置,如本机构预算管理、作业成本法以及责任会计等。

强制性框架为国家及各级管理机构的规范和标准要求,如《财务会计制度》《会计法》等。

框架是结构化程序会计运行的基础、规则和规定,同时也是会计基础规范是否失范失真的评价标准。框架是在程序运行时提前装载和设定的,在传统会计管理中,框架是通过会计实务中的各种制度来体现的。

3.操作点

操作点为结构化程序会计系统中人、岗的设置,也包括大型系统中机构的设置,操作点是程序运行中的一环,融入程序运行之中。

“操作点”和“控位”不同,“控位”可处于程序之外,控位调节和控制结构化程序会计的运行,而“操作点”在程序之中,只能在程序所限定的空间内进行活动,操作点在程序流程中一般指收费员、出纳员等。

4.机能

机能是发现问题、纠错监督和反馈机制,在结构化程序会计中“机能”的设置必不可少。机能首先的作用是反馈,反馈包括项目的反馈、运行状态的反馈和特殊问题的反馈。如“收入资金日报表”“借款还款进度表”“工资费用月报表”属于项目的反馈;“经费分析报告”“财务分析报告”“预算执行进度报告”属于运行状态的反馈;“证、账、表检查记录”“账户检查记录”“资产盘查记录”属于特殊问题的反馈。在反馈的基础上同时设置必要的纠错和监督机能。可以看到,会计实务中的很多问题是由于“机能”设置不到位造成的。

(四)结构化程序会计

综上所论,结构化程序会计可以概括为通过全面系统设置和搭建会计作业程序流程及程序流程条件和环境,使会计实务程序运行在规范的关键核心要素和环境中,从而确保会计实务的规范和真实。结构化程序会计是会计基础规范的必由之路和理论支撑体系。

四、结构化程序会计的特点

结构化程序会计在实施时更容易搭建和进行要素设置。因为结构化的特征使得它的程序更加严谨,结构更加稳定。表现在以下方面:

1.要素全:结构化程序会计思想囊括了会计实务的方方面面,如会计机构、会计制度、会计人员、会计程序、会计的凭证、账簿、报告、档案等,这种全要素保障了结构化程序理论能够解决会计实务中的各种问题,支撑会计基础规范的实现。

2.可移植性:因为结构化程序会计的结构化特点,会计要素及程序流程变的“组件”化,这就为会计工作在不同机构组织中设置或在跨组织机构中进行移植变得简洁和容易。

3.安全性:结构化程序会计不仅重视程序公正的价值,更重视结构化的环境和设置要素的价值。“控位”和“机能”的提出增强了程序会计的公正性和安全性。在结构化程序会计中责任明确,可控性更明晰、更安全。

五、提出结构化程序会计理论的意义

(一)有利于会计理论研究

结构化程序会计作为一个新研究角度,有利于改变目前会计研究中角度单一的格局,进而为会计研究提供一个新的视角和方法。

(二)有利于软件的开发

会计实务中常用的是核算型财务软件,因为制约管理型财务软件开发的主要难点是软件环境搭建及设置要素模糊。而结构化程序会计理论为破解这一难题奠定了基础,为财务管理软件的开发提供了理论框架,我们也期望在会计实务中能够引入更多的人工智能,这样更加有利于会计基础的规范、真实、安全和公正。

(三)有利于责任划分和产生问题后的责任认定

用结构化程序会计设计和组织会计工作,环节明确、职责清晰,便于更好地保证会计程序运行不受“非法”因素的干扰,对会计程序运行进行“合法”的控制,对不规范行为更好地进行防范,更便于出现问题后的查找和产生问题后的责任划分及认定。

(四)减少人为因素干扰

有利于树立结构化程序在会计工作中的独特地位。结构化程序会计理论的提出,会让会计人员用新的视角审视和设计会计工作。从会计从业人员的根本思想意识上树立规范的思想,减少各方面的人为因素对会计真实公正的干扰。

(五)能对会计工作进行更好的检测和诊断

用结构化程序会计理论分析和检测,更便于发现会计实务工作中的内在机理,更能准确地发现问题和解决问题。以本文上面提到的某局系统会计基础规范化考核情况的通报为例进行检查诊断。

1.某系统下属全额单位自行发放或超出政策规定标准和范围发放补助、补贴。

诊断分析:这是一个强制性框架设置的问题。

2.某单位由于历史原因,几年前的财务人员对账不及时,截至检查日该单位有三个银行账户已销户,但银行存款账面尚有余额,银行存款账实不符。

诊断分析:这是一个“机能”缺失的问题。

3.个别单位未按要求设置会计岗位,岗位分工不明。

诊断分析:这是一个操作点设置错误的问题。

综上所述,结构化程序会计的提出,为解决财务会计基础规范失真的问题提供了一条可能途径。当然,笔者提出的观点能否成立,有待于进一步的探究和实证,这些初步的探索和尝试旨在抛砖引玉,以便促进会计界理论和实践的发展。

【参考文献】

[1] 朱小平,马元驹.论程序理念与程序会计[J].甘肃社会科学,2004(5):211-215.

[2] 朱小平,马元驹.论会计的程序公正[J].财会月刊,2004(1):5-7.

[3] 姚大志.一种程序正义――罗尔斯正义原则献疑[J].江海学刊,2010(3):31-36.

程序设计的基本结构第3篇

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

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系统不仅可以作为程序设计基础课程的实践平台,还可作为数据结构课程的实践平台。

程序设计的基本结构第4篇

C语言 结构化程序设计 循环结构 效率

一、引言

学习和应用计算机高级程序设计语言的人都知道,在这些语言中为实现结构化程序设计,一般都会采用三种最基本的结构,即顺序结构、选择结构和循环结构。因此,掌握这三种基本结构的使用方法,是学习和掌握高级程序设计语言课的基础。这三种基本结构中,顺序结构和选择结构和我们平常的思维习惯相似。因此,最容易理解和掌握;而循环结构是这三种基本结构中最复杂的一种结构,与我们日常的思维习惯不尽相同,因此理解起来相对来说比较困难。但是,几乎所有的程序都离不开循环结构,利用它可以简化程序、提高工作效率。因此,学习和应用高级程序设计语言的人又必须要掌握循环结构。但是,通过本人近几年的教学发现,大多数学生在学到循环结构一段时间后,干脆将这门课给放弃了,原因是他们觉得循环结构太难理解了。用顺序结构和选择结构做一个小程序还可以,用循环结构实在难理解。鉴于这个原因,本人将日常授课中总结出来的一点心得从初学者的角度写出来,希望能对即将和正在学习高级程序设计语言课的人有所帮助。当然,我们在这里是以C语言为例来说的,其实这方面的知识对其他语言比如Visual Basic语言等同样适用。

在C语言中,循环结构主要是由For语句、While语句、Do-While语句三种结构来实现的。而在这三种循环结构语句中又以for语句的应用更为广泛。因为for语句在其开头语句中就已经包含了循环变量的初始值、循环变量的终止值、循环的判断条件以及循环变量的变化趋势等这些内容,因此在编写其循环体时,只用考虑其循环体应该包含的主要功能就行了,而不用在For语句之前对循环变量的初始值进行过多地考虑,同样也不用在循环内部考虑其循环变量如何变化。对大多数有程序设计经验的人来说,使用for语句实现循环结构是一件轻而易举的事情。但是,对于没有经验的初学者来说,要想将for语句的作用及使用方法掌握住也不是一件容易的事情,更不用说While语句、Do-While语句的使用了。因此,本文从初学者的角度,阐述了C语言中循环结构的几种典型应用。

二、用循环结构输出几何图形

在教学过程中,不管开设哪一种高级程序设计语言课,只要一讲到循环结构,大多数老师几乎不约而同地选择输出简单的几何图形来作为讲解循环结构的最好实例。

对于这种类型的题目,初学者往往最容易想到的方法就是采用多条输出语句来完成程序的设计。虽然这种方法很快能够实现所要效果,但其缺陷也是很明显的:缺乏灵活性、程序修改起来不方便,也不符合程序设计的思想。比如,我想让大家输出8行,每行36个“*”。这个时候,我们就不得不在输入“*”的时候特别仔细,因为一不小心可能个数就不对了。

但是,这样的问题如果用循环语句来实现的话,程序不但可以简化多,并且可以很灵活地将其修改成我们想要的效果。

因此,在讲解这一类图形时,授课教师最好引导学生按照正常的程序设计思想,先分析图形的组成结构,找出其中变化的规律,然后按照所找到的规律用循环结构来编写出相对应的程序代码,这样一旦要求有一点点变化不用大篇幅地修改程序,而只用找到关键的几个地方修改一下就可以了。教师在讲解的过程中,可以举一反三,多次修改、让学生反复练习,直到他们理解为止。

现在,我们来具体分析一下该图形,看看它有什么样的特点,然后我们利用For循环将它的程序代码编写出来。

三、结束语

以上关于循环结构的使用基本上都是在程序设计教学过程中的一些体会与总结,可能比较肤浅,但是对于初学者来说,掌握这些知识还是有必要的。在进行课程教学的过程中,将自己在学习过程中得到的一些好的方法传授给学生,让他们从中去实践、体会,从而引起他们更大的学习兴趣是必要的。如何让一名初学者尽快摆脱日常的思维定式,更加透彻地理解和掌握程序设计中的基本思想,领会程序设计的精髓,是高级语言程序设计这门课程在讲授过程中,应该时刻注意的问题。更希望学生在学习的过程中不只是从老师这里拿一些现成的经验去使用,更重要的是让学生学会自己去发现问题、解决问题,总结出一些更好的程序设计方法,为以后进行软件开发与设计打下良好的基础。

参考文献:

[1]谭浩强.C程序设计(第三版)[M].清华大学出版社,2005.

[2]苏运霖.计算机程序设计艺术第1卷・基本算法[M].北京:国防工业出版社,2002.

[3]谭浩强.C语言程序设计(第二版)[M].北京:清华大学出版社,1999.

程序设计的基本结构第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篇

关键词: 高级语言程序设计 流程图 控件 子程序 参数传递

一方面中职学生在初中阶段基础较差,另一方面对于高级语言程序设计的教学不同教材编写者有不同的思路,为了适应中职学生的学习,在教学中如何更便于学生掌握高级语言程序设计,我在长期从事高级语言程序设计教学的过程中摸索出一套针对中职学生教学的组织教材的思路,下面就以Visual Basic语言为教学背景谈谈教材组织,请同行予以批评指正。

首先,让学生熟悉所学的高级语言程序设计的程序结构。不同的高级语言的程序结构的描述过程是不同的,以Visual Basic语言为例,它的程序结构大至如下:

End Sub

因此,让学生熟悉上述的结构描述方法,让它像模板一样印在学生的脑袋中,对于学生对该语言的编写格式的直观认识及后续的学习会起到良好的作用,同时也会为后续学习数据类型、运算符、表达式和常用函数的上机调试扫除障碍。

其次,让学生熟悉所学的高级语言程序设计上机的调试环境和掌握基本的调试步骤。对于程序设计的最终结果是否正确,上机调试是必过的一关,不同的高级语言程序上机的调试环境是不同的,有的调试环境功能单一,有的调试环境功能很多,我认为首先掌握基本的调试功能,再根据需要逐步介绍和掌握调试环境所提供的其他功能,这样更有利于学生学习。以Visual Basic语言为例,我们要求学生首先掌握以下几个技能:建立一个新的工程,打开代码编写环境,保存一个工程,打开已有的工程,知道运行程序,自如查看运行的结果,并从运行结果中返回并重新修改程序。至于Visual Basic语言集成开发环境中所具有的其他功能,则根据具体调试演示时的需要零散分开,并个别介绍,这样学生将掌握得较好。

再次,让学生掌握程序的基本输入、输出语句或函数的功能及用法。程序要进行调试就要有各种各样测试的数据及根据测试数据运行后显示出的测试结果,以验证所编写程序是否正确,这就要求掌握基本的输入输出语句的用法。在Visual Basic语言中,inputbox()函数和print语句的用法就是必须掌握的。通过以上,学生掌握了程序设计的基本“骨架”,以及输入输出语句的用法,就可以进行最简单的顺序结构程序的设计了,从而在较短的时间里体验到成就感,为后继学习树立信心。

另外,在讲解顺序结构程序设计的过程中就要开始逐步地把流程图的识读及使用方法教授给学生。流程图能直观地表示整个程序设计的流程, 程序的编写只是对流程图的一种语句的细化过程,因此看懂流程图既方便程序设计的讲解,又便于学生在课后通过流程图了解程序设计的思路进行复习或思考,从而避免由于对识读程序的困难造成理解上的不便。我曾试图让学生没看流程图而直接通过程序语句来理解程序设计思路,与让学生通过流程图来理解程序设计的思路相比,显然前一种方式对学生来说要困难得多,而且时间长了就很难再理解,而通过流程图显然更容易,即使时间久了重新识读起来也相当容易。

不要把控件的功能及属性单独介绍。以Visual Basic语言为例,很多教材都是以顺序结构、选择结构、循环结构、常用控件的顺序来组织教学,我认为这样让学生感到很枯燥。因为很多实例在内容上涉及许多数学的知识,而学生本来数学基础就很差,这样学生厌学的情绪会增加,既不利于教学,又不利于学生学习。因此在教学中应把后面要掌握的控件分别有意识地穿插在顺序结构、选择结构、循环结构课堂的实例中,让学生生动地用各种控件结合顺序结构、选择结构、循环结构程序实例来学习程序设计。一方面,学生不仅有浓厚的兴趣而且很容易体验到成功的喜悦,另一方面又联系紧密、节省课时。当然这样穿插教学,程序样例的选择就非常关键,每个样例都要精挑细选,每节新课牵涉到的控件以1~2个为宜,否则控件太多的话就会造成课堂时间不足,学生掌握得也不好。

最后就是子程序与参数的传递要放在该门课程快结束时再介绍。这部分内容对学生来说相对较难,特别是参数传递,若在学生还未掌握好程序设计或程序设计还不熟练时就介绍,学生就会思路混乱,从而增加学习难度。若学生都已经能熟练地进行程序设计,在此基础上再进一步地增加子程序与参数的传递的知识,就会锦上添花,学生和老师都会有事半功倍的体验。

当然,对于教材中的其他内容,则基本上根据教材编写的既定内容进行讲授。以上是我在高级语言程序设计教学中的体会,至于是否适应其他老师的课堂教学要求,还要在实际教学中进一步探讨。

参考文献:

程序设计的基本结构第7篇

结构程序化设计方法如下:

结构化程序设计方法是按照模块划分原则以提高程序可读性和易维护性、可调性和可扩充性为目标的一种程序设计方法。在结构化的程序设计中,只允许三种基本的程序结构形式,它们是顺序结构、分支结构、(包括多分支结构)和循环结构,这三种基本结构的共同特点是只允许有一个流动入口和一个出口,仅有这三种基本结构组成的程序称为结构化程序。结构化程序设计适用于程序规模较大的情况,对于规模较小程序也可采用非结构化程序设计方法。

(来源:文章屋网 )

程序设计的基本结构第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

[3]谭浩强.《C程序设计》(第三版)[M].北京:清华大学出版社,2005

程序设计的基本结构第9篇

关键词:C++;面向对象;程序设计;类;教学方法

中图分类号: TP311 文献标识码:A 文章编号:1009-3044(2015)34-0118-03

Abstract: There are lots of knowledge points included in the course, C++ Object-Oriented programming, which makes it hard for students to grasp the key ideas of it. This paper introduces the teaching methods in the course to elaborates the key points like classes and their inheritance mechanism, and explains the difficult points like constructors, operators, etc step by step by focusing on examples, which facilitates the comprehension of students. This teaching method has been successfully applied in the course, and a good result has been obtained.

Key words: C++; object-oriented; programming; classes; teaching methods

1 概述

“C++面向对象程序设计”是计算机专业学生一门重要的专业基础课,学生在掌握C++结构化程序设计的基础上,通过这门课程的学习,进一步掌握C++面向对象程序设计的基础知识。

由于“C++面向对象程序设计”涉及的知识点非常多,初学者很难在短时间内领会面向对象程序设计的核心思想,在面对实际问题时,难以用面向对象程序设计的方法构建出合理的程序框架。

因此在“C++面向对象程序设计”课程的教学中,需要抓住重点,理清难点。对类的概念、继承的机制等关键知识点着重阐述,使学生掌握面向对象程序的基本结构;针对难点问题,如构造函数与运算符重载等,结合具体实例,由浅入深进行分析,使学生掌握面向对象程序设计的基本方法。

2 建立类的概念

类的概念是面向对象程序设计的基础,体现了面向对象程序设计的两大特性,即抽象性与封装性。

在进行结构化程序设计时,根据题目要求,先设计函数,再在主函数中定义变量,存放原始数据,之后调用函数进行处理操作,最后输出结果。

在进行面向对象程序设计时,要先根据题目要求设计类,再在主函数中定义类对象,存放待处理数据,接着调用类的成员函数实现处理操作并输出结果。

因此类的设计是进行面向对象程序设计的关键步骤。在介绍类的设计时,先从一个简单的类――学生类入手,使学生对类的概念有一个初步的了解。在此基础上,再将一些C++结构化程序设计的经典例题,如求给定范围素数、一维数组应用、二维数组应用等,改用面向对象程序设计的方法去实现,使学生进一步了解类的设计过程,能够根据题目要求,确定类中的数据成员及成员函数,从而掌握类设计的基本方法。

在完成类设计的基础上,进一步掌握类的应用,即定义类对象和调用类的成员函数,从而掌握面对象程序设计的基本步骤。

3 理解类的继承机制

类的继承性是面向对象程序设计的重要特性。通过类的继承机制,实现了软件代码的重用。

在讲述单继承时,先通过简单的例题,例如学生类,介绍单继承的概念,继承的方式,派生类从基类继承成员的访问属性,以及在派生类中如何新增成员和改写基类已有的成员,派生类构造函数及析构函数的执行过程。

再通过较复杂的例题,例如图形类,进一步介绍如何根据题目要求,设计基类及派生类,如何确定基类及派生类的数据成员及成员函数,如何定义基类及派生类的构造函数等。

在讲述多重继承时,通过简单的例题,例如家具类,介绍多重继承的概念,继承的方式,派生类构造函数及析构函数的执行过程,多重继承的二义性问题以及二义性问题的解决方法――虚拟继承等。

由于给出具体实例,使学生对复杂的继承机制有了直观的了解,在解决实际问题时,能够根据要求,建立基类,并由基类派生子类,实现软件代码的复用。

4 难点问题的分析

C++面向对象程序设计的基础知识中有一些概念比较复杂,难以理解。可以通过一些简单的例题,分步骤说明概念的含义,提高学生对复杂概念的理解能力。

4.1 类对象的初始化

定义类对象时,会自动调用类的构造函数实现类对象的初始化。构造函数的概念中,复制构造函数、类继承中构造函数的执行过程,是构造函数概念的难点。

4.1.1复制构造函数

复制构造函数可以将一个已有对象的值赋给一个新对象。如不定义复制构造函数,系统提供默认的复制构造函数,而默认复制构造函数只能实现浅复制,如要实现深复制,就需要自定义复制构造函数。

在讲述复制构造函数时,先通过学生类例题,分析复制构造函数的特点,以及调用复制构造函数的各种情况,再修改类中的普通构造函数,在该函数中申请一定的内存资源。通过查看运行结果中的错误,分析出现错误的原因及解决的办法,之后修改已有的复制构造函数,增加代码,实现深复制,最终程序能够正常运行。通过一系列的分析,学生知道了在什么情况下需要实现深复制,以及实现深复制的方法,加深了对概念的理解和记忆。

学生类例题的主要代码如下。

class Student

{public:

Student(long nu=0,char na[]="noname"):num(nu)

{ name=new char[20]; strcpy(name,na); }

Student(const Student& s):num(s.num) //复制构造函数定义

{ name=new char[20]; strcpy(name,s.name);} //实现深复制

void show()

{ cout

private:

long num;

char *name;

};

void func(Student st3) //按值传递参数时调用复制构造函数

{ st3.show();}

int main()

{ Student st1(1001,"Zhang"),st2(st1); //定义对象时调用复制构造函数

st2.show(); func(st2); return 0;}

4.1.2 类继承时构造函数的执行过程

定义派生类对象时,自动调用派生类的构造函数。由于存在单继承、多重继承、虚拟继承以及对象数据成员等多种情况,分析类继承时构造函数的执行过程,需要分以下5种情况,通过例题分别加以讨论。

⑴ 单继承时派生类构造函数的执行过程

在学生类例题中,使学生类派生出大学生类,再定义大学生类对象,通过查看运行结果,使学生看到基类构造函数及派生类构造函数的执行顺序,进而介绍当基类构造函数带有参数时,派生类构造函数如何向它传递实际参数。

⑵ 单继承时派生类中有对象数据成员时构造函数的执行过程

在大学生类中,增加对象数据成员,即教师类对象,通过该例题,使学生看到定义派生类对象时,基类构造函数、对象成员构造函数、派生类构造函数的执行顺序,进而介绍派生类构造函数如何向对象数据成员的构造函数传递实际参数。

⑶ 多重继承时派生类构造函数的执行过程

通过家具类例题,使学生看到定义派生类对象时,多个基类构造函数以及派生类构造函数的执行顺序。

⑷ 虚拟继承时派生类构造函数的执行过程

通过家具类例题,使学生看到定义派生类对象时,虚基类及直接基类构造函数、派生类构造函数的执行顺序,进而介绍派生类构造函数如何向虚基类构造函数传递实际参数。

⑸ 多重继承时既有虚拟继承也有非虚拟继承时派生类构造函数的执行过程

通过例题,使学生看到定义派生类对象时,虚基类、非虚基类构造函数以及派生类构造函数的执行顺序。

通过以上分步骤讲解,使学生对比较复杂的构造函数的执行过程有直观、清晰的认识。

4.2 类对象的运算

运算符重载是面向对象程序设计中比较重要的概念。通过重载运算符,可以使C++已有的运算符能够用于类对象的运算。

重载双目运算符时,由于存在对象与对象的运算、对象与基本类型数据的运算,以及基本类型数据与对象的运算3种情况,若要定义3个运算符重载函数实现这3种运算,则比较繁琐。对后2种情况,可以通过定义转换构造函数或重载类型转换运算符,将两种不同类型的操作数转换为同一类型数据再进行运算。

⑴ 将基本类型数据转换为对象

利用转换构造函数,可以将基本类型数据转换为类对象。介绍转换构造函数时,通过复数类例题,讲清楚在类中定义转换构造函数的方法,以及转换构造函数与运算符重载函数配合使用,实现基本类型数据与类对象运算的过程。主要代码如下。

class Complex

{public:

Complex(double r=0,double i=0):real(r),imag(i)

{ }

Complex(double r):real(r),imag(0){} //转换构造函数

void show()

{ cout

friend Complex operator+(Complex rr1,Complex rr2);

private:

double real,imag;

};

Complex operator+(Complex rr1,Complex rr2) //运算符重载函数,参数应为对象

{ return Complex(rr1.real+rr2.real,rr1.imag+rr2.imag);}

int main()

{ Complex c1(3,5),c2(4.1,10),c3;

c3=10+c2; c3.show(); return 0; //将基本类型数据转换为对象

}

⑵ 将对象转换为基本类型数据

将上面的例题进行改写,在复数类中增加类型转换运算符重载函数,并将加法运算符重载函数去掉,则可将类对象转换为基本类型数据,再通过基本类型数据之间的运算得到结果。主要代码如下。

class Complex

{public:

Complex(double r=0,double i=0):real(r),imag(i)

{ }

Complex(double r):real(r),imag(0){}

operator double() //重载类型转换运算符

{ return real; }

void show()

{ cout

private:

double real,imag;

};

int main()

{ Complex c1(3,5),c2(4.1,10);

double d=10+c2; cout

4.3 类的多态性

类的多态性即动态多态性,是面向对象程序设计的重要特性。类的多态性是通过虚函数来实现的。

通过简单的图形类,介绍如何定义虚函数,及如何通过虚函数实现动态多态性。通过查看运行结果,比较未实现多态以及实现多态后的效果,使学生对虚函数实现多态有一个直观认识。在此基础上,进而介绍纯虚函数及抽象类。

5 结束语

在“C++面向对象程序设计”课程的教学中,通过对类的抽象性、封装性、继承性等重要知识点详细阐述,以及对难点问题,合理使用例题分步骤进行讲解,由浅入深,提高了学生学习的积极性和学习效率,使学生能在短时间内掌握面向对象程序设计的基本概念和基础知识,取得了较好的教学效果。

参考文献:

[1] 谭浩强. C++面向对象程序设计(第2版)[M].北京:清华大学出版社,2014.

[2] 钱能. C++程序设计教程[M].北京:清华大学出版社,2005.

[3] 郭小燕.论“面向对象程序设计(C++)”课程的教学设计[J].现代计算机,2011(8):21-24.

[4] 陈丛.高级语言程序设计教学方法探讨[J].电脑知识与技术,2012(12):8192-8193.

[5] 柳宏川,宋伟.以“类”为中心进行C++程序设计教学[J].福建电脑,2011(1):189-190.

[6] 邢翠芳,张燕红,杜晶.《面向对象程序设计》课程教学思路探讨[J].现代计算机,2013(5):44-46.