前言:一篇好文章的诞生,需要你不断地搜集资料、整理思路,本站小编为你收集了丰富的结构化程序设计主题范文,仅供参考,欢迎阅读并收藏。
结构程序化设计方法如下:
结构化程序设计方法是按照模块划分原则以提高程序可读性和易维护性、可调性和可扩充性为目标的一种程序设计方法。在结构化的程序设计中,只允许三种基本的程序结构形式,它们是顺序结构、分支结构、(包括多分支结构)和循环结构,这三种基本结构的共同特点是只允许有一个流动入口和一个出口,仅有这三种基本结构组成的程序称为结构化程序。结构化程序设计适用于程序规模较大的情况,对于规模较小程序也可采用非结构化程序设计方法。
(来源:文章屋网 )
关键词:研究;计算机编程思想;结构化程序设计思想;面向对象的程序设计思想;AOP编程思想
中图分类号:TP3文献标识码:A文章编号:1007-9599 (2012) 05-0000-02
随着经济社会的发展,信息技术也迎来了前所未有的快速发展,计算机编程的应用范围也愈加广泛。而其中的编程思想,作为一个主要条件,可以使编程人员编出更好的程序,本文分析了目前编程界最为主流的两种计算机编程思想,同时和将要兴起的新技术AOP,与OOP相比,其影响力巨大。因此,本文分析了其编程思想以及优越性,还阐述了开发步骤。
一、计算机编程思想研究
(一)结构化程序设计
对于结构化编程思想,其为面对繁杂任务的时候,防止混乱的一种编程思想,重视将程序结构进行规范化,要按照大脑极易理解的方式,合理组织繁杂问题的求解过程。针对此编程思想,编程者应该遵循结构形式,进行程序的设计及编写,保证程序的正确结构,方便地进行程序正确性的证明,该思想重点有以下几点内容:
运用由顶往下逐渐细化的方法。因为结构化编程运用了功能抽象与模块分解,其能合理地把繁杂程序任务分解为容易处理及控制的一些子任务,随后实施级别更细的任务分类,保证最终分出的子任务均是进行独立编程的子程序模块。随后根据某些调用以及结构关系,将子程序模块进行合理组织,最终得出需要的程序。根据结构化程序设计思想,得出的程序具有如下好处:很好的结构、每个模块之间有着简单清楚的关系、在各个模块内,均有基本单元构成。因此,得出的程序清楚易读,良好的可理解性,正确性还易验证,维护、调试以及修改容易进行。出现了结构化编程思想,使之前软件开发存在的混乱状况消除,编程人员编写的程序存在优越的结构。还因为运用“自顶向下以及逐步细化”的方法,使人们智力合理地组织起来,对软件工程化研发是有益的。所以程序维护以及设计工作效率得以提升。
若干基本结构构成程序,对于任意的大型程序,均包括三种基本结构,这些基本结构使某个结构化的程序得以顺序地组成。主要有顺序、选择以及循环结构这三种基本结构。软件界的具体实践以及结构化定理已证明,对于任意繁杂问题的程序设计,均可运用顺序结构、选择结构以及循环结构构成,同时还具备下面一些特征:仅一个入口及出口;在结构内,没有死循环,在程序内,以上三种基本结构的顺序执行关系得以构成。
根据功能,能把大型程序划分为若干基本功能模块。一些子模块一起构成各个模块,每个模块在功能方面互相独立,各个功能模块均有进行计算机控制以及数据处理的功能。尽量使模块间的联系简洁。最终将模块根据某些层次关系,实施组织,繁杂程序的功能得以构成。
(二)面向对象的程序设计
针对面向对象的程序设计,其编程思想是运用消息、对象、类、继承以及封装等这些基本概念,实施程序设计。为使结构化程序设计方法处理不了的代码重用这些问题得以解决,便给出了面向对象程序设计技术,面向对象的程序设计编程思想包括如下特点:面向对象的特点之一就是封装,其为类与对象概念的重要特征。封装给模块带来了比较良好的独立性,程序修改与维护起来较为简单。抽象包括数据与过程抽象。继承性使软件的可重用性这个问题得到良好处理。多态性使应用程序函数的同名这类问题得到良好解决。
面向对象的编程思想存在很多优越性,其减少了程序开发时间,提升了可靠性,开发出来的程序更有强壮性,维护起来更容易。面向对象编程因为具有较高的可重用性,针对应用程序,能积极运用成熟的类库,进而使软件开发效率得以极大提高,所以,软件界对这种面向对象的编程思想进行提倡运用。日益增多的编程人员认可并运用了面向对象的编程思想,同时结构化编程思想在进行具有比较强功能性的软件设计里,其指导作用仍然得以发挥。实际上,以上两种编程思想没有互相隔离,却是相互支持、联系的。在如今的软件界,进行面向对象程序设计的时候,具有公认的编程公式:其一为对象=算法十数据结构,其二为程序=对象+对象,通过公式,能观察出以上两种编程思想的关系及区别。进行面向对象的程序设计时候,仍然不能脱离完成算法的结构化程序设计,其中的结构化程序设计还是编写对象进行操作的重要所在。
二、AOP编程思想研究
(一)AOP将系统视为关注点
其实它为GOF(Observer Design Pattern)设计模式的一种持续,进行了被调用者与调用者间解耦的强调,给开发人员带来进行横切关注点-Crosscutting Concern描述的合理机制,还可以把横切关注点主动地织入-weaving于面向对象的软件系统内,确保横切关注点模块化得以实现,进行方面-Aspect代码的合理划分,横切关注点显得极易进行处理。开发人员进行编译的时候,插入、更改或者除去系统的方面,更可能重用系统的方面。由于开发环境各不相同,关于概念也会有所不同。
(二)针对的问题
AOP通常基于进行业务处理中的切面实施提取,进行处理的时候,其面对着其中的一个步骤或者哪个环节,以确保整个逻辑中每个部分间低耦合性产生的隔离作用。针对动词方面,其重视的为横向的,即为整个逻辑中一个方面或者某个片段,例如:权限以及日志管理,一般情况下,其进行某些软件系统自身东西的关注。并非面向对象进行业务逻辑的关注。运用有效松散方式,使系统间的耦合度这些问题减少,方面即为它的模块化单位。
(三)软件性能
1.代码扩展性
对于AOP,因为方面模块并不了解横切关注点,因此极易进行新方面的增加,并投入新功能。同时,把新的模块加到系统中的时候,已经存在的方面会自动横切进入,确保系统容易扩展。
2.代码冗余度
运用最小的耦合进行各个关注点的有效处理,保证虽然为横切关注点,还是模块化。如此实现的系统,它的代码冗余不大。进行模块化实现,促使系统的维护与理解更为容易。
3.代码重用性
AOP将各个方面变成为独立模块,在模块间,其为松散耦合。能使用其它独立的日志写入器取代此时的,进而将日志合理地写入数据库中,保证与各种日志写入要求相符。正确实现松散耦合,经常象征着代码重用性更为良好。
(四)AOP的开发程序
基于面向对象编程-OOP这种方法,AOP才得以改进,其为具有创新性的一种软件开发方法。一般具有如下的几个开发程序:
1.方面分解
进行分解,要得出横切关注点。在这个步骤中,将系统级的横切关注点与核心模块级关注点进行合理分离。
2.关注点实现
进行关注点的独立实现,将各个需求映射成为代码,编译器随后将其翻译成为一些可执行代码。能依靠另外的编程范型,把其当作前提,确保基础范型具有的优势还得以保留。比如:AOP能利用OOP当作基础范型,直接地将OOP擅长处理普通关注点的优势引用来。利用如此的实现,一般的独立关注点能利用OOP技术,其和过程型语言为很多OOP语言的基础相似。关注点实现因为按照指定过程这一形式产生,能运用C、C++或者Java这些传统语言。
3.方面的重新组合
在此步骤中,方面集成器进行某个模块单元的建立,也就是方面,进行重组标准的指定,常把重组过程称为结合或者织入,运用合适的信息进行最终系统的组建。
AOP实现能够运用许多方式进行织入的实现,进行源码至源码的变换,进行各方面源码的预处理,织入过的源码得以出现,再将织入过的源码传到编译器,最终可执行代码得以生成。运用此方式,基于Java的一个AOP实现,能将很多方面变换为Java源代码,随后通过Java编译器,将其变换为字节码,还能处于字节码级别进行织入的执行,实际上,字节码自身也为一种源码。同时,对于底层中的执行系统Java虚拟机,还能设计成为对AOP支持。基于Java的AOP实现要是运用此方式,能在虚拟机中,把织入规则载入,随后就之后载入的类均利用此规则,实际上,其能进行just-in-time方面织入的执行。
三、总结
由于编程实践的一直开展,编程思想就会产生,产生的各种新编程思想,均对编程实践进行合理指导,且均使计算机软件开发的质量与速度得以提升。在当今,AOP实现与语法尚未进行完全规范,其为基于OOP以后的编程思想的一种创新,其能选用OOP当作基础范型,具有让人无法抗拒的好处,业界会进行认可、接受,但是还要更深刻地探究其中存在的问题。
参考文献:
[1]李明.C++程序设计[M].北京:中央广播电视大学出版社,2008:l96-198
关键词:C语言;算法为先;教学模式
中图分类号:G642 文献标识码:B
1引言
为适应社会和经济的信息化需要,掌握计算机技术显得尤为重要。C语言以它结构化丰富、灵活性大、可移植性强、效率高等优点,被广大高校作为计算机专业基础课,以及许多非计算机专业学习程序设计的首选课。但是又由于C语言涉及的概念复杂,规则繁多,数据类型和运算符丰富等特点,使许多初学者望而生畏。很多文献致力于研究好的教学方法,帮助学生掌握C语言语法及上机技巧,这在一定程度上改善了教学效果,但是学生的学习热情仍然缺乏积极主动。本文通过分析算法在C语言教学中的重要作用,进一步探讨算法的教学方法,目的是从根本上激发学生的学习热情,降低学习难度。
2C语言教学中常见问题分析
算法设计、基本语法规则、程序调试是C语言教学的核心内容。算法注重解决某一问题采用的方法步骤,语法注重语言规范,用规范的C语言描述的算法必须通过上机调试才能实现,三个核心内容紧密联系。然而在教学环节中,教材内容基于语法体系,通常采用课堂讲语法、上机调程序的教学模式,忽视了算法在教学中的积极作用,殊不知过细的语法知识易使学生失去兴趣,灵活的编辑环境让学生望而却步,学生的学习热情很难调动起来。
2.1语法细节易使学生失去学习兴趣
通常C语言是学生接触的第一门程序设计语言,任何程序主要由数据和操作两部分组成,围绕这一特点,C语言教学内容可归纳为:算法,数据结构,程序结构三部分。算法是编程的指导思路;数据结构是数据的组织形式,可细分为基本数据类型,构造类型,指针类型、位运算;程序结构是操作语句的组织形式,具体包括预处理,函数,顺序结构,选择结构,循环结构。虽然C语言知识结构清晰,但是它是面向过程的编程语言,具有灵活的编程格式及丰富的运算符和函数,如果对语法细节不熟悉,以及相关概念混淆不清,很难编出正确的程序。教师往往投入较多课时,讲解C语言语法,而繁多的语法细则,不仅使学生难于记忆,而且容易误导学生的编程思路。例如scanf函数的应用:
scanf函数的一般使用形式为:scanf(格式控制,地址表列)。
格式控制是用双撇号括起来的字符串,它包含两种 信息:
(1)%和格式字符,如%d,%c,%s等,它的作用是按指定的格式输入数据;
(2) 普通字符,即在数据输入时,需要原样输入的 字符。
地址表列由若干个地址组成,通常是变量的地址或字符串的首地址。输入多个数据时,空格,回车键,跳格键为默认分隔符。
如:“scanf(“%d%d%d”,&a,&b,&c);”语句,运行时输入:689L,可得到变量a,b,c的值。如果输入语句变为:“scanf(“%d,%d,%d” ,&a,&b,&c);”,仅添加了两个逗号,仍按以上方式输入,则会出错。原因在于格式控制部分出现的普通字符“,”,在数据输入时要原样输入,正确的输入方式为:6,8,9L。可见C语言语法格式非常灵活。
运用scanf函数输入字符时,又出现特殊性。
如:“scanf(“%c%c%c” ,&c1,&c2,&c3);”语句,运行时输入:abcL,目的是将a赋给c1,b赋给c2,c赋给c3。用“printf(“%c,%c,%c”, c1,c2,c3);”语句输出,结果却为a,,b。出错原因在于:%c格式字符不需要空格作为输入字符的间隔。正确的输入为:abcL。
然而,用scanf函数输入多个字符串时,空格又成为有效的分隔符。
如:“scanf(“%s%s%s” ,c1,c2,c3);”语句,其中c1,c2,c3为字符数组名,若输入数据:How are you? L,则c1数组的数据是“How”; c2数组是“are”;c3数组是“you?”。若将语句改为“scanf(“%s”,c1);”,输入字符串:How are you? L,用“printf(“%s”,c1);”输出,则只显示How,与原意不同。如果一定要将带空格的字符串输入到字符数组c1,需要用到另一个输入函数,如“gets(c1) ;”。
虽然任何一个C程序输入数据,都可能用到scanf函数,但是它灵活的编程格式,往往使初学者在具体运用时举棋不定,忘却抓住编程题目的实质性要求。教材中还有许多值得注意和思考的语法细节,学生编程时,如果缺乏解题思路的引导,常因语法的困扰而失去编程兴趣。
2.2编程环境易让学生望而生畏
上机操作是学习程序设计的必备环节,学生可以验证语句的正确性,测试程序的功能,进一步增强对语法知识的理解和记忆。但是C语言编辑环境的一些特点,又让学生望而生畏。
首先,编辑环境基于DOS,不像其它可视化语言有友好的交互界面,加之初学者对语法知识不熟悉,编程时稍有不慎就会出错。如经常字母大小写不分;语句末尾忘加“;”;关系运算符“= =”误用为赋值运算符“=”等。初学者对出错提示缺乏了解,不知道错在哪里,更无从改正,经常一个小小的错误导致整个程序无法运行。
其次,C语言编译程序对语法检测不像其它高级语言那么严格,这种风格虽然给编程留下“灵活的余地”,却常导致一些非语法性和非算法性的隐型错误。比如程序:
main ( )
{
int a,b;
a = 32767;
b = a+1;
printf(“%d”,b);
}
运行结果为-32768,不正确,原因在于发生了溢出。系统运行时并不报错,程序中潜伏的隐型错误,给编程带来很多麻烦,增加了调试难度,对编程者提出更高要求,只有他们较全面地掌握了计算机知识,才可能检查出错误。然而初学者往往只懂得编程的一部分知识,这使他们感到C语言编程即抽象又复杂。如果没有浓厚的兴趣驱动,很容易在不知所措中放弃编程。
2.3算法为先,激发学习热情
“C语言”课程长期沿袭传统教学模式,以语法体系为脉络展开教学,重视语法细节和操作技巧,忽视算法对编程的指导作用,学生见木不见林,容易失去兴趣,经过一个学期的学习,除了掌握一些零星的语法外,收获甚微,面对具体的编程问题,无从下手。从事软件开发的人都知道,软件开发过程包括:可行性研究,需求分析,概要设计,详细设计,编码,测试,维护等几个阶段。重点在于先设计,后编码,并且整个开发环节需要不断查阅资料,反复调试修改,最终才能设计出可运行的软件,单靠记忆和背诵一些语法知识,根本无法适应实际需要。
在教学过程中,正确处理语法与算法的关系,是提高编程能力的关键。算法是程序设计的灵魂,没有正确的算法,计算机解决不了任何问题,语言只是实现算法的工具,要从算法实现的角度来介绍语言,而不是用语言来套用算法。程序设计课程本身是综合性较强的一门课,注重由设计算法到书写程序并进行调试的整个过程,它要求学生首先明晰结构化程序设计思路,知道怎么做,其次要求学生用扎实的语法知识实现编程,最后通过上机调试保证程序正确运行。然而,这个过程并非一帆风顺,会遇到许多意想不到的困难,需要耐心与毅力,只有具备真正的兴趣和强烈的好奇心,才容易完成。
经过研究与实践,教师在教学中如果注重算法为先,从算法实现的角度来介绍语法,那么不仅可以加深学生对语法知识的理解,增强语言应用能力,而且通过构造算法,培养了学生的逻辑思维,增强了学生分析和解决问题的实践能力。学生面对新的问题,会从程序设计思想的角度出发,先设计算法,在迫切想要实现的好奇心下,克服学习语法和调试程序的各种困难,变被动为主动。著名计算机科学家Dijkstra曾提到:“学编程是一个由新奇到熟悉循序渐进的过程”,继而又说:“在这种激进的新奇中含有愉悦的尝试”。
3算法教学建议
由上分析可知,C语言教学目标不仅仅是要求学生掌握语法规则或再现简单程序,更重要的是要求学生具备编程实践能力。传统教学方式,学生形成以语言为中心的思维模式,编程能力差。教师应引导学生逐步形成以算法为中心的思维模式,提高编程能力。但是算法的学习和掌握并不是一蹴而就,必须依靠平时训练和知识积累,以下提几点学习建议。
3.1以结构化程序设计思想为核心,开拓算法设计思路
学习的认知规律是将复杂问题简单化,以便于初学者理解和接收。C语言程序设计遵循结构化程序设计方法,该方法提高了程序的可读性,方便了程序的调试和维护,最重要的是该方法不拘泥于算法多变的外观形式,总结出算法结构的内在规律。学生掌握了这种规律,面对新的问题,很容易进行知识结构的迁移,复杂的编程问题将变得简单。
结构化程序设计包括结构化算法设计和结构化编程。由顺序、选择、循环三种基本结构(或基本结构的简单变形),按由上到下的顺序排列,组成的算法称为结构化算法。已经证明,结构化算法可以解决任何问题。对于特别复杂的编程项目,可以先采用自顶向下、逐步细化的分析方法,或采用模块化设计方法,把大任务分解为容易求解的若干子任务,分而治之。对于非结构化算法,还可以用等价的结构化算法替换。在设计好一个结构化算法之后,就可以进行结构化编程,C语言提供了与三种基本结构相对应的语句,进行结构化编程也并非难事。
由上可知,既然基本结构的顺序组合,可以表示任何复杂的算法结构,并且基本结构易于用C语句实现,那么学生只要深刻理解并熟练掌握这三种基本结构,就会提高设计算法和编写程序的能力。表1对算法的三种基本结构进行了总结。
说明:算法的表示方法很多,其中N-S流程图最适于表示结构化算法。表1列出了算法的三种基本结构以及相应的N-S流程图和语句的主要表示形式,学生通过该表很容易理解算法,N-S图,编程三者之间的关系。
教师要向学生说明,任何复杂算法都是由这三种基本结构构成,构造算法其实很容易,大家之所以觉得困难,是因为没有深刻理解A、B代表的含义。正如表中提到:A、B较灵活,既可以代表选择结构也可以代表循环结构,选择结构中还可以再套用一个循环,循环结构中还可以再嵌套循环或选择……由于A、B代表含义不同,可能构造出各种各样不同的N-S图,教师边阐述,边在黑板上绘制,开拓学生的思维空间。最后总结:能构造多少N-S图,就可能存在多少算法;顺序、选择、循环是三块基本的积木,形式多样的算法是由它们搭建而成,用于解决实际问题。这种教学方式,以简单的N-S图为切入点,学生很容易发现N-S图的多样性,算法的多样性,实际问题的多样性之间的联系,从而激发设计算法的浓厚兴趣。
正确的解题算法将减少程序的逻辑错误,算法用N-S图描述出来后,利用相应的C语句,学生很容易编写出程序的主体代码,至于其它编程细节,可以引导学生查阅资料。这样,学生对语法的学习由被动变为主动。精心培植的幼苗,一定期盼开花结果,学生经过一番努力,编写出的程序代码,也一定希望能用计算机实现,于是上机调试也变得既有目的性,挑战性又有趣味性。
3.2案例式教学,一题多解,培养设计算法的逻辑思维
C语言是实践性很强的一门课程,学生除了掌握结构化程序设计方法外,还必须进行大量编程训练。通常情况下,一个程序是用哪种语言实现的并不重要,关键在于算法设计的优劣。计算机科学家N. Wirth教授提出了一个著名公式:算法+数据结构=程序,由此可见程序设计的本质在于先设计出解决问题的算法。
教学初期,学生对语法知识了解甚少,教师可以根据每节课的教学目标和内容,精选程序例题,将重点放在算法的设计思路和方法上,逐步培养学生建立正确的思维模式。学生设计算法时,常犯的错误是,不会从计算机角度出发,分析实际问题内在的逻辑关系,而习惯于按照人的思维方式设计求解过程,算法往往无法用计算机操作实现。因此改变学生思维习惯,培养逻辑分析能力,尤为重要。
实践证明,对同一问题,设计多种有效算法,并对算法进行优化选择,有利于培养学生逻辑思维。通过一题多解,既拓展了学生的解题思路,增强了学生对同类问题求解的熟练程度,同时又潜移默化地培养了学生思维的科学性、严谨性。通常,不同问题间存在某种共性,一些基本算法掌握熟练后,学生很容易举一反三解决不同问题,树立起编程的信心。
例如通过一题多解,让学生熟练三个数由大到小排序的算法,进而引导学生对一组无序数据进行排列,用N-S图描述算法,更能反映出不同问题之间的联系和区别。
再如典型例题:用100元钱买100只鸡,每只公鸡5元,每只母鸡3元,每3只小鸡1元,要求每种鸡至少买一只,而且必须是整只,问各种鸡各买多少只?
对该问题设计多种算法,既帮助学生熟悉了循环语句,同时通过对各种算法进行评价,学生又深刻体会到算法设计的优劣对程序执行效率的影响。经过这种长期训练,学生求解问题时,不仅会注意算法的正确性,也会注重思维的严谨性。一题多解既培养了学生创造性思维,又训练了逻辑思维,是提高算法设计能力的有效方法。
3.3算法带动语法学习,全面提高编程能力
在编程训练过程中,学生不仅要积累设计正确,高效算法的经验,而且随着课程内容的不断丰富,还要能将各种算法转化为可执行程序,完成整个结构化程序设计过程。
以往教学模式过多重视语句命令格式,教学内容繁琐,学生需要识记的知识多,并且不易体会其用途,容易失去学习兴趣。如果在教学过程中,教师采用一些方法,充分利用学生对算法的理解和掌握,激发学习语法的兴趣,将取得好的教学效果。
首先,面对编程问题,如果学生明晰解题思路,在结构化程序设计思想的指导下,会很快设计出算法的N-S图。由前可知,算法是由顺序、选择、循环三种基本结构构成,表1只是简单地列出了三种基本结构的C语句实现,教师应广泛搜集并认真挑选典型例题,帮助学生全面掌握三种基本结构的各种语法表示。这样,学生根据算法的N-S图,就会很容易编写出程序的主体代码。
其次,教学初期,采用案例式教学,注重培养学生的算法设计能力,学生的语法知识比较薄弱,若要求他们将算法的N-S图完全转换成计算机语言,会遇到较多困难。如果教师能认真解析C语言知识,将教学内容有机组织起来(见2.1所述),再现在学生面前,那么学生在迫切想要实现算法的心理之下,借助脑海中的知识体系,会很容易寻找到相关章节,查阅还未曾系统学习的语法内容,独自完成编程过程。这样既增强了学生的学习自主性,学生在解决问题的同时,又深刻体会到语句的用途和功能,从而激发出强烈的编程兴趣。
最后,建议教师按照总体教学目标组织教学,制定每节课的语法教学任务,针对教学任务挑选例题,通过对案例的分析讲解,一方面帮助学生积累设计算法的经验;另一方面,加强学生对算法所涉及语法内容的理解,掌握和应用,学生只有正确理解并熟练掌握每一个基本概念,编程时才会少犯语法错误,从而减少不必要的程序调试,逐渐树立编程的信心。
4结束语
C语言是计算机基础教育的重要组成部分,教学目标在于培养学生的编程能力。多年来,教学模式一直围绕语法体系,学生学习兴致不高,分析和解决实际问题的能力差。经过多年教学与实践,本文倡导算法为先的教学模式,以结构化程序设计思想为指导,通过案例式教学,提高学生算法设计能力;利用学生对算法的理解和掌握促进语法学习,进而提高学生将算法转换为计算机语言的能力;算法和编程能力的提高,将有效减少程序中的逻辑错误和语法错误,降低调试难度。由此可见,算法为先的教学模式,有利于提高学生的程序设计水平。
参考文献:
[1] 谭浩强. C语言程序设计[M]. 北京:清华大学出版社,2000.
[2] Edsger W. Dijkstra. On the Cruelty of Really Teaching Computing Science[J]. Comm.ACM,1989(32):1398-1404.
【关键词】数据结构;算法;软件设计
1.经典算法的选择
选择经典算法的重要性,PASCAL语言的创始人、著名的计算机科学家N.沃思说得好“程序=数据结构+算法”,足以见得算法在程序设计中的重要地位。在合理的数据结构基础上,算法是对数据结构的操作(运算),是数据处理的核心。在《数据结构》中介绍的基本数据结构有线性表、堆栈、队列、数组、树、二叉树、图以及相应的算法。一个算法是建立在某种数据结构的基础上,一个算法不可能脱离数据结构而孤立存在。只有通过学习算法,才能真正掌握某种数据结构。可以说学习《数据结构》的过程基本上是学习各种算法的过程。在众多的算法中有简单的、有复杂的、有容易的、有难度大的,在有限的学时情况下,不可能也没有必要逐一讲解每一个算法。大多数的算法,要靠学生自己理解消化。在这种情况下,如何选择少量的经典算法进行分析讲解,显得尤其重要。一个经典算法往往能起到以一当十、以点带面的关键作用。通过经典算法的分析,一方面让学生加深对数据结构基本理论的理解另一方面让学生学习程序设计方法。
选择好经典算法后下一步就是要对其展开综合分析,下面以具体的算法为例进行讨论。
2.利用经典算法说明基本原理
2.1 经典算法应能体现某个数据结构的基本特征
我们知道线性表顺序存储时其优点是能够对每个数据元素随机访问,存储密度高,其缺点是插入、删除操作时需要移动大量的数据元素,操作效率低。“向有序(由小到大或由大到小)的线性表(顺序存储)插入一个新的数据元素”,这一经典算法集中反映了线性表顺序存储的这些特点。
分析:将一个值为X的数据元素插入到有序(由小到大或由大到小)的线性表(顺序存储)中,可以分两步进行,首先查找到值为X的数据元素在线性表中应有的位置,采用从头到尾循环比较的方法确定其位置I,然后,将第I个以后的全部数据元素向后移动一个存储单元,最后将值为X的数据元素存放到第I个位置上,线性表元素个数增1。
【算法1】
PROCEDURE INSERT(V,m,n,X)
//将值为X的数据元素插入到V数组中,(线性表顺序存贮在V中)m为最多元素个数,n为当前实际元素个数
IF (m=n) THEN{“OVERFLOW”; RETURN}
FOR I=1 TO n DO
IF (X〈V(I))THEN BREAK
FOR J=n TO I BY -1 DO V(J+1)=V(J)
V(I)=X
n=n+1
RETURN
分析:【算法1】的优点是简单,便于理解,缺点是:
①循环体内有提前退出语句,不利于结构化程序设计;
②确定新数据元素位置和移动数据元素分两步进行,有重复操作,可以改进之,将两步合并一步完成,即将循环比较与移动数据元素同时进行。从线性表的尾部开始向前循环比较,比新数据元素大者后移,直到小于等于时停止。
【算法2】
PROCEDURE INSERT(V,m,n,X)
IF(m=n)THEN{“OVERFLOW”;RETURN}
I=n
WHILE (I〉=1)AND (V(I)〉X)DO {V(I+1)=V(I);I=I-1}
V(I+1)=X
n=n+1
RETURN
分析:注意【算法2】中循环条件,当循环结束后I=0或V(I)〈=X,新数据元素的位置为I+1,【算法1】的时间复杂度为0(2n),而【算法2】的时间复杂度为0(n),效率提高一倍。循环结构是结构化程序设计中最基本最核心的部分,归纳循环条件是关键。【算法2】能进一步推广。
2.2 利用经典算法学习算法设计
经典算法能给学习者以启示、示范作用。
分析:可以将【算法2】用于对线性表(顺序存储)排序算法中。在直接插入排序算法中,其算法思想是从第2个数据元素开始直到第n个数据元素,逐一插入到已有序的子线性表中。
【算法3】
PROCEDURE SORT(V,n)
FOR I=2 TO n DO
{ Y=V(I)
J=I-1
WHILE (J〉=1) AND (V(J)〉Y) DO {V(J+1)=V(J);J=J-1}
V(J+1)=Y }
RETURN
分析:【算示3】其结构分为双重循环,外循环完成逐一取数据元素,即取第I个数据元素,内循环完成将第I个数据元素插入到前I-1个已有序的子线性表中。内循环完成的功能可以独立成为一个子函数(子过程),可以借用【算法2】。这正是结构化程序设计思想的体现,即主程序完成任务的划分,说明“做什么”,子函数(子过程)完成任务的具体实现,说明“如何做”。结构化程序设计方法采取“分解”的手段来控制系统的复杂性,将大系统划分为若干个相对独立的、功能单一的子模块。一方面子函数(子过程)可以实现软件的重用性,在不同的程序段有相同的处理过程时调用子函数(子过程),减少软件开发的工作量;另一方面子函数(子过程)对具体的实现技术细节进行隐藏,便于开发人员集中精力把握软件开发的核心和主要问题,降低了软件开发难度,从而保证软件质量。在利用【算法2】时要稍加修改,见【算法4】。
【算法4】
PROCEDURE INSERT(V,I,X)
//将值为X的数据元素插入到已有序的前I-1个数据元素中
J=I-1
Y=X
WHILE (J〉=1) AND (V(J)〉X) DO {V(J+1)=V(J);J=J-1}
V(J+1)=Y
RETURN
相应的主程序也要作修改,见【算法5】
【算法5】
PROCEDURE SORT(V,n)
FOR I=2 TO n DO
INSERT(V,I,V(I))
RETURN
3.结束语
在众多的算法中选择好少量的经典算法对于教好、学好《数据结构》至关重要;经典算法要有助于学生理解对应的数据结构,经典算法的分析要侧重于程序设计能力的提高。
参考文献
[1]欧建圣.数据结构教学研究――经典算法的综合分析[J].武汉工程职业技术学院学报,2004,16(1):58-60.
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.
关键词:教学探索;程序设计;Scratch
中图分类号:G642 文献标识码:A
1 引言(Introduction)
1.1 基础薄弱
目前,中小学的信息化教育内容参差不齐,有的学校可能会有程序设计的教学,有的学校则以Word、Excel操作为主,对程序设计的入门不重视[1]。很多刚进入大学的学生在程序化的思维方式方面还比较弱,要入高级程序设计语言的门还有很长的路要走。
1.2 课时较少
通常程序设计入门以C语言或C++语言为教学内容。作为一种实践性较强的语言,在一个学期中要完成程序设计概念和语法的教学,又要在有限的时间里完成编程调试训练。如果学生没有一定的基础和自学能力,就很难适应这种节奏。
1.3 抽象带来的问题
语法、算法等抽象的教学内容将降低学生的学习兴趣,而学习兴趣对教授与学习两方面都非常重要。有的学生不能通过考核经常就跌入补考和重修的循环。程序设计入门作为核心课程,这个课程出了问题将给计算机专业的后续课程带来很多不好的影响,比如本专业学生对程序设计和其他专业技能缺乏信心以及实践能力。
2 程序设计课程的前导课程(Leading program of
programming classes)
学生在程序设计课程中,一方面要努力熟悉算法抽象、程序控制等一些全新的概念,一方面会遇到很多语法错误,必须要学习如何调试程序,理论加上实践可能都是前所未有的挑战。前导课程应带来有趣味的内容,为学生补充各种必要的基础概念,如抽象、逻辑、流程等,告诉学生如何在现实世界和计算机世界之间建立起一座桥梁。这样的课程会对程序设计教学有很大帮助。
3 Scratch简介(Introduction of scratch)
Scratch是美国麻省理工学院(MIT)媒体实验室开发的一套“程序语言”,利用这个软件可以轻轻松松地创造出互动式故事、动画、游戏、音乐等令人惊叹的作品,是一套简单又有趣的软件[2]。
Scratch采用拖曳、组合的方式来设计程序。它是可视化的程序语言,具有所见即所得的功能。设计Scratch作品的过程是学生学习用计算机进行思考、分析、解决问题的过程,还能进行团队建设方面的实践。
Scratch把程序命令归为几大部分:包括动作、外观、声音、画笔、变量、事件、控制等,并用颜色来分类。学生只需要了解各部分模块的功能,按照自己的想法拖到脚本窗口,并按一定规则堆积在一起,最后在浏览窗口就能根据命令脚本直接运行。通过可视化操作学生可以搭建起自己的程序,轻易地把自己的想法表达为计算机的程序。在这个抽象的过程中不用过分操心语法错误等问题。
图1为Scratch设计界面,左上为程序运行场景,左下为程序中设计的主体对象。一个项目可以有多个动画主体(可以是动物人物或其他一些对象),中间是可视化程序模块,右边是程序窗口,利用鼠标可以把中间的程序模块拖入右边的程序窗口,经过修改参数、安排程序模块的顺序和嵌套等工作,就完成了程序编制,接着程序可以在浏览器中执行。
4 Scratch对程序设计教学的支持(Supports to
programming classes)[3]
4.1 抽象
现实世界的问题如何抽象为计算机世界的模型?第一步可以从学习抽象为计算机里的对象开始。我们把需要处理的内容抽象为Scratch的动画主体,比如一个人物或一个物体。动画主体可以具有各种行为,比如在平面中移动。如图2是一个负责动作的程序模块,能控制动画主体平移到坐标(100,200)处,其中白色的部分为可以修改的坐标值。
4.2 结构化程序
Scratch具有可以拖曳的结构化模块。设计时候只需要把模块拖入场景中,就可以实现循环或选择的程序结构,并且能实现循环和选择的嵌套,制作需要的程序流程。图3演示了循环结构的程序模块,repeat后面的循环次数可以修改,可以看到循环程序模块和循环体中的其他程序模块的颜色是不同的,它们属于不同的功能分类。
Fig.4 Block to control choosing
其中使用的橙色模块i是Scratch的变量模块。Scratch程序能够使用数字和字符串变量。变量可用来控制某个图形的大小或个数,变量还能具有不同的作用域。由此我们向学生展示了变量存储值、变量值影响程序结果以及变量的作用域等概念。
Scratch具有列表的结构,列表可以存储数值或字符串。列表可以具有作用域,可以获得列表的长度。列表项具有添加、删除、插入等操作,并能通过下标获取特定的列表项。列表可以帮助学生学习数组的概念。
Scratch的结构化程序设计是可视化的,调试简单,能帮助学生把精力集中在程序结构上,而不需要为语法错误分心。
4.3 面向对象
Scratch能够设置动画主体,可以视为对象模块。不同的动画主体具有独特的属性,可操作自己的变量,能完成独特的任务。在后续课程中这些概念很容易引申为对象及其属性和行为的概念,这是面向对象程序设计的基础。图5为迷宫程序的设计,其中球体是一个对象,而终点方块的是另一个对象。我们可以利用键盘移动球体,当碰到方块对象时后者能做出赢得游戏的反应。球体对象在移动过程中碰到障碍则会产生反弹。
5 Scratch作为程序设计教学前导课程的实践
(Experiments in programming classes)
在参考文献[4]中提到的学校已经尝试使用Scratch平台作为计算机专业课程的前导课程。学校把学生分为两部分,一部分基础薄弱的学生在第一个学期先参加Scratch课程,到第二个学期才开始学习高级程序设计语言。而另一部分基础良好的学生则在第一个学期就开始学习高级程序设计。
最终学过Scratch的学生,尽管基础薄弱,他们的最终成绩在通过率和平均成绩方面都超过基础良好的学生,并且在精通程序、喜爱专业课程、参与专业实践等方面都有更好的表现。这些学生专业成绩更好,对专业更热爱,对程序设计更有信心。
6 结论(Conclusion)
程序设计是一种具有创造性的工作,它具有一定的抽象性,而且需要使用数学的方法去描述一些问题。这使得在语言程序设计的课程教学中,必须打破原有的教学模式和知识体系[5]。我们探索不同的方式帮助学生入门,Scratch可能是一个良好的平台,它的可视化特性,对结构化程序设计的支持,都能帮助学生在实践中培养计算机思维方式,为程序设计入门打下坚实基础,为后续课程的挑战做好准备。另一方面程序设计教学的困境也要需要在考核模式方面进行改革,激励学生重视创新和实践。
参考文献(References)
[1] 张传科.如何让抽象的设计变得精彩――LOGO程序设计与
Scratch[J].中国信息技术教育,2010,(5):29-31.
[2] 陈捷.Scratch语言简介及应用[J].电脑知识与技术,2009,5(26):
7439-7440.
[3] 朱,郑晓妹.C语言程序设计教学前导课程研究[J].软件导
刊,2014,13(4):160-162.
[4] M.Rizvi,T.Humphries,D.Major,M.Jones,and H.Lauzun.A
NewCS0 Course for At-Risk Majors[C].The Proceedings of
the 24th IEEE-CS Conference on Software Engineering
Education and Training,Honolulu,Hawaii,May 2011: 314-323.
[5] 刘兴林.大学工科C语言程序设计教学探索与实践――以五
邑大学为例[J].软件工程师,2014,17(5):39-40.
关键词:Visual Basic;程序设计;上机操作
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)26-1741-04
Research on Improving the Capacity of VB Computer Operations
LIU Ai-hua
(Department of Computer Engineering,Nanjing Institute of Technology,Nanjing 211167,China)
Abstract: In recent years, many colleges and universities have been Visual Basic computer programming as a Non-computer professional public basic course, many provinces and cities of our country have also been Visual Basic(hereinafter referred to VB) into the subjects of computer rank examination certificate grade 2. In years of VB teaching, the writer found that Non-computer professional students feel quite difficult in computer operation during the learning VB, because the school hours of VB is too limited and content of VB knowledge points is too more. To solve the main issues of prejudicing students to raise the capacity of VB computer operations, the writer analyses of the knowledge points of the theory and the main points of computer operations.
Key words: visual basic; computer programming; computer operations
1 引言
如果把计算机世界看成是一种现代信息交流的平台或环境,那么程序设计语言就是这种世界沟通的语言。Visual Basic程序在GUI设计、绘图、制表、运算、通信和多媒体开发方面本身就具有简单易行、功能强大等优点,近年来由于ASP和的流行,VB作为简单的入门语言更是非常适合作为初学面向对象程序设计的教学语言。目前许多高等院校将Visual Basic程序设计作为非计算机专业的公共基础课,国家和许多省市也将Visual Basic(以下简称VB)纳入计算机二级考试的科目。非计算机专业的学生学习VB的需求主要有两个方面:一是用VB编程解决实际问题,特别是跟自己专业相关的毕业设计问题;二是参加计算机等级考试,获得证书,为将来就业赢得更多的机会。尽管学生的学习热情很高,但是VB的上机操作能力普遍不高,从VB等级考试反映出笔试通过率明显高于机试就能明显看出。主要原因在于VB课程的学时较少,内容太多和学习C语言相比,VB既要学习结构化程序设计中编程知识,如三种基本结构(顺序、选择和循环)、数组、过程、文件等;还要学习面向对象的程序设计知识,如各种控件的属性、方法和事件等。笔者在平时的教学过程中注意到了制约学生上机能力提高的主要问题,给出理论上的知识点和上机时的操作要领。
2 难点1:理解App.Path的含义,掌握新建、打开、保存、重命名文件等操作
很多同学保存文件时不注意观察路径,保存后就不知道文件存在哪里了,原因就是路径的概念不清楚。所以在保存之前应该要清楚新建的工程保存在哪个分区的那个文件夹下(就是路径)。如果不理解App.Path的含义,学习图片文件的加载(LoadPicture)、数据文件的读入和写出都会感觉很难;相反,如果开始多花一点时间理解了App.Path,并且掌握了常用文件的基本操作,学习文件部分的内容就会比较容易理解。
1) App.Path代表的是应用程序所在的目录(路径),决定了文件操作如“另存为”、“打开”时出现的对话框的默认路径。
启动VB后“新建”工程,此时的App.Path就是VB的安装路径。如果安装在C分区,通常就是“C:\Program Files\Microsoft Visual Studio\VB98”,如图1所示;如果安装在D分区,就是”D:\……\VB98”。
如果第一次保存工程,就会出现“文件另存为”对话框,其中的默认路径就是…VB98,如图2所示。
2) App.Path会随着文件的操作如“另存为”、“打开”路径而变化,相应操作的默认路径也就在变化。
一般程序不要保存到…VB98,而是保存在某个指定的路径下,比如“D:\liuah\VB\VB等级考试\上机题\djks01”,就需要在“保存对话框”中更改路径,然后将新建的工程保存为老师或者试题要求的名称,如“djks001”,扩展名根据保存类型自动添加。如果保存成功,此时的App.Path就是文件的保存路径,如图3所示。
保存过文件后,如果做过修改,可以再按下保存按钮,此时不会出现“文件另存为”对话框,而是直接保存对文件所作的修改;如果需要重新保存,就要用“文件”“另存为”,此时“文件另存为”的默认路径应该是什么呢?――就是“D:\liuah\VB\VB等级考试\上机题\djks01”,如图4所示。
如果启动VB后不是“新建”而是直接打开“现存”工程,或者从“文件”“打开”文件如上述工程djks001.vbp,App.Path也就是你所打开文件的路径。此时你如果再打开“另存为”对话框,默认路径就是上图中的路径。
3) 难点小结:上机操作时,首先建立工程存放的文件夹(即明确路径),然后打开VB应用环境,新建工程。建好之后不要急于编程,而是先将工程文件和自动建立的窗体文件保存到自己的文件夹中(此时App.Path已经改变),然后再开始设计界面、编写代码。编程结束之后,不要急于调试,而是先按“保存”按钮(常用工具栏上的磁盘图标)更新文件中的内容,防止程序运行中出现“死机”重启后文件的内容还是最开始的内容。调试中可能还有改动,最后运行成功再保存一下保证文件的内容最新。
这就是“三先三再”――先建路径再建工程,先保存文件再编程,先更新文件再调试。
3 难点2:理解VB的工作状态、常见错误提示的含义,掌握简单的调试方法
大多数学生不注意VB的工作状态,出现错误时的调试能力比较弱。作为教师应该“授人以渔”,而不是“授人以鱼”,像个救火队员,到处帮学生解决简单的调试问题。课堂上可以设置一些常见的错误,然后用“断点-单步跟踪”法来调试程序;上机帮学生解决问题时,不要直接指出错误,也要用调试方法,逐步培养学生的自主调试能力。
1) 注意观察VB的三种模式:设计模式、运行模式、中断模式:VB的应用环境有设计模式、 运行模式 、中断模式,通过标题栏来观察区分,如图5所示。[设计]模式用于界面设计、属性设置和代码编写,按下“启动”按钮,进入[运行]模式,如果按下“结束”按钮则回到设计模式,按下“中断”按钮或出错则进入“中断”即[break]模式。主要在中断模式[break]下调试程序――修改代码、检查数据等。
2) 注意观察出错时的提示内容,总结常见错误的解决办法:常见的错误提示主要分为语法错误和逻辑错误。
语法错误一般是由于编辑代码时的输入失误,通常有明确的提示并且代码显示高亮。比如“变量未定义”、“缺少方法或者数据成员”等。解决办法是编写代码最好都用小写字体,如果是已经定义的变量或者正确的属性和方法,就会自动首字母大写。检查时只要查没有大写的(定义变量时,要养成良好习惯如首字母大写、见名知意)。
逻辑错误一般是由于运算符使用不当、循环缺少变化或者算法思路不正确,通常运行后结果不对但是没有明确的提示。解决办法是利用调试窗口(立即窗口、本地窗口、监视窗口),设置断点和逐语句跟踪检查相关的变量、属性和表达式的值是否正确。
简单的调试方法――“断点-单步跟踪”法:在中断模式下,在代码窗口选择怀疑出错的语句设置断点(按下F9),然后运行到断点语句处(该语句没有执行,观察左侧小箭头为当前行标记)停下,进入中断模式,前面执行过的语句中的变量、属性、表达式的值可以查看(变量和属性可以用鼠标指向直接查看,表达式可以在立即窗口用“?”,即Print语句查看)。如果要继续跟踪断点以后的语句执行,按下F8,配合“本地”视图可以观察表达式变化的动态情况如图6所示。调试结束以后要取消断点,在代码窗口用光标点击断点语句再按下F9,断点就消失了。
3) 难点小结:课堂上一般都会提到VB的模式、“断点-单步跟踪”法和立即、本地、监视视图等内容,但是学生真正重视和运用这些调试方法关键是老师在无论课堂和上机实验调试程序时都要不断地运用这些方法,引导和提示学生去观察问题所在。特别是讲到数组、过程、变量作用域等内容时,利用“断点-单步跟踪”法和视图(主要是本地视图)时,学生理解效果非常好,学习调试的兴趣被极大地激发起来。
4 难点3:理解面向对象和面向过程的主要难点,掌握程序设计的常用技术
VB编程涉及面向对象和面向过程即结构化程序设计两个方面。主要难点包括能设计出符合操作规律的界面,并且能在合适的事件过程中添加能实现所要求功能的代码,并且逐步优化使得代码具有一定的可读性、通用性、可复用性。
1) 理解对象的三要素――属性、方法和事件,设计出符合操作规律的界面。
选择学生常见的程序界面例如用户登录、查询等等作为VB教学的引例。笔者经常使用的引例就是包含两个窗体、一个模块的工程,可以实现简单的用户身份检查,登录成功后可以查询图书的名称,点击查询按钮后可以返回图书在列表框中是否存在;找到则显示相应的序号,如图7所示。这个引例基本贯穿于整个VB的教学,讲解到文件时,可以将图书信息存放于文件中;讲解到数据库时,可以将图书信息建成数据库中的表,利用SQL语句实现查询。
当然作为初步接触程序设计的学生首先需要理解面向对象程序设计的特点即程序=对象+消息。通过FORM的Caption、Picture等属性,Hide、Show等方法,Command Button的click事件来介绍对象的三要素。然后引导他们模仿着日常生活、网上所见到的程序界面来建立界面中的对象控件、设置对象的属性、选择合适的对象的事件过程并且添加上代码即编程。这个过程就是面向对象程序设计的主要步骤。
2) 理解三种基本结构――顺序、选择和循环,掌握结构化程序设计的一般思路。
事件过程中添加代码,实现常用的例如数值计算、数据查询等处理功能,这部分主要依靠面向过程的程序设计语句来实现。
首先需要理解面向过程即结构化程序设计的基本语句结构――顺序、选择和循环。顺序结构主要实现数据的初始化、计算、消息的显示即数据的输入和输出;选择结构实现不同的数据转向不同的处理;循环结构是计算机高效率处理的关键,可以实现大量数据的重复处理。通过引例中的用户身份检查、查询可以找到这三类结构的语句。
然后遵循结构化程序设计的一般思路――数据的输入、数据处理、数据输出,选择合适的数据输入方式、数据处理算法、数据输出方式,反馈出事件驱动后的结果。
3) 理解数组、过程和文件,设计出可读性、通用性较好的代码。
学习好数组的关键是要理解数组中的下标变量是从数组名开始的一片连续空间,而前面学习的变量都是没有联系的独立变量,所以可以利用循环变量作为下标变量,实现对一组数据有规律的处理。
过程引入的目的是提高有特定功能的代码段的复用率,例如查询、排序等。
文件引入的目的是实现数据的快速读写,综合了循环、数组、过程等内容。在这里重点介绍顺序文件的操作。
文件操作的基本思路就是三步曲:打开文件-读写数据-关闭文件
① 打开文件:Open ?(什么路径下的文件名)For ?(什么操作) As ?(什么文件号)
第1个?:例如当前路径下的文件“in.txt”,就是App. Path & " in.txt "
第2个?:如果从给定的文件中读入数据,就是For Input;如果将数据存入某个文件,就是For Output;
第3个?:文件号一般从#1开始,如果已经打开#1时还需要缓冲区,就用#2。
② 关闭文件:Close ?(Open中对应的文件号比如#1)
③ 读写数据:通常是顺序文件中的数据的读出和写入。一般分以下三种情况
如果是字符串整体读入文本框或写入文件,则直接使用Input、Print(或Write)语句:
Open App.Path & "\in123.txt" For Input As 1
Input #1, StrText‘读入数据
Close #1
Text1.Text = StrText
Open App.Path & "\out123.txt" For Output As 1
Print #1, Text1. Text ‘数据写入文件
Close #1
如果是已知数据的个数和类型,则使用For语句和Input、Print(或Write)语句:
Open App.Path & "\" & "in0831.txt" For Input As #1
For i = 1 To 20
Input #1, Arr1(i)
Next i
Close #1
或者边读边写:
Open FileIn For Input As #1
Open FileOut For Output As #2
For i = 1 To 8
Input #1, rec.Num, rec.Name, rec.Score
Write #2, rec.Num, rec.Name, rec.Score
Next i
Close
如果是未知数据的个数,则使用Do-Loop循环、EOF函数和Input、Print(或Write)语句。EOF()函数为True表示读到了文件的结尾。
Open App. Path & "\" & StrM For Input As #1
Open App. Path & "\" & StrN For Output As #2
Do While Not EOF(1)
Input #1, g
N = N + 1
S = S+ g
Loop
Close #1
S = S/N
Write #2, S
Close #2
注意:比较Print和Write输出格式的区别。
Print语句的输出和窗体、图片框类似,只是在输出内容前添加在那个文件号中输出。数据项之间是空格可以有标准格式(逗号”,”分隔)和紧凑格式(分号”;”分隔)。
例如Num、Name、Score。其中Name为字符串类型,定长为10
Print #2, rec.Num, rec.Name, rec.Score‘标准格式,输出的效果为如图8
Print #2, rec.Num;rec.Name ;rec.Score ‘紧凑格式,输出的效果为如图9
Write语句的输出只有紧凑格式,并且数据项之间有逗号(“,”)分隔,字符串会自动添加双引号。
例如:Write #2, rec.Num, rec.Name, rec.Score输出的效果如图10
5 结束语
以上介绍了提高上机操作能力的重点理论知识和操作要点。除了课堂教学中的引导以外,在上机实践的时候能及时帮助学生掌握调试技能,感受到调试通过后成功的喜悦,从而排除对编程的畏难情绪,建立对程序设计的兴趣也是非常的重要。再一次重申本文开头的观点,如果把计算机世界看成是一种现代信息交流的平台或环境,那么VB程序设计语言就是这种世界最为容易入门的语言。所以学好VB,并且能真正在各领域加以运用,这才是学习的初衷。
参考文献:
[1] 龚沛曾.Visual Basic程序设计简明教程[M].2版.北京:高等教育出版社,2003.
关键词:专业课;常用软件;结构化;原型法;形式化;设计
中图分类号:G718.5;G710 文献标志码:A 文章编号:1008-3561(2016)36-0013-01
当前,普遍采用的软件设计方法有结构化分析与设计方法 (SD/SA)、Jackson(JSP/JSD)系统开发方法、原型法、生命周期方法等多种方法。为了更好地展现各种方法的特性,本文从设计思想、设计步骤或流程、优缺点等方面对各软件设计方法进行了相应对比和分析,为软件设计教学工作提供一定的参考。
一、结构化分析与设计方法(SD/SA)
结构化分析方法又称作SD方法或SA方法,它是通过把现实世界逐一描绘为各种数据在信息系统中的一种流动,同时在数据不断流动过程中进行数据和信息之间的转化。基本思想可描述为:基于一种将功能逐一分解的设计模式,不断把复杂和综合问题逐层进行分解,以便对问题进行简化――自顶向下,逐层细化,从而将复杂的程序结构划分为多个功能完全不相关或者独立的小模块,最终达到最简化的过程。优点:比较直观、应用简单、容易理解,目前已经获得了较为成功的实践经验,在市场推广方面有较大的优势。不足:首先,因为从抽象思维出发对模块进行细化,所以得到的子模块方案各异,共性较低;其次,由于对问题理解上的偏差,导致继承性较为困难;再次,该方法的自适应能力相对较弱,其设计的软件重用率不高,从而延缓了开发周期;最后,设计文档时常出现与表示体系不一致的现象。
二、Jackson(JSP/JSD)系统开发方法
Jackson开发方法分为JSP和JSD两种。(1)JSP开发方法。JSP方法是一种面向数据结构的程序设计方案。其基本思路是按照输入、输出和内部信息的三种数据结构形式进行设计,从而把对数据结构的描述转变成一种程序结构的描述方案,因此可实现通过数据结构来反映程序结构的方法。其基本思想可描述为:首先采用自顶向下的思想按功能对系统进行划分,并逐步求出各子问题的解,将软件开发流程视为软件的生命周期,最终建立一种所谓的瀑布模型。基本实现步骤可描述为:分析、设计、编码、测试、运行及后期维护。优点:简单易学;准入门槛底,对设计者的要求不高。不足:难以满足规模较大的软件系统设计,且JSP方法难以对付结构冲突问题。因此,该法仅适用于小型程序的开发。(2)JSD方法。此方法称作杰克逊系统开发方法,它以事件的驱动为中心,将相连的顺序组合构成程序进程,系统设计模型可进一步抽象成若干条以通信方式进行相联的进程。基本设计思想描述为:首先通过仿真来理解并描述客观事实,其次添加相应输出功能,最后通过某种收到实现系统间的转换。方法实现步骤为:实体的动作分析过程实体结构分析定义初始模型功能描述决定系统时间特性硬件和软件实现。优点:实现了同类软件和客观世界间的关系研究,并确定了各类软件系统和软件现实决策间的界限。不足:对客观现实同类软件间的相互关系认识不够完整,有待提升;构造的软件实现结构较为复杂,有待简化;对软件结构的相关描述不完善;JSD在实现阶段较为费时和复杂,且需要手动实现。
三、原型法
原型法可分为示例型和渐增型两大类。其实现思路为:利用设计程序自动生成软件工程运行环境,以便构造出简化的实际系统模型,从而便于软件开发人员和用户间进行有效交流,大大提高了设计的灵活性。该方法实现过程要求迅速,否则便失去了意义。开发基本步骤可大致分为四步:系统简化原型实现系统修改最终实现。优点:能适应各种模糊不清和变化不定的用户需求。不足:需要具备较强的知识理论基础,同时需要以相应的硬件环境作支撑。
四、生命周期法
生命周期法学也把软件开发过程分为若干独立阶段。在软件实现过程中,各阶段分别完成一定任务,并实现最终的软件配置程序/文档。在完成各阶段性任务过程中,可运用结构分析(SA)技术、结构设计(SD)技术和其他相关辅助工具。在编程过程中,使用了SP(结构化程序设计)语言,在各阶段结束时需要进行细致的复审过程,只有各项参数合格后才能进行下一步骤的工作。因此,该方法将软件的生命周期依次分为系统需求分析、系统设计、系统实现、系统测试、系统维护五大阶段。优点:该方法采取了自顶向下、逐步求精的设计思想;模块化设计过程中,运用了结构化程序设计方法,采用了严格的复审及测试程序,保障了软件的可维护性。不足:对时变系统不太适用,开发出的软件稳定性、可重用性和可维护性都比较差。
五、结束语
总之,以上各种软件设计方法均存在一定的优势和缺陷。因此,相关专业的师生在设计时,应根据设计的主客观条件进行相应的选择,提高设计能力,充分利用自身和环境优势完成软件的设计。
参考文献:
摘 要:Visual FoxPro是技工院校计算机专业的基础专业课程,也是开设最广泛的数据库类课程。通过这门课程的学习,可以为技校生获得就业必备的计算机等级证书以及具有相应的专业素质打下基础。因此,教师在实训教学过程中运用案例法进行教学具有特殊的现实意义。
关键词 :案例 数据库 应用
由于技工院校处于本科、高职院校与中专院校的夹层地带,教学理论的难度与深度不如本科与高职院校,单纯的实操能力培养不如中专院校。经过几年的实践,我们发现要使技工院校的计算机专业建设走出困境,就必须大胆进行课程体系改革,为此,笔者所在技师学院一方面不断根据招聘企业的专业技能要求调整计算机专业课程体系的内容,删除、淘汰一些过时的课程,增加一些新技术课程;另一方面在实训教学中引入案例法,从学生学习的兴趣点培养入手,在加强学生基本的实操能力训练的基础之上,逐步加大程序设计能力的培养,收到良好的教学效果。笔者就以Visual FoxPro6.0数据库技术与应用为例,简述案例法在教学中的实际运用。
一、案例教学法的内涵
案例教学法就是在教学过程中,教师通过设置一个难易适中的案例,引导学生循序渐进地展开探究活动,从而在活动的过程中潜移默化地培养学生发现问题、分析问题、解决问题的能力。这种教学方法对技校计算机专业教学来说具有特殊的意义,一是技校生受身心发展状况的制约,逻辑思维能力不强,而采用具体案例,就更加直观、形象,更容易激发学生的学习兴趣;二是便于教师组织、开展教学,教师通过案例,可以随时发现学生对于所讲授的内容掌握的情况,从而调整教学进度与难度,保证教学效果的优化;三是有利于学生程序设计能力的培养。学生通过一个具体案例问题的分析、解决,很容易举一反三,由此及彼,这样就刺激了学生的“发散思维”,这为他们今后走向企业必经的独立工作与独立思考打下了基础。
二、Visual FoxPro6.0数据库技术与应用课程的内容
数据库技术是从20世纪60年代末开始发展起来的计算机软件技术,随着网络技术、多媒体技术的不断发展,数据库技术在各领域得到越来越多地应用。Visual FoxPro作为20世纪90年代兴起的高级数据库管理软件,它是一种完善的编程及数据管理语言,在小型数据库系统开发中得到了广泛应用。而Visual FoxPro6.0是一种32位关系数据库管理系统,它在20世纪80年代流行的Xbase系列软件基础上增加了新的功能特性,性能不断完善,技术不断提高。作为关系数据库管理系统,Visual FoxPro6.0提供了一个集成化开发环境,使数据的组织和操作变得方便、简单,它不仅支持传统的结构化程序设计,还支持面向对象程序设计,适合开发小型数据库应用系统,适合计算机与非计算机专业学生学习。根据教育部计算机基础教育白皮书的要求,数据库应用技术不仅是计算机专业的必修课程,也是非计算机专业“1+X”课程体系中第二层次的重要方向之一。
三、案例法在Visual FoxPro实训教学中的实践探索
由于技工院校计算机专业数据库应用课程的教学目标定位于培养技校生信息技术应用素质,注重数据库基础知识和基本理论的融会贯通,强调数据库应用能力的培养。因此,案例教学法的采用必须兼顾科学性与实用性,一方面教学内容紧扣Visual FoxPro知识的体系结构,在介绍Visual FoxPro基础知识后,逐步深入地讲解数据库与表操作、查询与视图、SQL的应用、数据与数据运算、程序设计基础、表单及控件的应用、菜单设计、报表设计、项目管理等内容,深入浅出地向学生讲解程序、软件、软件开发方法、结构化程序设计、面向对象设计等概念,为学生的专业学习打下扎实的理论基础;另一方面将案例贯穿整个教学过程。在教学的第一个环节就引入案例—“学生管理系统”,后续的教学内容围绕该案例展开,最终完成整个案例的实现。这样就使教学充分体现了案例教学的特点。由于案例经过精心设计,选择学生比较熟悉,比较有代表性的“学生管理系统”,整个教学内容讲述这个综合应用的案例,每一个知识点提出具体的任务和要求,形成一个小的、具体的案例,这样就形成案例与任务共同驱动教学展开的良好情境,也更有利于技校生循序渐进地掌握数据库应用的相关知识。
四、小结