程序设计范文

时间:2023-03-13 13:04:19

程序设计

程序设计范文第1篇

年级:高中一年级

所用教材版本:浙江教育出版社

教学章节:第三章 信息的加工 3.4.3程序设计案例

教学内容:3.4.3程序设计案例。

教学目标:

知识目标:1.让学生亲身感受计算机程序解决问题的过程,理解“算法”的涵义及“算法的表示”方法;2.通过vb进行程序设计,了解用高级语言编程工具解决问题的基本方法,感悟计算机程序设计的思想。

技能目标:培养学生的动手能力、创新能力、信息收集与处理能力。

情感目标:激发学生对计算机编程解决现实问题的学习欲望,提高学习兴趣。

重点难点:

教学重点:用VB程序实现算法。

教学难点:对算法设计的理解,程序代码的认识。

教材分析:这节课的内容是程序设计实例。程序设计是计算机对算法的具体表现,也是用计算机程序解决问题的基本步骤中的最核心、最重要的部分。但作为必修的《信息技术基础》在教学中是没有必要在语法代码方面花太多时间的,因为学生在选修中可以继续深入学习编程。这节课的学习,主要让学生了解如何实现一个算法,即如何将算法真正转换为程序,通过三个简单的实例,以VB语言为设计语言,初步了解语法规则,了解程序的三种基本结构(顺序、分支、循环)就可以了。教学中让学生体验算法思想,体会算法和程序设计在解决问题过程中的地位和作用。

学情分析:因为部分学生将选修《算法与程序设计》,那时可以继续深入学习这方面的内容,所以对VB语法规则的教学不是教学重点所在。这节课只需要向学生介绍程序设计的简单实例,让学生初步了解并能够判断程序的三种基本结构,从而体会使用编程来解决问题的强大魅力。

教学方法设计:本节教学中用到的教学方法有教授式、启发式、探究式。

教学活动以本人的教学博客(http://.cn/ buyanshibai)为依托让学生进行尝试性、探索性的活动,引导学生积极主动地完成学习任务。逐步建立起自主性和研究性的学习模式,从而更加突出学生在教学过程中的主体地位。教材中的三个程序设计实例是本节的难点,采用自主探究学习,教师参与学习,帮助学生完成程序设计。学生完成vb程序设计后,进行学生自评、教师对学生的评价。最后教师和学生一起总结计算机编程解决问题的过程,让学生在任务单上记录下编程中的感悟、收获和遇到的问题。最后进行任务拓展,完成教材练一练,让学生对用程序解决问题有更深的了解。

教学过程:

一、回顾算法

二、算法转化为程序实例

1.把华氏温度值转换成摄氏温度值(公式为:C=(f-32)*5/9),这个算法比较简单,只要输入华氏温度值,利用公式转换和输出结果等3个步骤。这三个步骤是按顺序执行的,是一种顺序结构,算法表示如下:(1)输入华氏温度值,存入变量f中;(2)C?(f-32)*5/9;(3)输出摄氏温度值C。

学生参考练习:

(1)有两个瓶子,分别盛放醋和酱油,如果要将它们所盛的内容互换,用vb语言如何实现程序。

(2)将两个数例如A和B进行互换。例如A=1,B=2,互换后为:A=2,B=1。

2.比较两个同学的身高,输出较高的那个同学的身高。分析:把两个同学的身高值放入变量a和b中,比较这两个变量的大小。如果a 大于b,则把a赋值给变量max;否则,就把b赋值给变量max,最后显示max的值。

3.求n阶乘n!=1×2×3×4×5×……×n。分析:首先输入变量n的值,变量f 赋以初值1,然后执行循环i从1开始到n循环。最后输出变量f的值。

学生参考练习:

计算1到100的和。

三、交流评价(见教学评价表)

四、归纳总结

经过本节课的学习,我们应当对用程序设计解决问题的基本过程有了一些认识了,是不是感觉使用编程解决现实中的问题是一件很有趣的事?如果有兴趣的话,则可以在接下来的选修课程《算法与程序设计》中进一步地系统学习。

五、拓展延伸

程序设计范文第2篇

关键词:Visual Basic程序设计 改革与创新

中图分类号:G71 文献标识码:A 文章编号:1007-9416(2012)10-0229-01

1、课程发展历史沿革

《Visual Basic程序设计》主要讲授Visual Basic程序设计语言的基本知识、程序设计的方法与技术,结合高职学院学生的特点设计该课程。这是一门实践性很强的课程,通过该课程的学习,使学生掌握面向对象程序设计的基本思想和方法。一方面向学生传授程序设计语言基础知识和程序设计的基本理论与方法;另一方面将系统地训练学生逻辑思维能力与逻辑推力能力,培养学生分析问题、解决问题的能力,以及运用计算机解决实际问题的能力。Visual Basic程序设计语言是在早期Basic语言基础上发展起来的,是真正的面向对象编程语言,它继承了结构化编程语言的所有优点,在其语言体系中既包含了面向过程部分的语言特征,又形成了极为完善的对象处理机制、方法,并提供了可视化操作界面,进而形成了一种面向对象编程语言的规范。

2、《Visual Basic程序设计》改革与创新

2.1 应用现代教育技术,推动教学手段现代化

针对高职院校硬件设施配备情况,本课程的教学应在多媒体教室、微机室进行。由任课教师编写电子课件,改变传统的“黑板+粉笔”的教学模式,增大课堂教学的信息量,便于案例教学,使讲授内容形象、直观,便于学生理解掌握。

2.2 针对高职院校学生的特点,开发网络视频网站

高新科技和计算机的飞速发展,给人们带来了更多的便利,开展网络教学已成为学校教育面临信息时代的必然选择。该课程的视频教学将知识学习与网络联系在一起,具备课程学习和自测两个大的功能。通过开发网络视频网站,为学生和学校建立了B/S结构的网络教学体系。

3、《Visual Basic程序设计》方法的改革与创新

3.1 做好本课程的入门教育,调动学生学习积极性

本课程是面向对象程序设计的入门课程,应对学生讲明该课程对后继课程的帮助,强调该课程的重要性。对于非计算机专业学生而言,该课程是零起点,但程序设计难学的观点已对他们有所影响。因此,授课前,向学生们讲明在第一层次《计算机应用基础》课程中仅仅是掌握了应用软件的使用,作为大学生专业素质的补充,应掌握设计、开发应用软件的技能;通过案例演示,激发学生的学习兴趣与积极性。

3.3 改革程序设计教学方式,提高学生的动手能力

通过该课程的学习,培养大学生用计算机的方法分析问题、解决问题的能力,为各专业的后续课程学习以及生活和工作打下良好的技能基础。例如将一个一维数组反序放置:a=(67,89,76,98,66),反序放置后a=(66,98,76,89,67)。编程如下:

Option Base 1

Private Sub Form_Load()

Dim a(5),b(5),nn,i,n

a(1)=67

a(2)=89

a(3)=76

a(4)=98

a(5)=66

Nn=UBound(a)'统计数组个数

'反向复制数组到B

For i=nn To 1 Step-1

N=n+1

b(i)=a(n)

Next

'复制数组到A

For i=1 To nn

a(i)=b(i)

Next

显示结果:

For Each i In a

Debug.Print i

Next

End

End Sub

3.4 课堂讲授与上机实践相结合

通过本课程的教学,使学生掌握面向对象程序设计的基本概念,了解程序设计的基本原理、技巧和方法,并且能够基本掌握IDE集成开发环境使用方法,学会图形用户界面简单应用系统的开发技术,掌握Visual Basic基本对象、属性、方法和事件的基本概念,并能以Visual Basic作为工具,完成简单程序设计的程序代码编写。如:Dim a,b As Integer

For a=100 To 300

If b Mod 5=0 Then Print'判断是否PRINT 5个数了?如果是则换行

Print a,

b=b+1'统计PRINT的个数

Next a

3.5 开展教学经验交流,提高教学水平

学期期间的教研活动重在教学方法和教学经验的交流上,教研室不定期地组织年轻教师听老教师讲课、互相听课和集体备课,研讨教学方法,取长补短。系里组织师生座谈会,了解学生对学习本课程的意见和建议,以对教学方法进行调整,提高教学水平。通过各项教研活动,教学相长,教学效果得到提高。

4、结语

《Visual Basic程序设计》是一门实践性很强的专业课,对培养学生的逻辑思维能力和解决问题的能力具有重要作用,其主要目的是培养学生的专业技能和职业综合素质。因此,如何改革、创新该课程的教学,提高教学质量,为社会培养出既具有丰富的理论知识,又具有较高的分析、设计、开发技能的专业人才,是一个噬待解决的研究课题。

参考文献

[1]刘书珍.探究新的教学方法在VB可视化编程中的应用[J].科海故事博览·科教论坛,2011,(10).

[2]陈龙猛.大案例教学法在Visual Basic程序设计教学中的探究[J].计算机教育,2008,(5).

[3]黄迎久.《Visual Basic程序设计》教学改革与实践[J].现代计算机(专业版),2009,(4).

程序设计范文第3篇

问题1:从前,一个农夫带一只狼,一只羊和一颗白菜过河(注意该狼已被农夫驯服,但还是会吃羊)。他要将所有东西安全的带到河的对岸。不幸的是河边只有一条小船,只能装下农夫和他的一样东西,并且农夫必须每次都随船过河,因为只有他能撑船。在无人看管的情况下狼要吃羊,羊要吃白菜,因此,农夫不能在河的某边岸上单独留下狼和羊,也不能单独留下羊和白菜。问农夫如何才能使三样东西平安过河。——农夫过河

问题2:公安人员审问四名嫌疑犯。已知四人中仅有一名是窃贼还知道这四个人中每人要么是诚实的,要么总是说谎的。在回答公安人员的问题时:

甲说:“乙没有偷,是丁偷的。”

乙说:“我没有偷,是丙偷的。”

丙说:“甲没有偷,是乙偷的。”

丁说:“我没有偷。”

请根据这四人的答话判别谁是盗窃者。——窃贼说谎要解决上面两个问题需通过合理假设与逻辑推演将问题简化,通过正确的表达逻辑关系来驾驭程序设计。

二、逻辑推演在程序设计中的运用

1、委派任务问题

某任务需要在A,B,c,D,E这五人中物色人员去完成,但派人受限于下列条件:

(1)若A去,则B跟去;(2)D,E两人中必有人去;(3)B,C两人中必有人去,但只去一人;(4)c,D两人要么都去,要么都不去;(5)若E去,则A,B都去。问这五个条件如何表示?

分析:求一个逻辑判断类问题的关键是写出正确的逻辑表达式。C语言中提供了丰富的算术和逻辑操作符,可以借助它们将问题化繁为简。将题设条件用程序语言描述清楚后计算机就可以依此穷举。

第一种方法

用0和1表示执行任务的状态:1(去),0(不去),则

A==O或A+B=:2’

D-4-E>1

B+C==l

c+D:=0或c+D==2

E==0或A+B+E=3

各表达式之间是“与”的关系。穷举每个人去或不去的各种可能,代入表达式中进行推理运算,使上述各表达式值均为真的情况就是正确结果。

第二种方法

用位操作。令A,B,C,D,E都为逻辑型值true或false。则:

条件1可以表示为:A—B,它等价于!AttB。

条件2可以表示为:DIIE。

条件3可以表示为:(B&&!c)B&&c),推演为!B:c。

条件4可以表示为:(!CIID)&&(clID!),更简单的形式是c==D。

条件5可以表示为:!EII(A&&B)。

如果将每个人的去与不去看成是5位整数的其中1位,其中A对应最高位,E对应最低位,那么所有可能的调派方案为从全部不派的00000到全部派去的11111之间变化。显然,共有32种方案。全部遍历的循环为:for(inti_0;i<32;i++)。其中每个i对应一个二进制数,为一种调派方案。在某一种调派方案i中:

A为最高位(i&16)>>4或者i>>4(将低位都挤掉)

B为次高位(i&8)>>3

C为中间位(i&4)>>2

D为次低位(i&2)>>l

E为最低位(i&1)

根据求解模式,把这五个条件表示成否定的形式:否定条件1为(!AIIB)=A&&B,否定条件2为!(DJIE),否定条件3为B==C,否定条件4为c!=D,否定条件5为E&&!fA&&B)。在将A——E的式子代入条件表达式,即可编程求解。

2、窃贼说谎问题

来看文章开始时提到的问题2:用A,B,c,D分别代表四人,变量的值为1代表该人是窃贼。已知:四人中仅有一名窃贼,且这四个人中的每个人要么说真话,要么说假话,而由于甲乙丙三人都说了两句话:××没偷,××偷了”,故不论该人是否说谎,他提到的两人之中必有人是小偷。故在列条件表达式时,可以不关心谁说谎,谁说实话。这样,可以列出下列条件表达式:

甲说:“乙没有偷,是丁偷的。”B+D=I

乙说:“我没有偷,是丙偷的。”B+C=I

丙说:“甲没有偷,是乙偷的。”A+B=I

丁说:“我没有偷。”A+B+C+D=I

其中丁只说了一句话,无法判定真假,表达式反映了四个人中仅有一名是窃贼的条件。有了条件表达式,运用程序设计中的穷举法就可以轻松求解。

3、农夫过河问题(逻辑推演方法与BFS、DFS相结合的实例)

用一个四位二进制数来分别表示白菜、羊、狼、和农夫的过河状态0表示在原始岸边,即尚未过河;1表示在目的岸边,已经过河。将过河对象定义为枚举enum类型,bitset<4>类型定义为bitvee(这里用到了c++标准函数库STL)。枚举类型定义过河者时,是按照白菜、羊、狼、和农夫的次序分别定义的。这种次序中前三者的顺序可以随意,但农夫farmer必须在最后,目的是便于在试探随农夫过河的对象时逐序进行所有的东西都不能带过河时,最后才选择让农夫单独过河。

enumWader

{

cabbage,//默认为1

goat,//默认为2

wolf,//默认为3

farmer,//默认为4J;

typedefbitset<4>bitvec;

过河的对象必须与农夫在河的同一侧,设计函数withFarmer来判断。如果当前state下,过河对象与农夫的状态参数一致,则返回真,表示二者在河的同一侧。

此外,不论农夫每次过河带的东西如何,首先都应该判断这样过河是否安全,即在无人看管的情况下,狼和羊,羊和白菜都没有在河的同侧,函数is_sMe完成判断。当农夫与羊不在河的同侧时,羊与白菜、或羊与狼在同侧都是不安全的,返回false;其他情况则是安全的,

为了防止发生状态的往复,即农夫将一个东西带过去又带回来的情况发生,也为了记录过河的状态过程,对所有可能的状态进行标定。四位二进制数的所有可能状态为16,都初始化为一1,表示过河过程中尚未出现过;随着过河过程的不断进行,它被改变为其前一状态二进制数对应的整数值。

于是,农夫过河问题经过二进制化以后,化为从初始状态0000出发,经过~系列安全状态后,如果最后状态到达,即path[15]有前驱状态,则表示过河成功。问题求解后得到一系--进制数,将这一系列二进制数表示的过河状态转换为实际的过河方案即可。

三、总结

程序设计范文第4篇

一、前言

Windows提供强大的功能以及友好的图形用户界面(GUI),使得它不仅广泛的用作管理事务型工作的支持平台,也被工业领域的工程人员所关注。但Windows3.1并非基于优先级来调度任务,无法立即响应外部事件中断,也就不能满足工业应用环境中实时事件处理和实时控制应用的要求。因此,如何在Windows环境中处理外部实时事件一直是技术人员尤其是实时领域工程人员所关注的问题。目前已有的方法大都采用内挂实时多任务内核的方式,如Windows下的实时控制软件包FLX等,而iRMX实时操作系统则把Windows3.1当作它的一个任务来运行。对于大型的工程项目,开发人员可采用购买实时软件然后集成方式。

对中小项目,从投资上考虑就不很经济。如何寻找一种简明的方法来处理外部实时事件依然显得很必要。

本文首先阐述Windwos的消息机制及中断机制,然后结合DPMI接口,给出一种保护模式下中断程序的设计方法,以处理外部实时事件。经实际运行结果表明,该方法具有简洁、实用、可靠的特点,并同样可运行于Win95。

二、Windows的消息机制

Windows是一消息驱动式系统,见图1。Windows消息提供了应用程序与应用程序之间、应用程序与Windows系统之间进行通讯的手段。应用程序要实现的功能由消息来触发,并靠对消息的响应和处理来完成。

Windows系统中有两种消息队列,一种是系统消息队列,另一种是应用程序消息队列。计算机的所有输入设备由Windows监控,当一个事件发生时,Windows先将输入的消息放入系统消息队列中,然后再将输入的消息拷贝到相应的应用程序队列中。应用程序中的消息循环从它的消息队列中检索每一个消息并发送给相应的窗口函数中。一个事件的发生,到达处理它的窗口函数必需经历上述过程。值得注意的是消息的非抢先性,即不论事件的急与缓,总是按到达的先后排队(一些系统消息除外),这就使得一些外部实时事件可能得不到及时的处理。

图1

三、Windows的保护模式及中断机制

1.Windows的保护模式

保护模式指的是线性地址由一个选择符间接生成的,该选择符指向描述表中的某一项;而实模式中则通过一个段/偏移量对来直接寻址。80386(486)CPU提供的保护模式能力包括一个64K的虚拟地址空间和一个4G的段尺寸。Windows3.1实现时有所差别,它支持标准模式和增强模式。标准模式针对286机器,不属本文探讨范围。增强模式是对386以上CPU而言,Windows正是使用保护模式来打破1M的屏障并且执行简单的内存保护。它使用选择器、描述器和描述器表控制访问指定内存的位置和段。描述器表包括全局描述器表、局部描述器表、中断描述器表。保护模式与实模式有许多不同。其中显着的差异是访问内存的机制不同。

2.中断机制

(1)实模式中断

为了便于理解,我们先回顾实模式中断。

在实模式下,中断向量表IVT起到相当重要的作用。无论来自外部硬件的中断或是内部的软中断INTn,在CPU中都产生同样的响应。

①CPU将当前的指令指针寄存器(IP)、代码段寄存器(CS)、标志寄存器压入堆栈。

②然后CPU使用n值作为指向中断向量表IVT的索引,在IVT中找出服务例程的远地址。

③CPU将此远地址装入CS:IP寄存器中,并开始执行服务例程。

④中断例程总以IRET指令结束。此指令使存在堆栈中的三个值弹出并填入CS、IP和标志寄存器,CPU继续执行原来的指令。

(2)保护模式中断

保护模式中断过程与实模式中断过程类似,但它不再使用中断向量表IVT,而使用中断描述符表(IDT)。值得一提的是,Windows运行时IVT还存在,应用程序并不使用它,Windows仍然使用,但含义已不同。

①IVT结构:IVT在RAM的0000∶0000之上,占据开始的1024字节。

它仍然由BIOS启动例程设置,由DOS填充到RAM中。

②IDT中断描述符表:保护模式下,Windows操作系统为实现中断机制而建立的一个特殊表,即中断描述符表IDT。该表被用来保存中断服务例程的线性地址,它们是真正的24位或32位地址,没有段:偏移值结构。中断描述器表最多可含有256个例程说明,详细说明请见【3】。I

DT结构见图2。

图2

③当中断或异常发生时,处理过程与实模式类同。当前的CS∶IP值和标志寄存器值被存储。保存的内容还包括CPU其他内部寄存器的值,以及目前正在被执行的任务的有关信息(若必须发生任务切换的话)。CPU设法获取中断向量后,以它为索引值,查找IDT中的服务例程远地址,接着将控制转移到该处的服务例程。这是与实模式转移到IVT的不同所在。保护模式使用IDTR寄存器分配和定位内存中的IDT中断描述符表。IDT在内存中是可移动的,与IVT固定在内存中刚好相反。IDT中断描述符表在Windows中起决定性的作用。理解了Windows下保护模

式的中断机制。有助于我们理解中断服务程序的设计,它的关键就在于如何将服务例程的地址放入IDT中断描述符表中。当中断发生时,如何将断点地址及CPU各寄存器值保护起来;中断结束时,如何将保护的值恢复。Windows系统本身并不提供实现上述功能的API,而DOS保护模式接口DPMI正具备了上述的功能。

下面我们首先介绍DPMI接口,然后基于它实现Windows下中断服务程序的设计。

四、DOS保护模式接口DPMI

Windows除了标准服务外,还支持一组特殊的DOS服务,称为DOS保护模式接口DPMI,由一些INT 2FH和INT 31H服务组成。它使应用程序能够访问PC系列计算机的扩充内存,同时维护系统的保护功能。DPMI通过软件中断31h来定义了一个新的接口,使得保护模式的应用程序能够用它作分配内存,修改描述符以及调用实模式软件等工作。

Windows为应用程序提供DPMI服务。即Windows是DPMI的宿主(host),应用程序是DPMI的客户(client),可通过INT-31H调用得到DPMI服务。INT-31H本身提供多功能。其中它的中断管理服务允许保护模式用于拦截实模式中断,并且挂住处理器异常。有些服务能够和DPMI宿主合作,以维护应用程序的虚拟中断标志。

可以用INT31H来挂住保护模式中断向量,以中断方式处理外部实时事件。利用INT31H,功能0205H:设置保护模式中断向量,将特定中断的保护模式处理程序的地址置入中断向量里。调用方式:AX=0205H,BL=中断号,CX∶(E)DX=中断处理程序选择符:偏移值。返回:执行成功CF=清零,执行失败CF=置位。

挂住/解挂中断向量的时机很重要。主窗口第一次被创建时会传送它WM-CREATE消息,这时是挂住中断向量的最好时机。退出时需解挂向量,否则Windows可能崩溃。主窗口接收到WM-DE-STROY之后进行解挂工作,是最适合的。解挂向量可先用INT35H,0204H功能将老的中断向量保存,退出时用INT35H,0205H恢复。

五、编程实现

有了DPMI的支持,我们就可以很方便地处理数据采集、串行

通信等工业过程中的实时事件。下面以Windows3.1平台下中断方式实现的串行通信为例,说明中断程序的编制和实现。为便于参考,给出了详细的代码。开发平台BC3.1/BC4.5,其本身支持0.9版的DPMI,无需运行其它支持DPMI的软件。编程语言C,可与C++混合编译。

初始化COM1,9600波特率,每字符8bits,1个停止位,中断接收,查询发送。

//windows asy communication

//by Li Xiuming

//last modified on June 25,1996

#include〈windows.h〉

#include〈dos.h〉

void interrupt far DataReceive();

void interrupt far (*old-vector)();

unsigned char datacom-r[1024],datacom-s[1024];

int inflag=0;

unsigned int s8259;

int InitCom1()

{ //串口1初使化

s8259=inportb(0x21); //读入8259当前状态并保存

outportb(0x21,s8259&0xe8); //初始化8259,允许0x0c号中断

outportb(0x3fb,0x83);

outportb(0x3f8,0x0c);

outportb(0x3f9,0x00);

outportb(0x3fb,0x03);

outportb(0x3fc,0x08); //允许中断信号送到8259A,以便能中断

outportb(0x3f9,0x01); //0x01,中断允许

return 1;

}

void interrupt far DataReceive()

{ //中断接收子程序

static int i=0; //静态局部变量

char rechar=0; //每中断一次,i自动加1

rechar=inportb(0x3f8); //从数据口读出发送过来的数据

if(inflag==0)

{

if(rechar!=s &&i==0) //帧起始

{

i=0;

goto ll;

}

datacom-r[i++]=rechar; //存入datacom-r[](通信缓冲区)

if(rechar==e) //帧结束

{

inflag=1;

i=0;

}

}

ll:outportb(0x20,0x20); //回送中断结束标志

}

//调用DPMI

//保存旧的0CH号保护模式中断向量

//设置新的保护模式中断服务例程

void InitCom(void)

{

asm{

cli

mov ax,204h

mov bl,0ch

int 31h

sti

}

old-vector=MK-FP(-CX,-DX);//保存

asm{ cli //设置新的0x0c中断服务例程

mov ax,205h

mov bl,0ch

mov cx,seg datareceive

mov dx,offset datareceive

int 31h

sti

}

InitCom1();

}

//恢复8259状态

//恢复0CH保护模式向量

void RestoreComm(void)

{

outportb(0x21,s8259);

asm{

cli

mov ax,205h

mov bl,0ch

mov cx,seg old-vector

mov dx,offset old-vector

int 31h

sti

}

}

在窗口第一次被创建时会传送它WM-CREATE消息,这时调用InitCom()即可。在主窗口关闭时,即主窗口中收到WM-DESTROY消息时,调用RestoreComm()恢复原来的状态。

这样在对串口初始化,设置中断服务例程后,通信事件发生时,会立即跳入中断子程序中执行,越过系统的消息队列,达到实时处理通信事件的目的。而数据处理模块可通过全局标志flag访问全局的数据通信缓冲区获取实时数据。这种实现方式与基于消息机制的Windows通信API实现相比具有实时性强的特点,因为它超过Windows系统的两!极消息机制。

上述程序已在实际系统中得到应用。在Windows 3.1支持下,同时运行三个Windows任务:服务器SERVER(内有实时串行通信,多个网络数据子服务),客户CLIENT,FOXPRO数据库系统。整个系统运行良好。切换到WIN95平台下(支持0.9版DPMI),系统也运行良好。

参考文献

1 张豫夫、曹建文译.【澳】Barry Kauler着.Windows汇编语言及系统程序设计.北京大学出版社,1995

2 赵人任等译.【美】Mike Klein者.Windows程序员使用指南(一).北京:清华出版社,1995

程序设计范文第5篇

关键词:消息驱动;消息映射;MFC程序设计

1引言

微软公司提供的MFC基本类库(MicrosoftFoundationClasses),是进行可视化编程时使用最为流行的一个类库。MFC封装了大部分WindowsAPI函数和Windows控件,使得程序的开发变得简单,极大的缩短了程序的开发周期。MFC独创的Document/View框架结构,能够将管理数据的代码和显示数据的程序代码分开,并且设计了一套方便的消息映射和命令传递机制,方便程序员的开发使用。其中消息映射机制本身比较庞大和复杂,对它的分析和了解无疑有助于我们写出更为合理的高效的程序。这里我们分析一下MFC的消息映射机制,以了解MFC是如何对Windows的消息加以封装,方便用户的开发。

2SDK下的消息机制实现

首先,简单回顾一下SDK下我们是如何进行Windows的程序开发的。Windows程序的运行是依靠外部发生的事件来驱动的,事件由操作系统捕捉,以消息的形式进入消息队列,然后通过消息循环从队列中不断取出消息,送到对应的窗口过程里处理。相对于DOS程序,Windows是以WinMain作为程序的入口点,以下就是一个简化的Win32程序的主体,通过while语句实现消息循环:

WinMain(…)

{

MSGmsg;

RegisterClass(…);//注册窗口类

CreateWindow(…);//创建窗口

ShowWindow(…);//显示窗口

UpdateWindow(…);

While(GetMessage(&msg,…)){//消息循环

TranslateMessage(…);

DispatchMessage(…);

}

returnmsg.wParam;

}

其中,msg代表消息,程序是通过GetMessage函数从和某个线程相对应的消息队列里面把消息取出来并放到消息变量msg里面。然后TranslateMessage函数用来把键盘消息转化并放到响应的消息队列里面,最后DispatchMessage函数把消息分发到相关的窗口过程去处理。窗口过程根据消息的类型对不同的消息进行相关的处理。在SDK编程过程中,用户需要在窗口过程中分析消息的类型及其参数的含义,然后做不同的处理,相对比较麻烦;而MFC把消息调用的过程给封装起来,使用户能够通过ClassWizard方便的使用和处理Windows的各种消息。

3MFC中的消息映射机制

在MFC的框架结构下,“消息映射”是通过巧妙的宏定义,形成一张消息映射表格来进行的。这样一旦消息发生,Framework就可以根据消息映射表格来进行消息映射和命令传递。

首先在需要进行消息处理的类的头文件(.H)里,都会含有DECLARE_MESSAGE_MAP()宏,声明该类拥有消息映射表格:

classCscribbleDoc:publicCdocument

{

DECLARE_MESSAGE_MAP()

};

然后在类应用程序文件(.CPP)实现这一表格

BEGIN_MESSAGE_MAP(CInheritClass,CBaseClass)

//{{AFX_MSG_MAP(CInheritClass)

ON_COMMAND(ID_EDIT_COPY,OnEditCopy)

………

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

----这里主要进行消息映射的实现,把它和消息处理函数联系在一起。其中出现三个宏,第一个宏是BEGIN_MESSAGE_MAP有两个参数,分别是拥有消息表格的类,及其父类。第二个宏是ON_COMMAND,指定命令消息的处理函数名称。第三个宏是END_MESSAGE_MAP()作为结尾符号。中间的奇怪符号//}}和//{{,是ClassWizard产生的,对程序无影响。

观察DECLARE_MESSAGE_MAP的定义:

#defineDECLARE_MESSAGE_MAP()

private:

staticconstAFX_MESSAGE_ENTRY_messageEntries[];

protected:

staticAFX_DATAconstAFX_MSGMAPmessageMap;

virtualconstAFX_MSGMAP*GetMessageMap()const;

里面又包含了MFC新定义的两个数据结构,如下:

AFX_MSGMAP_ENTRY

structAFX_MSGMAP_ENTRY

{

UINTnMessage;//windowsmessage

UINTnCode;//controlcodeorWM_NOTIFYcode

UINTnID;//controlID(or0forwindowsmessages)

UINTnLastID;//usedforentriesspecifyingarangeofcontrolid''''s

UINTnSig;//signaturetype(action)orpointertomessage#

AFX_PMSGpfn;//routinetocall(orspecialvalue)

};

和AFX_MSGMAP

structAFX_MSGMAP

{

constAFX_MSGMAP*pBaseMap;

constAFX_MSGMAP_ENTRY*lpEntries;

};

其中AFX_MSGMAP_ENTRY结构包含了一个消息的所有相关信息,而AFX_MSGMAP主要作用有两个,一是用来得到基类的消息映射入口地址。二是得到本身的消息映射入口地址。

实际上,MFC把所有的消息一条条填入到AFX_MSGMAP_ENTRY结构中去,形成一个数组,该数组存放了所有的消息和与它们相关的参数。同时通过AFX_MSGMAP能得到该数组的首地址,同时得到基类的消息映射入口地址。当本身对该消息不响应的时候,就可以上溯到基类的消息映射表寻找对应的消息响应。

现在我们来分析MFC是如何让窗口过程来处理消息的,实际上所有MFC的窗口类都通过钩子函数_AfxCbtFilterHook截获消息,并且在钩子函数_AfxCbtFilterHook中把窗口过程设定为AfxWndProc。原来的窗口过程保存在成员变量m_pfnSuper中。

在MFC框架下,一般一个消息的处理过程是这样的。

(1)函数AfxWndProc接收Windows操作系统发送的消息。

(2)函数AfxWndProc调用函数AfxCallWndProc进行消息处理,这里一个进步是把对句柄的操作转换成对CWnd对象的操作。

(3)函数AfxCallWndProc调用CWnd类的方法WindowProc进行消息处理。

(4)WindowProc调用OnWndMsg进行正式的消息处理,即把消息派送到相关的方法中去处理。在CWnd类中都保存了一个AFX_MSGMAP的结构,而在AFX_MSGMAP结构中保存有所有我们用ClassWizard生成的消息的数组的入口,我们把传给OnWndMsg的message和数组中的所有的message进行比较,找到匹配的那一个消息。实际上系统是通过函数AfxFindMessageEntry来实现的。找到了那个message,实际上我们就得到一个AFX_MSGMAP_ENTRY结构,而我们在上面已经提到AFX_MSGMAP_ENTRY保存了和该消息相关的所有信息,其中主要是消息的动作标识和相关的执行函数。然后我们就可以根据消息的动作标识调用相关的执行函数,而这个执行函数实际上就是通过ClassWizard在类实现中定义的一个方法。这样就把消息的处理转化到类中的一个方法的实现上。

(5)如果OnWndMsg方法没有对消息进行处理的话,就调用DefWindowProc对消息进行处理。这是实际上是调用原来的窗口过程进行缺省的消息处理。所以如果正常的消息处理的话,MFC窗口类是完全脱离了原来的窗口过程,用自己的一套体系结构实现消息的映射和处理。即先调用MFC窗口类挂上去的窗口过程,再调用原先的窗口过程。用户面对的消息参数将不再是固定的wParam和lParam,而是和消息类型具体相关的参数。比如和消息WM_LButtonDown相对应的方法OnLButtonDown的两个参数是nFlags和point。nFlags表示在按下鼠标左键的时候是否有其他虚拟键按下,point更简单,就是表示鼠标的位置。同时MFC窗口类消息传递中还提供了两个函数,分别为WalkPreTranslateTree和PreTranslateMessage。我们知道利用MFC框架生成的程序,都是从CWinApp开始执行的,而CWinapp实际继承了CWinThread类。在CWinThread的运行过程中会调用窗口类中的WalkPreTranslateTree方法。而WalkPreTranslateTree方法实际上就是从当前窗口开始查找愿意进行消息翻译的类,直到找到窗口没有父类为止。在WalkPreTranslateTree方法中调用了PreTranslateMessage方法。实际上PreTranslateMessage最大的好处是我们在消息处理前可以在这个方法里面先做一些事情。举一个简单的例子,比如我们希望在一个CEdit对象里,把所有的输入的字母都以大写的形式出现。我们只需要在PreTranslateMessage方法中判断message是否为WM_CHAR,如果是的话,把wParam(表示键值)由小写字母的值该为大写字母的值就实现了这个功能。

4小结

MFC通过巧妙的宏定义把消息调用的过程给封装起来,使用户能够通过ClassWizard方便的使用和处理Windows的各种消息。通过对MFC消息映射机制的分析,不仅能够使我们更好的使用MFC类库,同时,对于我们自己设计程序框架和类,无疑也有相当大的帮助。

参考文献:

[1]侯俊杰著,深入浅出MFC(第2版)[M].湖北:华中科技大学出版社,2001.5

程序设计范文第6篇

关键词: PLC 设计步骤 编程技巧

可编程控制器是以微处理器为基础的新型工业控制装置,它采用可编程序的存储器,用来在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令,并通过数字式、模拟式的输入和输出,控制各类机械或生产过程。梯形图程序设计是可编控制器应用中最关键的问题,也是高职学生难以掌握和接受的问题,在教学当中总是会有许多学生遇到PLC程序设计时无从下手的问题。其实只要掌握方法,理清每个控制系统的设计思路,再难的设计项目也能设计出来。我结合教学经验谈谈PLC教学中的程序设计技巧。

一、程序设计步骤

1.分析被控对象及控制工艺要求,确定控制方案,确定系统外部输入设备和输出设备的个数,以确定PLC的I/O点数。

2.对系统进行端口分配,并画出PLC的I/O接线图。

3.编写梯形图。

4.将梯形图转换成指令表后传送到PLC控制装置,并根据端口分配连好外部接线。

5.对程序进行修改和调试,直到满足控制要求。

以上是PLC控制系统设计的步骤,学生往往不按这样的步骤来执行,常常导致端口与程序中的编程元件不对应。其中梯形图的设计是系统程序设计的重点,也是学生难以掌握的难点,下面就以上PLC程序设计步骤结合三菱的控制案例进行PLC程序设计技巧的说明。

二、系统设计案例说明

1.液体混合控制控制要求

(1)按下启动按钮后,电磁阀Y1、Y2打开,注入液体A与B,液面高度为L2时(此时L2和L3均为ON),停止注入(YI、Y2为OFF);同时开启液体C的电磁阀Y3(Y3为ON),注入液体C,当液面升至L1时(L1为ON),停止注入(Y3为OFF);并同时开启搅拌机M,搅拌时间为10s,之后自动开始加热,当温度达到要求时(手动操作),电磁阀Y4开启(ON),排出液体,当液面高度降至L3时(L3为OFF),再延时5s,Y4关闭。接着,电磁阀Y1、Y2打开,重新注入液体A与B,如此循环动作,直到按下停止按钮。

(2)按下停止按钮后,系统完成当前的操作后,停止在初始状态,按启动按钮后可以重新开始工作。

(3)当Y1、Y2及Y3阀门分别得电30s后,液面仍没有变化,表明Y1、Y2和Y3出现故障,这时要求指示灯HL1、HL2分别闪烁报警,5s后将系统立即关闭停止报警并回到初始状态。

2.设计原理分析

为了用PLC控制器来实现任务,PLC需要6个输入点,8个输出点,输入输出点分配如下。

(1)端口分配。端口分配对于初学者来说是一个难点,他们往往对输入和输出设备分不清楚,其实只要记住输入只是控制系统得以运行的条件就可以了。有开关量和模拟量,常见的设备有:按钮、开关、行程开关、限位开关、光电开关、液位继电器、压力继电器等。而输出就是控制系统控制过程当中的一些动作,常见的设备有控制电机的接触器、电磁阀、信号指示灯、蜂鸣器、加热器等。只有端口分配完成并正确之后,我们才可以利用PLC内的编程元件对控制系统进行完整的控制。本例的端口分配表如下:

根据以上端口分配设计出相应的外部I/O接线图即可进行外部接线。

(2)梯形图设计。PLC程序设计的方法很多,但我们教学当中常用的就是经验设计法和顺序功能图的设计方法。其中经验设计法是在典型电路的基础上面进行修改而达到控制要求的方法,故这种方法具有很大的试探性和随意性,通常用于简单控制系统的设计。而顺序功能图的设计法是按照控制系统工艺流程,用转换条件控制代表各步的编程元件,让它们的状态按一定的顺序变化,然后用代表各步的编程元件去控制PLC的各输出继电器的设计方法。这种设计方法对于设计复杂的控制系统比较简单,容易被学生所接受。

此实例根据控制要求的分析,这是一个典型的混合物生产工艺过程,可采用顺序功能图来设计,但是其中有一些特殊的情况,如在控制过程当中需要按停止按钮,而系统必须要等加工过程全部完成才能停止运行;出现系统故障时要灯光闪烁报警等问题。我们可以采用经验设计法来结合实现。

①第一步顺序功能图设计。根据控制要求(1),首先将液体混合装置进行混合的这个工作周期分成注AB液体、注C液体、搅拌、加热、排出液体、延时排液等6个阶段完成,再加上初始步骤,一共有7步完成,这个我们可以采用顺序功能图的单序列列出。但控制要求(3)有注A、B液体和C液体故障时分别闪烁报警延时返回的两种特殊情况,故有二条支路返回,从而构成了选择序列顺序功能图。再找到每个步之间的转换条件,根据液体混合过程当中转换实现的条件和转换要完成的操作的内容,设计出顺序功能图。以下是采用S编程的步进设计法来实现的,只要将该顺序功能图转换成步进梯形图即可。

②经验设计法设计系统停止电路和闪烁电路。在控制要求中,停止按钮X4的按下并不是按顺序进行的,在任何时候都可能按下停止按钮,而且不管什么时候按下停止按钮都要等到当前工作周期结束后才能响应。而停止按钮X4的操作不能在顺序功能图中直接反映出来,因为停止按钮是瞬时信号,必须采用具有记忆功能的电路将该停止停号保存起来,故这里采用了M0的自锁电路(梯形图如下),可以用M0的常开常闭触点间接表示出来。如果系统中要求按下停止按钮后立即停止,按下启动按钮后能从该步运行的话,也可采用此电路中的M0的常闭触点与每步的步进触点相连即可实现此功能。

系统中的闪烁电路可以在闪烁步骤中串入PLC内部提供的时钟脉冲特殊辅助继电器常开触点M8013来实现。

③编写梯形图。将①的顺序功能图转换成步进的梯形图,再将②的梯形图放到1的梯形图的前面,这样,顺序设计法和经验设计法设计的梯形图就有机的结合在一起共同实现混合液体装置的控制过程。我们常常会碰到类似的复杂系统,往往用一种方法不能实现控制要求,我们不妨采用顺序功能图与经验设计结合的方法来实现。

(4)接线并运行调试。在编程软件上画出梯形图并传送入PLC内部,根据端口分配连接好外部接线。按控制要求顺序进行调试和修改,直到系统功能得以实现。

三、结语

本文结合PLC控制系统的设计步骤对PLC程序设计进行了大概的分析,教会初学者掌握程序设计的基本设计思路,在混合液体装置的梯形图设计中,合理地采用了学生易接受的顺序控制设计法和经验设计法结合的设计方法,使设计程序更完善、更简单、直观。虽然这只是PLC教学众多实例中的一个,但它具有代表性,包含了PLC教学当中程序设计的全过程及常用设计方法。通过这个实例起到举一反三、触类旁通的作用,帮助初学者克服PLC程序设计难题,全面提高设计能力。

参考文献:

[1]吴明亮.电气控制与PLC.黄河水利出版社,2009.

[2]廖常初.可编程控制器应用技术.重庆大学出版社,2008.

[3]瞿彩萍.PLC应用技术(三菱).中国劳动社会保障出版社出版社,2008.

[4]张桂香.电气控制与PLC应用.化学工业出版社,2008.

程序设计范文第7篇

关键词:多线程;类;接口;同步

中图分类号:TP311.11 文献标识码:A 文章编号:1007-9599 (2013) 02-0000-02

1 引言

通常,需要将程序划分为数个独立执行的子任务,这些独立的子任务即所谓的线程。线程是进程中的一个单一连续控制流程。一个进程可以拥有多个并行的线程。多线程序的用途很广泛。一般说来,当程序的某一部分与特定事件或资源捆绑在一块时,程序其他部分的执行不因此而搁置,于是便产生一个和该事件或该资源相关的线程,并且让此线程不干扰主程序的运作。多线程可以减轻系统性能方面的瓶颈,提高CPU的处理器的效率。

2 线程的创建与生命周期

2.1 线程的创建

产生线程最简单的方法,是通过继承class Thread来实现。这个class拥有产生、运行线程的所有的必要机制。在Thread中,最重要的方法是run( ),通过覆写此方法,使线程执行指派的工作。这样,run( )就和程序中的其他线程同时执行。

2.2 线程的生命周期

(1)创建状态。一个线程对象被创建。(2)可运行状态。线程获得了CPU的执行时间,便可运行。虽然处于可运行状态,但自定义线程对象并不一定立即运行,其是否运行是由Java的运行系统来协调的。(3)阻塞状态。阻塞状态就是一个线程对象因为人为或系统原因必须暂停运行,以后还可以恢复运行的状态。当下面的几种情况之一发生后,线程对象就由可运行状态进入阻塞状态。一是通过sleep( )让线程进入休眠状态;二是通过suspend( )暂停线程;三是通过wait( )暂停线程;四是线程正在等待某个I/O动作的完成;五是线程试着调用另一个对象的synchronized函数。(4)终止状态。线程的正常结束方式,就是从其run( )中回返。或者是非正常结束,如调用了stop( )。

3 多线程实现方式

3.1 通过扩展Thread类来创建多线程

从程序中可以看出,每个线程分别对应50套服装,它们中间没有其他联系,也就是说,三个线程之间的地位是平等的,不存在谁先谁后的问题,因此,应该是机会均等地得到CPU的处理。但实际上,这三个线程并不一定是交换依次运行,而是在三个线程同时被执行的情况下,有的服装会卖得迟一些,而有的服装会提前卖完,所以,三个线程在真正工作时,有的被分配的CPU的时间多一些,而有的相反要少一些。

从上可知,通过继承线程类而创建的多线程,在程序上看,代码是一样的,可是在执行中,彼此没有联系,拥有自己的资源。

3.2 通过实现Runnable接口来创建多线程

4 线程同步

一个变量被多个线程访问,会带来冲突的问题,那么就需要相应的机制解决冲突,这样,就引入了synchronized 关键字。以下例说明,A和B两人同管一个帐本,A负责存款事情,B负责取款事情。A使用帐本时,B被禁止使用,反之亦然。程序中是否需要多线程,要考虑它是否符合多线程的特点,多线程操作机制对线程通信和线程管理的强大支持才能有用武之地,这时使用多线程才是最合适的。

参考文献:

[1]侯捷.Java编程思想[M].机械工业出版社,2005.

[2]聂哲,袁梅冷,杨淑萍.Java面向对象程序设计[M].高等教育出版社,2005.

[3]张居敏.Java程序设计经典教程[M].电子工业出版社,2008.

[4]印.Java与面向对象程序设计教程[M].高等教育出版社,1999.

程序设计范文第8篇

1依据课程内在联系

构建软件设计系列课程群构成学生程序设计能力的计算思维、算法设计、程序设计与实现和系统分析能力四个基本要素,关键是提高计算思维、抽象思维、逻辑思维的能力,一两门孤立的语言或算法课程无法完成,这需要从系统工程的角度进行整体设计,组合相关的系列课程构成相应的教学和实践系统,并有一个循序渐进的深入过程,这一过程一般需要经过知识的积累、程序设计课程学习、软件开发实践等不同的环节,也就是要经历启蒙入门,发展提高和开发应用三个阶段[2]。通过贯穿大学四年的程序设计类课程的学习,学生在程序设计启蒙入门、发展提高和开发应用的不同阶段都能够很好地达到各个阶段的教学要求,形成良好的学习习惯,循序渐进、潜移默化地养成程序设计能力。因此,依据程序设计能力不同培养阶段的教学规律,我们应选择对学生程序设计能力培养有着关键作用的课程组成软件设计类课程群,课程群的主要课程可由以下课程组成。1)启蒙入门阶段:计算机导论、程序设计基础、面向对象程序设计等。2)发展提高阶段:数据结构、面向对象程序设计、计算方法、数据库基础、软件工程、Java程序设计等。3)开发应用阶段:网络程序设计、数据库开发实践、医学信息学、信息系统设计、医学图象处理等。建设课程群的目的是把原本相对独立的课程在教学过程中有机融合,前后课程互相呼应,逐步深化,把学生引入门。在课程群内涵建设中,按“点—线—面—体”的思路构建课程群框架,即以每门课程的主要知识点为基础,把程序设计类主干课程串成前后有机衔接的教学“线”,在课程群的“面”上构建课内外相关的任务驱动学习激励机制,最终形成软件设计课程群的体系结构和系统化的程序设计类课程教学框架[4]。在具体实践中,从分析课程群每门课程的知识点入手,从知识点内涵、教学要求、教学策略以及与前驱知识点和后续知识点关系等多个维度建立课程群中课程的知识架构的点、线关系,进而形成相关课程知识点前驱、后续知识点互相融合汇聚的知识面和课程体系。在此基础上通过完善相关课程教学大纲,达到目标明确、层次分明、定位正确、强化基础、拓宽专业知识面的应用型人才培养的要求。

2建立基于混合式学习的程序设计课程群教学模式

混合式学习(BlendingLearning)将传统的课堂学习方式和数字化学习方式有机整合,根据程序设计能力培养的启蒙入门、发展提高和开发应用不同阶段教学特点,围绕程序设计能力的“算法设计与分析能力、程序设计与实现能力和系统分析、开发能力”的递进培养目标,从混合式学习课程导入机制、多元化的程序设计课程活动组织策略、课内外学习支持以及教学评价等四个教学环节,从启蒙入门、发展提高、开发应用不同阶段组织开展混合式学习[5-7]。2.1启蒙入门阶段从程序设计能力入门训练入手,其重点在算法设计与分析能力的培养。针对大一、大二学生程序设计启蒙课程主要有计算机导论、程序设计基础等;教学围绕基本知识点训练编程思路、算法设计与分析方法,引导学生入门;教学活动组织中侧重于以班集体为单位的理论和实验教学,同时结合程序设计竞赛、课程设计、大作业等开展课外编程学习;建立BB平台、开发上线ZCMUOJ(ZhejiangChineseMedicalUniversityOnlinejudge:浙江中医药大学在线编译)系统,使之成为程序设计阶段课外学习平台,把师生面对面及借助网络和BB平台的辅导相结合,通过检查平时程序设计作业完成情况和程序代码数量和质量,以及期末的现场程序设计实验考试,进行学习成绩综合评价。2.2发展提高阶段发展提高阶段重点在程序设计与实现能力培养,从软件工程的角度,研究从程序设计到软件设计能力培养。本阶段主要是针对大二、大三学生,主要课程有数据结构、面向对象程序设计、计算方法、数据库基础、软件工程等;该阶段的教学侧重在程序设计的综合性、整体性素养培养,综合相关课程设计任务,以设计性、综合性实验为主,重点围绕软件开发的完整流程开展实践,强调团队分工与协作;以小组协作方式为主,根据各课程知识间的依赖特性从课程群的角度组织开展课程设计与假期实践;同时,强化软件集成开发环境(如VisualStudioTeamSystem、Eclipse等),版本控制工具(如CVS等)等协同开发环境的应用;教师的角色也随之从“教”师变为“导”师,提供实践思路与方法的指导,引导小组成员协作学习、角色扮演、讨论交流;教学评价侧重于程序开发、文档撰写、软件评测、团队协作等多个角度,通过小组自评、组间互评与教师评价等方式综合考量。2.3开发应用阶段开发应用阶段重点在系统分析、开发能力培养,软件团队合作开发训练,基于常用团队协作软件开发平台的软件开发训练。针对大三、大四学生结合计算机应用领域,特别是我校医学领域信息开发的优势,从医学信息学的角度,开展跨学科的医疗卫生信息化项目开发实践。该阶段课程群主要课程有医学信息学、信息系统设计、Java程序设计、网络程序设计、数据库开发实践、医学数字图象处理等;该阶段以项目实训、企业实践为主,重点围绕医学信息工程软件开发、网络管理软件、数据库管理软件开发等以及软件测试等多种角色开展教学;以团队分工协作的方式开展课程设计、项目实训和科研项目开发,并与相关卫生信息化企业合作开展企业实践,组织学生参与医院信息化项目研发;由相关教师组成导师组,以客户经理、项目经理等角色给予项目团队方向、思路、策略的指导,教师参与并鼓励学生借助网络等相关资源共同研究解决完善相关问题;通过项目答辩的形式检查实训成果。

3以任务驱动的课内外程序设计推进机制

程序设计能力的培养,仅靠课内的教学是远远不够的,需要建立完善的课外程序设计学习机制,激发学生学习积极性和学习潜力,为此,我们主要采取程序设计类课程布置的课外大作业、课程设计任务以及参与教师实际科研项目开发等多种途径来驱动学生的课外参与程序设计能力训练,同时建立多种形式的验收讲评和评价激励机制,任务驱动与激励机制的结合是引导学生课外开展程序设计一种有效措施[8]。3.1启蒙入门阶段以程序设计竞赛为抓手在低年级学生的程序设计能力启蒙入门阶段,以实施课外程序设计竞赛为抓手,从程序设计能力培养与训练入手,根据程序设计能力的教学规律,建立不同难度、不同层次的课外程序设计训练和竞赛为主的学习激励机制;设计开发适合我校学生特点的ZCMUOJ系统,使之成为学生参与程序设计的主要学习支持平台。为了吸引同学参与课外程序设计,我们建立了周赛、月赛、学期比赛以及单挑赛等多种形式的程序设计竞赛机制,刺激学生的参与兴趣。平均每周组织一次程序设计周赛,每月组织一次个人单挑赛和团体月赛,每学年分别组织学院比赛和学校比赛,参与人员覆盖了计算机专业一二年级70%学生。以程序设计竞赛为主要抓手的程序设计能力培养使学生程序设计能力明显提高,低年级学生完成课程设计的编程难度和代码数量明显提高,学习程序设计的兴趣明显上升,特别是在ACM比赛中,我校2011年浙江省ACM程序设计竞赛中获铜奖三项;2011年4月,我校在ACM-ICPC亚洲赛区晋级赛福州站比赛中获铜奖1项,学校排名25位;在2011年9月第36届ACM-ICPC国际大学生程序设计竞赛亚洲区预赛大连站比赛中获铜奖1项。3.2发展提高阶段以课程设计为抓手大二和大三学生已初步掌握程序设计基础,需要提高发展程序设计能力,突出软件工程角度的软件工程化开发能力的培养。软件团队合作开发训练采用企业通用的集成开发环境和软件版本控制工具进行软件开发训练。此阶段主要采取相关课程的课程设计和二年级小学期的集中课程设计等多种形式实现程序设计。例如在“数据库开发”课程中,采用案例教学,启发学生开展课程设计,通过剖析数据库开发案例,详细展开需求分析、模型设计、程序设计、程序测试以及系统等各个环节的实现方法,引导学生从单一程序设计到较为复杂的软件系统开发的过渡,培养学生软件工程素养和软件开发能力。3.3开发应用阶段以项目开发为抓手大三和大四学生已经掌握了软件开发的基础,但需要更多的实际项目开发实践,以便迅速提高软件开发能力。对此,我们采取课程教学中的模拟项目开发和实际软件项目开发相结合的激励机制。针对全体学生,在后续的医学信息学、信息系统设计等课程中开展模拟软件工程开发全过程的程序设计。例如在医学信息学课程教学中,把完成一个医院信息系统子模块设计开发作为贯穿于整个教学过程的任务,要求人人都参与项目开发,并且要用软件工程的方法来实现项目开发。以班级为单位,开发医院信息系统的一个子系统,模拟实际项目开发,分层管理,班级设立项目经理和技术总监,负责项目实施管理和技术管理,3至4人为一组,设立项目组长,负责项目模块的开发,要求每组完成需求、概要设计、详细设计和软件测试四个文档,并且结合医院信息系统参观调研,完善需求分析和设计。通过课程设计,尝试对软件设计全过程,特别是软件开发团队的合作,这对提高同学们软件设计能力有很大的帮助。同时,在课程设计成果考核评价中,我们让项目团队中每个人上台宣讲自己所做的工作、演示系统,学生代表评分与教师评分相结合。自2005年级至2008年级,共五届490名计算机专业的学生参加医学信息学课程设计,共完成22个门诊或住院子系统,100个子模块。同时,通过公开招募考试等形式,召集一些软件开发能力较强或学习能力较好的学生参加寒暑假教师的实际科研项目开发,并使之形成班级软件开发的骨干力量,进一步带动整个班级的软件开发氛围。

4结语

程序设计范文第9篇

关键词:C++程序设计教学方法教学改革

中图分类号:G64 文献标识码:A文章编号:1007-9416(2010)01-0000-00

1引言

在计算机课程中,“C++程序设计是计算机专业的一门必修基础课,该语言以其高效而又实用的特性:既可以进行过程化程序设计,又可进行面向对象的程序设计,因此逐步成为各高校程序设计课程中的主流。C++语言既是进行软件开发的直接工具,又是“数据结构”、“操作系统”、“编译原理”、“软件工程”以及其它相关课程的先修课程,因此,在整个教学体系中占据十分重要的地位。

中原工学院计算机科学与技术专业从2007版培养方案开始,将2006版培养方案中“高级语言程序设计C++”课程分解成“高级语言程序设计C++(上)”、“高级语言程序设计C++(下)”,两门课程,分别在大学一年级的第一、二学期开设,第一学期主要教授过程化程序设计,第二学期主要教授面向对象程序设计,以Visual C++6.0为实验教学平台。

笔者根据自身教学经验和讲授过程中出现的问题, 在此进行分析和探讨, 以期能进一步提高本课程的教学效果和教学质量。

2存在的主要问题

(1)程序设计类课程一般以程序设计语言自身的体系为教学路线,侧重于编程语言的基本概念、基本语句和语法的详细讲解,而没有把逻辑与实际编程解题思路作为教学的主线。 达不到培养学生分析问题和解决问题的实际能力的目的。学生面对的是一大堆语言符号,需要记忆的内容过多。在教学过程中学生们感觉学习相应的知识点(语法)并不困难,听老师讲解例题时也容易明白。但真正让学生去解决实际问题,有相当一部分学生感到无从下手,觉得问题太难。学生对于课本上的例子容易理解,但不会举一反三。

(2)实践性教学薄弱。只有在上机实践中学生才能真正学会如何编写程序和调试程序,才能更好地掌握程序设计的理论知识。可在C++语言实践教学中,由于课时有限、教学条件有限等没有把编程思路和程序调试放在首位,对学生分析问题和解决问题的能力训练不够;上机内容基本上都是立足于C++语言本身的一些语法规则,和实际开发应用脱节,无法激起学生的兴趣。

(3)学生学习差距较大

由于学生水平不一,并且部分学生学习自觉性较差,学生学习的效果相差十分明显,学生的编程能力逐渐下降,学生不原意写C++/MFC程序,而是写 C#/JSP等网站程序设计。如果开展有效的教学研究,使大多数学生都能学懂C++程序设计的基本概念、掌握常用的语法及算法、能用C++编写通用程序,是值得研究的问题。

3教学与实践改革的具体措施

3.1 以"深入浅出,边学边用"作为指导思想组织教学内容

对于枯燥的语言叙述,改用生动的比喻进行引导。比如,学生学习指针概念时,对"间接存取"难以理解,就借用比喻:将A 房间的钥匙放在B 房间里, 若要取A 房间里的物品, 就需要先打开B房间,取出A 钥匙,再打开A 房间,取出A 房间的物品,这就是"间接存取"。学生很快就能理解,也加深了指针的概念。再比如,将给数组分配存储单元比喻成住旅馆分配连续的房间, 学链表时比喻成分配不连续的房间,使学生由抽象变具体,达到深入浅出,容易接受的目的。变更教学形式,结合实际生活,组织教学内容以" 提出问题--分析解决问题的方法--归纳出概念或一般规律"为线索,侧重学以致用。每堂课都安排简单实用的程序学习并编制,让学生全部可以接受,每堂课都有一点成就感, 打消往届学生带给他们学习C++语言的畏难情绪。比如学生学习了输入输出函数的使用,就提出"简单的超市算账问题",仅仅使用顺序结构程序设计方法就能解决;将问题加深一点,购物达到一定的金额商品会打折,金额不同折扣率不同, 引入选择结构的程序设计方法, 利用类似的方法逐步深入,培养学生分析解决问题的方法,边学边用,展示C++语言的用武之地,激发学生学习的兴趣。

3.2 加强实践教学环节

C++语言课程是一门实践性很强的课程,一定要动手多写设计、编写程序才能有所进步。在实践教学中必须做到循序渐进,对所学的每一部分内容都应该要求学生完成一定数量的实验内容。每部分的上机习题必须精心挑选,既要有基本的、较简单的题目,又要有一些具有挑战性的新颖有趣的题目。学生自己编写的程序一定要到机器上去实现,通过调试程序来修订语法错误,排除逻辑错误,进而提高编程能力,通过做一定量的习题,可以积累一定的经验,同时对程序设计的精髓会有所领悟,从而重视上机实验。

强调学以致用,展示学生能够理解而且又容易提起兴趣的用C++语言设计的软件以及往届学生的设计成果,给学生布置了几个专题,比如:设计班级成绩管理系统、简易的图书管理系统、简易的通讯录管理系统、小游戏等让学生利用课余时间去思考、收集资料,以教师为主导,以任务为主线,以学生为主体,过一段时间在课堂上组织学生发言和讨论一次, 看看大家对这些问题的思考程度,提提建议,鼓励加引导,最后到完成。这种教学法不仅可以让学生获得许多课外知识,同时也促进教学内容的改革,而且也有利于充分挖掘学生的学习潜力。

通过一个阶段C++语言的学习, 选拔出一批优秀的同学,单独培养,结合所学专业, 加宽加快加深学习内容, 使他们尽早切人实际应用, 有条件的进入相关的开放实验室, 参与计算机应用的小课题研究或参与大学生创新设计大赛等,培养学生中的学术带头人[2]。以榜样的力量促进良好的学风建设, 形成良好的学习氛围, 促进整体的学习进步。在C 语言教学中,培养学生的自学能力尤为重要,如果学生的学习完全依赖教师才能掌握,而没有一定的自学能力,其所学的知识很快就会被淘汰。对于多数学生,则把精力放在最基本、最常用的内容上,让他们学好基本功,掌握程序设计的方法,为后续课程的学习打下基础。

3.3开展4年不间断的C++编程训练

仅靠一个学期的c++语言的学习是远远不够得,需要在后续课程中进行巩固提高。C++兼容C语言,C语言是C++的子集,我们把C语言和C++融合为一门课程,第一学期授课以C语言为主,第二学期讲授以C++为主,所有程序都以VC++为调式环境。经过这样的整合,知识内容显得很连贯,一气呵成,为第三学期的Windows程序设计课程奠定了基础。该课程利用MFC类库进行Windows应用程序开发。后继的数据结构、算法分析与设计、计算机网络原理、操作系统、编译原理等课程实践环节都利用C++语言进行开发,开展4年不间断的C++编程训练。

3.4 改革课程的考核方法

对学生学习情况的考核不应以停留“期末试卷”为中心的传统考试观念,应该进行改进,以此提高学生对知识的运用能力、自学能力、分析和解决问题的能力。

(1)加大平时成绩的考核。平时考核的方法有:课堂提问、作业与练习、阶段性测试、包括学生提出有价值的问题都给予记分。平时考核成绩占总成绩的比例为20%。加大平时成绩的考核,有利于全面测评学生能力。这样可以激励学生学习的积极性和主动性,并将这种积极与主动精神贯穿于课程学习的始终。

(2)加大上机考核。对C 语言的掌握情况主要看上机的调试,要对上机过程和结果给学生进行考核,既要看结果,也要看过程。应鼓励学生在程序的设计上精简优化。上机考核成绩占总成绩的比例为20%。

3.5 应用现代化教学手段提高教学效率和效果

形式多样的教学手段课堂教学要应用现代化教育技术, 使用多媒体进行课堂教学, 给学生营造一个良好的程序设计环境。与传统教学方式相比, 多媒体教学具有形象生动、图文并茂、交互性好、信息量大、减少文字书写等显著特点, 对课程中难以理解的抽象内容, 可以给予直观展示和动态模拟, 达到既能辅助教师形象地讲授课程中的难点和重点的目的, 又能激发学生学习的兴趣, 从而提高教学效率和教学效果。并且, 把讲授法、练习法、实验法、演示法和网络技术结合起来, 将课程中抽象的、难以理解的教学内容, 进行形象化, 这样就更利于学生理解与记忆。

4 结语

本文针对笔者在连续几年“高级语言程序设计C++”教学过程中出现的问题, 进行了思考和探索, 并将所提出的方案在教学活动中实施, 较好地激发了学生的兴趣, 调动了学生的学习积极性, 培养学生的自学能力, 提高学生的编程思想和解决实际问题的能力,取得了很好的教学效果。

参考文献

[1] 张庆岚.提高《C 程序设计》课程教学质量的探讨[J].福建电脑,2009年第1期.

[2] 施敏华,等.计算机专业实验教学体系探索[J].计算机教育, 2007(10).

程序设计范文第10篇

【关键词】界面设计 代码设计 算法

1 引言

程序设计不仅是一门科学而且是一门艺术,它有较强的创造性和灵活性,也是学生较难掌握的技能。一方面程序设计本身枯燥、严谨,难以理解,另一方面更主要的是教师在组织程序设计教学中缺乏针对性,没充分考虑学生的知识水平、认知规律、学习特点和接受能力。

Visual Basic,是一种面向对象的程序设计语言,编写应用程序快捷高效,是职中计算机专业的必修科目。在这门课的教学实践中,我紧紧抓住界面设计和程序代码设计两大环节,打破教材原有以知识的逻辑结构体系为顺序组织课堂教学的方式,以教授程序设计的基本方法为主线,从具体问题入手,由浅入深,由简及繁,循序渐进,介绍解决问题的方法,最后引出概念和结论,取得良好教学效果。

2 界面设计

在面向对象程序设计语言教学中,界面设计是一项很重要的工作,程序是否简便易用,与界面的质量有很大关系,而界面中的对象属性会影响对象的外观及功能,因此,对象的属性设置在界面设计教学中要重点加以训练。我设计了如下的界面,让学生和我一起完成。

题目要求任意输入两数,求这两数的和(或差、或积、或商),实际是完成一个简单的计算器。

2.1 建立应用程序界面

(1)启动 VB。

(2)加入两个文本框。

(3)加入四个运算按钮。

(4)加入两个标签框。

在界面设计教学中,学生通过自己的实际操作,很容易就掌握了如何在界面内添加对象,如何改变对象位置,以及如何设置对象的属性。通过几次针对性的练习,学生对属性的设置不会有太大问题。

2.2 设置各控件的属性

如表1。

2.3 编写代码

当程序运行后整个系统处于相对“静止”,等待输入,当输入数据后,单击四个按钮中的任一个时,则引发Label2的Caption属性变化,由原来的内容改为两文本框中内容的和(或差、或积、或商),因此,必须在四个按钮中的Click(单击)事件中加入适当的代码,使Label2的Caption发生变化。

编写“+”代码的操作方法:

(1)双击“+”按钮。

(2)在Command1_Click()过程中加入以下一行代码。

Private Sub Command1_Click()

Label2.Caption = Val(Text1.Text) + Val(Text2.Text)

End Sub

通过此例,很容易便可掌握属性值在代码中的设置。其它按钮控件仿照以上方法,让学生自行完成。

3 程序代码设计

程序设计主要学习的是编程本身的思想,学习的效果不能马上看到,但是可以学到扎实的基本功,如强化逻辑分析和建立数学模型的能力;数据结构和算法知识;丰富的实践经验。针对客观实际,我在VB教学中采取了以下几个措施。

3.1 密切联系实际,激发学生学习兴趣

职中学生相当一部分文化基础差,对概念理解力差,发现问题与解决问题的能力较低,对学习兴趣不高,课堂注意力容易分散,知识掌握不牢固。因此在程序设计教学中我放低教学起点,降低教学难度,培养他们的学习兴趣,让他们学得轻松,学有所获,感受成功。

3.2 编程教学中淡化语句教学,注重算法教学,贯彻结构化程序设计思想

程序的长短、变量的多少不是判断一个程序好环的标准,算法的清晰易懂才是最主要的。同时要强调VB面向对象的结构化程序设计思想,如下例,“给100个整数,打印输出其中的素数”结合算法将一个大任务分解成若干“功能模块”。

3.3 从不同角度看同一问题,把握问题实质

程序设计可以通过不同的算法、语句设计出不同的程序而解决同一个问题。一个程序的好坏关键在于这个程序是否简洁明确、结构清晰和高效率。可把解决同一问题的A程序、B程序或C程序的不同地方加以分析和归类,向学生展示讲解,从而加深学生印象。如在讲授循环结构时,同一例题就可用DO、While…Wend、Do…While、Do…Until、For…Next五种语句来实现。可以适当的加以提示,鼓励学生用不同的语句来设计程序解决问题。最后给予总结和提炼,明确哪种方法简洁、易读,哪种方法运行速度快,哪种方法灵活。

总之,教学有法,教无定法,只要教学得法。如何培养学生学习兴趣,改进教学方法,使学生得到发展是我们长期而艰巨的任务,围绕着这个任务,在保护学生学习积极性的前提下,按照学生的认知规律组织教学,一切可行的教学方法都可在我们的教学过程中加以运用。

参考文献

[1]朱海红.程序设计的教学要讲究方法[J].新课程导学,2011.

[2]申然.我在进行VB程序设计教学过程中的几点尝试[J].文教资料,2006.

作者简介

谢翠芬(1976-),女,广东省佛山市人。现为佛山市华材职业技术学校计算机中学一级教师,主要从事计算机科学教育改革研究。

作者单位

上一篇:广告设计与制作范文 下一篇:产品创新设计范文