前言:一篇好文章的诞生,需要你不断地搜集资料、整理思路,本站小编为你收集了丰富的程序设计主题范文,仅供参考,欢迎阅读并收藏。
(电子科技大学 计算机科学与工程学院,四川 成都 611731)
摘要:针对程序设计课程存在的理论与编程实践学时安排矛盾以及实验教学中师生配比不够、实验辅导不足等问题,提出加强预习干预引导、实战演练、课堂教师辅导和实验指导以及增加学生分组互助学习、学生讨论、成果演示等手段,结合目前国内外取得良好教学效果的翻转课堂教学法、微课视频资源实现翻转教学,并拟在小班试点改进后推广。
关键词 :程序设计课程;翻转课堂;微课视频;小班教学
第一作者简介:戴波,女,讲师,研究方向为并行算法与图像处理,daibo@uestc.edu.cn。
0 引言
为了全面贯彻落实 《教育部关于全面提高高等教育质量的若干意见》 (教高[2012]4 号)精神,不断深化本科人才培养模式改革,构建研究型大学本科人才培养新体系,培养高素质拔尖创新人才,《电子科技大学本科人才培养方案修订指导意见》以通识课程、学科基础课程、学科拓展课程、专业核心课程、实践类核心课程、个性化课程6个课程模块的构建为核心,推动课程的整合和优化,搭建个性化、多元化的人才培养平台,促进学生全面、个性发展,其理工类课程模块与学时要求如图1所示。
基于学校的培养理念,计算机科学与工程学院将培养目标定位在培养掌握计算机基本理论和基本知识,接受从事研究与应用计算机的基本训练,具有研究和开发计算机软、硬件基本能力的高级人才。程序设计课程是计算机专业的核心基础,涉及程序设计语言(C语言)、数据结构、算法设计与分析、面向对象语言(C++/C#/Java)、设计模式和软件工程等多门课程。我们分析当前教学中存在的如课程分割零碎、课程之间连贯性差、不同课程内容重复较多、对后续课程支撑力度不大、教学手段落后与师资队伍建设不足等问题,在课程、实验和团队建设等方面做了一系列研究探索,如采用递增式的项目驱动教学分级培训学生程序设计技能,组建程序设计基础团队,重新设计与整合关联课程,采用自动化批改程序软件,建立题库与项目库等方案,并在小班连续2年进行试点,取得良好效果,2014年开始在全年级推广[1]。
1 推广后的程序设计课程现状与调查分析
1.1 推广后的程序设计课程现状
小班试点在旧有培养方案的基础上进行,C语言和C++课程内容有整合,但仍然与其他班级一样分开教学和参加统一的期末考试,便于与其他班级对比教学效果。2014年,我们基于新的培养方案在全年级进行合并后的程序设计语言教学,同时面临如下现状。
(1)内容多,时间紧,以前的两门课程合并成为一门课程之后,课时数量是以前一门课程的课时数量,而不是两门课程课时数量的总和。
(2)导论课没有打下基础,如对于计算机硬件及工作流程的初步认识、内存管理方式的理解、鼠标键盘的熟悉、操作系统和办公软件的熟悉与使用等。
(3)课程合并后,两门课程的教师总数增加,班级人数由120人以上/班减少为70人/班,达不到学校120人/班配置助教的条件,没有助教,作业批改量大,上机辅导忙不过来,上机考试监考教师人数不够。实践证明,每次实验课教师能够辅导到的学生人数不超过10人。
1.2 推广后的程序设计课程调查
课程结束后,7个班的7名教师和480名学生分别发放调查问卷,其中回收的有效反馈调查表为教师7份,学生186份。
1) 教师调查反馈。
(1)合并后教学时间紧,学生掌握所有内容有难度,存在部分学生学习积极性不高,如上课玩手机和到课率不高等情况。
(2)每班上机相关练习题、实验、综合实验均超过20题,有的班级达到50道题以上。上机题目兼具应用性和趣味性。
(3)导师辅导的上机训练题量大。
(4)基础类型的实验和练习题完成情况良好,综合性的实验和练习题只有部分学生能够完成。
2)学生调查反馈。
(1)有编程基础的学生在高中阶段学习过的编程语言种类有8种,66%的学生学习过C/C++,普遍表现出对目前教学状况非常满意,在教师指导下比高中学习得更深入,能够学习到很多原理性的东西;同时也表示希望能够给予更多的课后学习指导,提供工程训练机会。有编程基础的部分学生仍然感觉上课速度快。
(2)没有编程基础的学生认为目前教学难度合适的达73%, 较难/难的达22%,简单的达5%;普遍希望教师讲解得更细致,课堂上能够演示编程过程,再多增加上机辅导、上机作业和练习题,能够有项目实践机会。
1.3 推广后的期末考试情况与教师试卷分析总结
推广后的期末考试分数对比见表1。
表1的平均比例表明不及格率占比最高,接近1/3,90分以上占比最低,不到10%;同时表明不同班级差别比较大,教师的教学经验对于学习效果很重要,如教师1有多年C语言和C++语言教学经验,其余的教师只从事C语言或者C++语言教学,因此虽然使用同样的教材,但是由于教学经验、教学手段、学生不同,使得学生掌握情况不同。教师6强调大学阶段的学习自觉性,对学生管束比较少,教学方式比较灵活,最终考试效果最差,不及格率达到44.8%,说明学生学习自觉性差,教师的恰当约束对于当前环境下的学生学习非常有必要。
7位教师总结学生的失分点基本一致,主要集中在填空题的细节问题、读程序、写程序和判断题,恰好是编程训练没有过关的体现,这也和各位教师根据考试情况的反思总结一致。教师都反映需要加强编程练习、上机辅导、课上程序演示、程序设计思维训练,但又都觉得编程练习已经很多,上机量也很大,但训练效果却不明显。以冒泡排序为例,教师上课讲,中期考核,期末复习,但是该内容在期末考试中仍然是大的失分点且全年级都呈现这样的现象,这说明在学习过程中有的学生不认真做,有的学生做了但没有真正理解和掌握算法原理、编程基础、调试技术。
教师反思其中一个大的矛盾是理论教学与实践教学的学时需求矛盾:①不讲或者简单讲解基础理论及细节,学生只能依葫芦画瓢而无法举一反三,理论基础不稳固则技术不深入,有程序设计基础的学生则不能进行深入学习;②详细深入讲解需要花费大量时间;③无编程基础的学生对理论学习普遍不感兴趣且由于缺乏经验,对教师讲解的理论理解不够深入,教师在课堂上没有时间进行反复讲解,而学生不得不在应用过程中根据需要反复学习这些基础知识。
为解决这些矛盾,各个教师根据教学经验各有取舍,其中教师5与教师7是以实践为主与理论讲授为主比较突出的2个代表。教师5采用以上机实验为主、理论教授为辅的教学方式,设计上机相关题目超过50题且上机演示编程过程,编程辅导时间多,同时另外找了优秀学生一起对学生进行上机辅导,但期末笔试90分以上的占比9.2%,不及格率为27.7%。教师7以理论讲授为主,对于上机实验辅导严格按照培养方案的16学时,期末笔试考试成绩表明学生上机实验过少,理论掌握并不扎实,90分以上的占比为0.00%,不及格率仍然达到23.1%。以上情况说明“单脚大跨步”的教学方式效果欠佳,但两者结合教学又存在学时数不够的现实问题,此外还存在如下问题:学生认为最难的不是理论学习,而是将理论应用于实际;不少学生需要督促,自觉性差,而教师只有一人,怎么办?
2 改进措施
针对程序设计课程在全年级推广后出现的问题,程序设计教学团队教师积极思考、讨论并试图寻找能够解决现存问题的教学方法。戴尔的经验之塔[2]说明单纯的课堂教学平均只能够达到20%的效果,而具有主动学习的参与、讨论、演讲等教学方法可以达到50%~90%的教学效果。既要在有限的时间内传授基础理论,深入讲解原理和运行机制且可以在实践过程中能够随时查阅学习基础理论,又要在教师人数有限的条件下给予足够的上机实验演示和辅导,教师就需要将一些以记忆和理解为主的知识点放到课前让学生预习,课堂上以项目驱动的方式引导学生加强编程练习并给予辅导。此外,对于一些需要深入分析的问题则可在学生预习的情况下,在课堂上以分组或者集体讨论的方式解决,但存在部分学生不预习而等待教师上课讲解或者学生预习目的性不强、自学能力不够等问题。教学团队教师经过调研发现,最近几年在国内外逐步发展的翻转课堂教学[3]恰好满足有教学理论研究支撑和国内外优秀教学经验借鉴等条件,具体方案如下。
(1)将理论知识的讲解以微课的形式录制成视频,达到学生在教师引导条件下自学的效果,同时在学生完成预习作业后,检验其学习效果以便于学生根据自身情况决定是否还需要反复看视频巩固学习;教师也可以通过学生完成预习作业的情况制订课堂活动安排,协助学生更好地掌握知识。
(2)教师将分析问题、设计思路、流程图绘制、编程、编译链接、调试等演示案例的完整过程录制成视频,让学生可以反复观看临摹,解决初期没有教师在身边编程入门难的问题,达到课堂演示编程的效果,避免课堂上编程占用时间过多、编程代码文字过小后排学生看不清楚等问题。
(3)在课堂上指导学生进行编程练习,解决学生视频学习过程中的疑问、讨论解决实际项目问题的方法及方案的选择。
(4)鼓励优秀学生帮助其他同学,对于帮助其他同学的学生给予平时成绩加分,解决缺乏编程辅导的问题。
(5)在现有培养方案条件下拟用部分班级试点进行翻转教学,部分班级不采用,然后进行效果对比和进一步分析与改进,使其更适合当前的本科教学。
3 结语
基于“全面发展的创新教育”人才培养理念培养高素质拔尖创新人才,除了构建合理的人才培养体系外,还需改进对学生培养更直观有效的课程教学。翻转课堂教学以实践理论“戴尔的经验之塔”和布鲁姆认知教育目标分类模型理论[4]为基础,强调学生在教师的指导下学习,学生是教育的主体,教师的教是为了不教,自主学习具有无可替代的价值[5]。翻转课堂教学法以学生为主体进行研究,能够在有限的教学时间内达到传授知识、教授技能、培养自学能力的目的,可操作性强,是解决现有程序设计课程改革问题的有效方法,但效果和存在的问题还有待多次试点改进及全面推广后具体分析及解决。
参考文献:
[1] 戴波, 周世杰, 曹晟, 等.“程序设计”课程教学模式的探索[J]. 实验科学与技术, 2012(6): 309-311.
[2] 焦丽珍. 神奇的“经验之塔”:“视听教学法之理论”[J]. 现代教育技术, 2012, 22(6): 126.
[3] 爱课程网. 翻转课堂教学法[EB/OL]. [2014-10-16]. http://icourse163.org/course/pku-21016#/info.
[4] Anderson L W, Kmthwohl D R. A Taxonomy for learning, teaching, and assessing: a revision of bloom’s taxonomy of educational objectives[M]. Complete Ed. London:Pearson, 2000: 38-62.
前几年,OpenGL虽然是开放式的标准,但是只能在具有UNIX操作系统的各种昂贵的工作站之间通用;尽管工作站上的OpenGL性能优越、编程方便、生成图形精真,但是只有少数人能体会其中乐趣,而令大多数PC机用户望尘莫及。随着计算机技术的发展,工作站与PC机的性能日趋接近。Microsoft公司首先将OpenGL图形库链接到Windows NT中,目前又将OpenGL动态库挂到最新Windows 95上,这样,广大PC机用户就可充分享受OpenGL的乐趣了。更令人高兴的是,目前国内外出现了专门对OpenGL进行硬件加速的三维图形加速卡。这样,普通用户只
要拥有一台Pentium 90以上、16MB RAM、520MB以上硬盘容量的PC机以及一台43cm以上的大屏幕监视器和一块OpenGL三维图形加速卡组成的系统,就能与图形工作站相媲美,但价格却便宜数十倍。
本文作者一直从事计算机图形应用开发工作。原来是在SGI工作站上利用OpenGL开发图形程序,后来又首先在国内第一块三维图形加速卡AGC-3D上基于Windows NT的Visual C++2.0环境下继续进行开发。在开发过程中,同一OpenGL程序几乎不用修改就能在两个平台间来回移植,效果甚好。
一、OpenGL特点及功能
OpenGL是一个开放的三维图形软件包,它独立于窗口系统和操作系统,能十分方便地在各平台间移植。
OpenGL具有七大功能。
(1)建模 OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体(如球、锥、多面体、茶壶等)以及复杂曲线和曲面(如Bezier、Nurbs等曲线或曲面)绘制函数。
(2)变换 OpenGL图形库的变换包括基本变换和投影变换。基本变换有平移、旋转、变比和镜像四种变换,投影变换有平行投影(又称正射投影)和透视投影两种变换。
(3)颜色模式设置 OpenGL颜色模式有两种,即RGBA模式和颜色索引(Color Index)。
(4)光照和材质设置 OpenGL光有辐射光(Emitted Light)、环境光(AmbientLight)、漫反射光(Diffuse Light)和镜面光(Specular Light)。材质是用光反射率来表示。场景(Scene)中物体最终反映到人眼的颜色是光的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜色。
(5)纹理映射(Texure Mapping) 利用OpenGL纹理映射功能可以十分逼真地表达物体表面细节。
(6)位图显示和图像增强 图像功能除了基本的拷贝和像素读写外,还提供了融合(Blending)、反走样(Antialiasing)和雾(fog)的特殊图像效果处理。
(7)双缓存(Double Buffering)动画 双缓存即前台缓存和后台缓存,简而言之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。
此外,利用OpenGL还能实现深度暗示(Depth Cue)、运动模糊(Motion Blur)等特殊效果。
二、OpenGL for Windows NT图形库
OpenGL图形库一共有100多个函数。其中核心函数有115个,它们是最基本的函数,其前缀是gl;OpenGL实用库(OpenGL utility library,GLU)的函数功能更高一些,如绘制复杂的曲线曲面、高级坐标变换、多边形分割等,共有43个,前缀为glu; OpenGL辅助库(OpenGL auxiliary library,GLAUX)的函数是一些特殊的函数,包括简单的窗口管理、输入事件处理、某些复杂三维物体绘制等函数,共有31个,前缀为aux。
此外,还有六个WGL函数非常重要,专用于OpenGL和Windows NT窗口系统的连接,其前缀为wgl,主要用于创建和选择图形操作描述表(rendering contexts)以及在窗口内任一位置显示字符位图。这些功能是Windows NT对OpenGL的唯一补充,见表1所示。
表1 管理图形操作描述表的WGL函数
另外,还有五个Win32函数用来处理像素格式(pixel formats)和双缓存。由于它们是对Win32系统的扩展,因此不能应用在其他OpenGL平台上,见表2所示。
表2 管理像素格式Win32函数
三、OpenGL for Windows NT程序设计
OpenGL for Windows NT的程序设计与OpenGL for UNIX的程序设计有一点小区别,关键就在于如何将OpenGL与不同操作系统下的窗口系统连接起来。如果调用OpenGL辅助库窗口管理函数,则不用考虑这些问题。下面将主要介绍在Windows NT下OpenGL的程序设计关键。
1.图形操作描述表
在Windows NT下窗口程序必须首先处理设备描述表(Device Contexts,DC),DC包含许多如何在窗口上显示图形的信息,即指定画笔和刷子的颜色,设置绘图模式、调色板、映射模式以及其他图形属性。同样,OpenGL for Windows NT的程序也必须使用DC,这与其他Windows程序类似。但是,OpenGL for Windows NT必须处理特殊的DC图形操作描述表,这是DC中专为OpenGL使用的一种。一个OpenGL应用图形操作描述表内有OpenGL与Windows NT窗口系统相关的各种信息。一个OpenGL应用首先必须创建一个图形操作描述表,然后再启动它,最后在所定义的窗口内按常规方式调用OpenGL函数绘制图形。
一个图形操作描述表不同于其他DC,它们调用每个GDI函数都需要一个句柄,而图形操作描述表方式下只需一个句柄就可任意调用OpenGL函数。也就是说,只要当前启用了某个图形操作描述表,那么在未删除图形操作描述表之前可以调用任何OpenGL函数,进行各种操作。
2.像素格式
在创建一个图形操作描述表之前,首先必须设置像素格式。像素格式含有设备绘图界面的属性,这些属性包括绘图界面是用RGBA模式还是颜色表模式,像系缓存是用单缓存还是双缓存,以及颜色位数、深度缓存和模板缓存所用的位数,还有其他一些属性信息。
(1)像素格式结构
每个OpenGL显示设备都支持一种指定的像素格式号。一般用一个名为PIXELFORMATDESCRIPTOR的结构来表示某个特殊的像素格式,这个结构包含26个属性信息。Win32定义的PIXELFORMATDESCRIPTOR如下所示:
typedef struct tagPIXELFORMATDESCRIPTOR
{
WORD nSize;
WORD nVersion;
DWORD dwFlags;
BYTE iPixelType;
BYTE cColorBits;
BYTE cRedBits;
BYTE cRedShift;
BYTE cGreenBits;
BYTE cGreenShift;
BYTE cBlueBits;
BYTE cBlueShift;
BYTE cAlphaBits;
BYTE cAlphaShift;
BYTE cAccumBits;
BYTE cAccumRedBits;
BYTE cAccumGreenBits;
BYTE cAccumBlueBits;
BYTE cAccumAlphaBits;
BYTE cDepthBits;
BYTE cStencilBits;
BYTE cAuxBuffers;
BYTE ilayerType;
BYTE bReserved;
DWORD dwLayerMask;
DWORD dwVisibleMask;
DWORD dwDamageMask;
}
PIXELFORMATDESCRIPTOR,
*PPIXELFORMATDESCRIPTOR,
FAR *LPPIXELFORMATDESCRIPTOR;
(2)初始化PIXELFORMATDESCRIPTOR结构
PIXELFORMATDESCRIPTOR中每个变量值的具体含义和设置可以参
考有关资料,下面举出一个PIXELFORMATDESCRIPTOR初始化例子来简要
说明相关变量的意义。定义PIXELFORMATDESCRIPTOR结构的pfd如下:
PIXELFORMATDESCRIPTOR pfd=
{
sizeof(PIXELFORMATDESCRIPTOR),//结构尺寸
l, //结构版本
PFD-DRAW-TO-WINDOWS|PFD-SUPPORT-OPENGL,//特性标志
PFD-TYPE-RGBA,//RGBA模式
24,//24位颜色
0,0,0,0,0,0,//不涉及这些属性
0,0,0,0,0,0,0,//没有alpha缓存和累积缓存
32,//32位深度缓存
0,0,//没有模板缓存和辅助缓存
PFD-MAIN-PLANE,//主层类型
0,//保留结构数
0,0,0,//不支持结构数
};
在这个结构里,前两个变量的含义十分明显。第三个变量dwFlags的值是PFD-DRAW-TO-WINDOWS|PFD-SUPPORT-OPENGL,表明应用程序使用OpenGL函数来绘制窗口,第四个表明当前采用RGBA颜色模式,第五个采用24位真彩色,即1.67千万种颜色,如果是256色系统则自动实现颜色抖动;因为没有使用alpha缓存和累积缓存,所以从变量cAlphaBits到cAccumAlphaBits都设置为0;深度缓存设置为32位,这个缓存能解决三维场景的消隐问题;变量cAuxBuffers设置为0,在Windows NT下不支持辅助缓存;Windows NT下针对OpenGL变量ilayerType只能设置为PFD-MAIN-PLANE,但其他平台也许支持PFD-OVERLAY-PLANE或PFD-UNDERLA
Y-PLANE;接下来bReserved变量只能设为0,而最后三个变量Windows NT都不支持,故全设置成0。
(3)设置像素格式
当初始化PIXELFORMATDESCRIPTOR结构后,就要设置像素格式。下面几段从VC++ 2.0的MFC程序中摘出的代码就是设置像素格式的方式。代码如下:
CClientDC clientDC(this);
int pixelFormat=ChoosePixelFormat(clientDC.m-hDC,&pfd);
BOOL result=SetPixelFormat(clientDC.m-hDC,pixelFormat,&p
fd);
第一行语句说明得到一个应用窗口客户区的设置描述表。
第二行调用ChoosePixelFormat()选择一个像素格式,并将像素格式索引号返回给pixelFormat变量;函数中第一个参数是选择像素格式的设置描述表的句柄,第二个参数是PIXELFORMATDESCRIPTOR结构的地址。如果调用失败则返回0;否则返回像素格式索引号。
第三行调用SetPixelFormat()设置像素格式,三个参数分别是设备描述表的句柄、像素格式索引号和PIXELFORMATDESCRIPTOR结构的地址。如果调用成功则返回TURE;否则返回FALSE。
3.创建图形操作描述表
正如前所述,必须创建图形操作描述表并启用它后,才能调用OpenGL函数在窗口内进行各种图形操作。一般说来,利用MFC中增补的管理图形操作描述表方法来编程比较方便。下面举一例:
int CopenglView:: OnCreate(LPCREATESTRUCT lpCreateStruct
)
{
if(CView::OnCreate(lpCreateStruct)==-1)return -1;
// TODO: Add your specialized creation code here
PIXELFORMATDESCRIPTOR pfd=
{
sizeof(PIXELFORMATDESCRIPTIOR),
//structure sizel,
//structure version number
PFD-DRAW-TO-WINDOWS|PFD-SUPPORT-OPENGL,//property flags
PFD-TYPE-RGBA, //RGBA mode
24, //24bit color
0,0,0,0,0,0, //not concerned with these
0,0,0,0,0,0,0, //no alpha or accum buffer
32, // 32bit depth buffer
0,0, //no stencil or aux buffer
PFD-MAIN-PLANE, //main layer type
0, //reserved
0,0,0 //unsupported
};
CClientDC clientDC(this);
int pixelFormat=ChoosePixelFormat(clientDC.m-hDC,&pfd);
BOOL result=SetPixelFormat(clientDC.m-hDC,pixelFormat,&p
fd);
m-hRC=wglCreateContext(clientDC.m-hRC);
return 0;
}
void COpenglView::onDraw(CDC *pDC)
{
COpenglDoc* pDoc=GetDocument();
ASSERT-VAILD(pDoc);
//TODO: add draw code for native data here
wglMakeCurrent(pDC->m-hDC,m-hDC);
DrawMyOpenGL();
wglMakeCurrent(pDC->m-hDC,NULL);
}
void COpenglView::OnDestroy()
{
CView::OnDestroy();
// TODO: Add your message handler code here
wglDeleteContext(m-hRC);
}
在程序中,响应WM-CREATE消息的函数OnCreate()仅仅只创建一个临时的DC,当函数返回时,它自动删除。因此,在这里不可能启用图形操作描述表。当应用程序的窗口内容得到更新后,MFC就调用OnDraw()函数,在此启用图形操作描述表wglMakeCurrent()有效。然后,再调用自己用OpenGL写的绘图函数DrawMyOpenGL(),则程序就可进行任意的OpenGL图形操作了。当绘图结束后,再调用一次wglMakeCurrent(),但第二个参数设为NULL,意思是启用图形操作描述表无效,关闭图形操作描述表。最后,当应用程序结束时,MFC就调用OnDestroy()函数来响应
关键词:循环程序;循环控制;流程图;算法;程序语句;VF QBASIC
中图分类号:TP311文献标识码:A文章编号:1009-3044(2010)08-1906-02
On Recycling Program Design
LIU Li-ming
(Zunyi City, Guizhou Province Vocational High Schools, Zunyi 563000, China)
Abstract: Loop structure is a structured program design, one of the basic structure of the three. but it's also the basis for program design. However, for the beginners, Loop structure is difficult to master, for it's different from the daily habit of thinking of the human mind. In this paper, VF, and QBASIC program design cycle described examples of the cycle of programming languages have in common. Therefore, in the course of study must first correctly understand the language loop statement, and then to prepare specific algorithm, find out the loop control the conditions under which to draw flowcharts, programming statement, on the machine to debug.
Key words: circulation procedures; loop control; flow algorithm; algorithm; program statements; VF QBASIC
顺序、分支、循环是结构化程序设计的三种基本结构,所以在高级语言程序设计课程中,掌握这三种结构是学好程序设计的基础。而循环结构是这三者中最复杂的一种结构,几乎所有的程序都离不开循环结构,但是对于那些没有经验的初学者来说,难度却不小。特别是遇到更加复杂的多重循环程序,以及分支程序嵌套在一起就更加难以理解。因此这也是计算机等级考试高级语言程序设计的一大难点。
1 循环程序的基本原理
程序是能够完成一定任务的命令的有序集合。存放程序的文件称为程序文件。例如:我们要让计算机屏幕显示一句话:“I like computer!”。以QBASIC高级语言为例,编写相应的程序语句如下:
PRINT “I like computer!”
然后执行它,就能得到相应的屏幕显示。然而在现实生活中往往会遇到一些按规律重复执行的问题,例如:要在计算机屏幕上显示100行:“I like computer!”,采用循环结构设计将使程序简练,减少程序的行数,从而节省运行时占用的内存,因此引入并运用了循环程序设计。通过相应的循环程序设计语句让PRINT “I like computer!”循环执行100次就行了,编写程序语句如下:
10 FOR I=1 TO 100 SETP 1
20 PRINT “I like computer!”
30 NEXT I
程序中采用了循环语句格式:FOR= TO STEP
NEXT
功能:这个语句指定循环变量取一系列数值,并且对循环变量的每一个值把循环体执行一次。初值表达式、终值表达式和步长值表达式都是算术表达式。步长值可以是正数(叫做递增循环),也可以是负数(叫做递减循环)。
结合图1分析,该循环程序的控制过程是这样的,令I的取值范围为1到100,先将变量I赋值为1(即I=1),I的值属于1到100的取值范围(即满足循环条件),执行PRINT “I like computer!”一次;然后I的值按步长数1依次递增,从而反复执行PRINT “I like computer!”语句100次。
从分析不难发现循环程序执行的核心问题就是判断循环条件,即根据对循环条件的判断来确定是否进入循环体以及执行循环体语句的次数。各种高级语言程序设计的基本原理都相同,即当所给定的循环条件为真时,就反复执行其循环体(命令组);当条件为假时,则终止其循环体,而去执行其后继命令。
2 如何学习循环程序设计
2.1 循环程序语句
各种高级语言都有相应的类似的循环程序语句。例如前面介绍的QBASIC中的:
FOR= TO STEP
NEXT
等循环语句。
又如VF中的:
DO WHILE
[命令组]
ENDDO
等循环语句,初学者在学习时首先要搞清楚这些循环语句的含义、特点和用法。例如VF中与DO WHILE循环语句配对的是ENDDO;与FOR循环语句配对的是ENDFOR。不能混淆使用,也不能将忘记书写。
一般每种语言都有多种循环语句,要对它们进行比较。在一些具体运用中采用恰当的循环语句可能会使循环程序更加简洁明了。
2.2 流程图
学习循环程序设计首先要学会看流程图(亦称程序框图)。就是用一些简单的图形符号和文字说明,直观地描述程序的处理步骤。程序流程图不仅有助于程序设计,而且也为阅读、分析程序带来方便。
2.3 算法
在具体的循环程序设计中遇到的问题往往比较复杂,因此在设计前应该认真分析,要设定哪些变量,写出哪些计算公式,拟出解决问题的思路。
例:假定要求从键盘上依次输入三个数,求这三个数之和。
编写算法:第一步:存和的内存变量S清0。第二步:反复执行下列操作3次,输入一个数并存入X,计算S=S+X。第三步:输出S。第四步:结束。
2.4 编写语句
学习编写循环程序之前应该多阅读一些相关的典型的程序语句,从易到难循序渐进。编写语句时应该充分的结合流程图来展开,要根据拟定的算法来设计循环条件。
3 循环程序的应用
以VF程序设计为例,假定要求从键盘输入一个邮政编码,在“考生档案”库文件中查找。一个也查不到,则显示“无此邮政编码”。否则,每查到一个,就显示该考生的姓名与工作单位。直到全部查完为止。
过程分析:① 键盘输入待查邮编并存入内存变量YZBM;② 打开库文件查询邮编;③ 用EOF()函数进行循环控制,即通过查找后是否到达文件尾作为条件来进行循环控制;④ 如EOF()为真则退出循环,并显示“无此邮编”;⑤ 如EOF()假则循环显示该考生的姓名、工作单位,然后继续查找直到EOF()为真时停止查找并显示“查找完毕”。
程序流程图如图2所示,其循环结构由三部分组成。① 设置初值。包括循环操作中的初值和控制循环的初值两部分,通过查找邮政编码获得EOF()函数的值是控制循环用的初值。② 循环的实际操作。这部分是循环中要反复执行的操作,同是包括控制循环条件的修改,又叫“循环体”,输出姓名和工作单位是循环操作,继续查找既是循环操作的一部分,又是修改控制循环条件。③ 循环控制部分的核心是一个条件判断,即EOF()函数的值是 “假”开始循环,值为“真”退出循环。
程序设计如下:
ACCEPT "请输入待查的邮政编码(5位整数):"TO YZBM
USE 考生档案
LOCATE ALL FOR 邮政编码=YZBM
IF EOF()
?"经查找,所有考生中无此邮政编码!"
ELSE
DO WHILE .NOT. EOF()
?"姓名:"+姓名+SPACE(4)+"通讯地址:"+通讯地址
CONTINUE
ENDDO
?"已经查完了!"
ENDIF
USE
在循环程序设计中一定要注意控制循环次数的控制,否则循环程序将无法结束,即陷入“死循环”。通常的办法有“计数控制”,“条件控制”。在本例中就采用了“条件控制”。
4 多重循环
一个循环语句中可以包含另一个循环语句,这种结构叫做循环语句“嵌套”,在外层的叫外循环,在内层的叫内循环。多重循环结构的特点是:外层变一次,内层变一遍。
比较典型的运用例子就是设计打印乘法九九表的程序,即1*1=1,1*2=2,……,9*9=81。首先考虑如何打印1*1=1,1*2=2……,1*9=9,这用单循环很容易就能实现。但是对于整个程序的设计就要使用多重循环了。被乘数和乘数分别用A和B表示,A的值从1增加到9,B的值从1增加到9,每次都增加1,其乘积用P表示。每个A值都要使B从1变化到9,然后打印出相应的乘积。用VF设计主要程序语句如下:
A=1
DO WHILE A
B=1
DO WHILE B
P=A*B
? A,"*",B,"=",P
B=B+1
ENDDO
A=A+1
ENDDO
5 结束语
许多问题的求解归结为重复执行的操作,比如数值计算中的方程迭代求根,非数值计算中的对象遍历。重复执行就是循环。重复执行不是简单地重复,每次重复,操作的数据(状态、条件)都可能发生变化。重复的动作是受控制的,因此循环程序设计的要点就是要做好循环控制的设计。
参考文献:
[1] 林卓然.BASIC语言简明教程[M].广州:中山大学出版社,1995.
[2] 迟成文.全国计算机考级考试教程(二级)[M].北京:电子工业出版社,1997.
一、立项
1.对预防调查对象的理解
一是“可能引发职务犯罪的隐患、非规范职务行为”,应指未然的职务犯罪;二是“职务犯罪衍化的宏观和微观因素”,应指已然的职务犯罪背后的深层次原因。这里的已然职务犯罪一般是指一个整体深层次因素引发的类案、行业、领域群体性职务犯罪等,而非个案。对于自侦部门查处的个案一般没有必要预防调查,因为通常这些案件经自侦部门侦查后,其漏洞和隐患问题已基本查清,无需再重复劳动,直接可以利用现有的资料进行案例剖析、发出检察建议或开展后续其他预防工作。
2.预防调查的启动条件
一是预防部门在开展预防咨询、警示教育等预防活动中,发现或经群众反映有关单位在制度上、管理上存在易发职务犯罪漏洞和潜在隐患问题的。如2008年我省漳州市龙文区检察院根据新闻媒体报道反映的市区路面超载车辆增多,造成多处路段损坏等现象,分析可能存在公路监管部门执法不到位等渎职问题。启动预防调查程序后,及时地发现有关部门涉嫌渎职犯罪线索,移送自侦部门,从中立案6件,同时还通过开展预防警示教育,协助公路局及时修复路段损坏,加大超载车辆的打击力度,促进了依法行政。
二是侦查部门经初查不具备立案条件,但反映出有关单位在制度、管理上存在易发职务犯罪漏洞和潜在隐患问题,经分管检察长交办或上级检察院批办的。如2009年福建省厦门市海沧区对厦门第一农场下属的山边洪管理区涉及征地赔偿款的纠纷进行预防调查,选择了控申部门经初查不具备立案条件,但反映出该农场在制度、管理上存在易发职务犯罪漏洞和潜在隐患问题的题材进行立项调查。
三是某一行业或领域职务犯罪高发或呈上升趋势,需党委、政府或主管部门采取相应预防对策的。如2009年,我省宁德市两级检察机关查处机动渔船燃油补贴系列职务犯罪案件40件,涉及作案人员57人,包括海洋与渔业部门工作人员、乡镇干部、村委成员和渔民等,案值高达707.5万元,影响很大。宁德市检察院专门成立预防调查工作领导小组,采取查阅案卷、召开案情分析会、询问犯罪嫌疑人犯罪的主观动因、向渔民发放问卷调查等形式,深入7个市、县(区)两级海洋渔业、财政部门,了解国家“油补”政策出台的背景、意义及存在问题,形成《“油补”案件情况调查报告》和《“油补”案件引发的对国家油价补贴政策的思考及采取的防范对策》,并向市政府及海洋渔业的主管部门发出检察建议。
有上述情况之一,预防部门可以组织人员和力量确定承办,收集现有的相关材料,组织预防部门进行讨论开展预防调查的可行性和必要性,然后再由预防部门的承办人填写《预防调查立项审批表》,预防部门负责人签署意见,报主管检察长决定,并报上一级人民检察院预防部门备案。
二、组织调查
1.制作调查方案或提纲
预防调查立项后,由预防部门负责同志组织承办人和其他人员,根据已掌握的有关材料,研究制定调查方案或调查提纲,分管检察长也可以参与讨论。调查方案或调查提纲要列明:调查的来源或现有资料的总体评估分析、调查需要采取的措施、各承办人的任务分配、调查所需的期限和步骤,调查要达到的预期效果等等,并将讨论情况记录在案,参与讨论的人员要签名。
2.组织调查的方式
组织调查要按照制定的预防调查方案分步骤开展,当然调查方案或调查提纲在实际的调查中可以有所调整。在实践中可以采取以下方式:与有关单位召开座谈会,相互通报有关情况,了解具体工作的流程;向有关人员了解、核实相关情况;查阅、调取为预防建议和纠正违法意见提供依据的相关资料以及用于调查分析的具体事件、项目和问题的文件资料等;邀请专家对一些专业性的工作提供咨询,为预防调查提供专业指导和帮助;走访、问卷调查、聘请预防联络员以及讯问犯罪嫌疑人(包括服刑犯);复印案卷等一系列的有助于了解分析的调查方式。
3.调查需要注意的事项
在组织调查活动中,应当注意三个方面事项:一是对外开展预防调查时,必须由两名以上检察人员持介绍信并出示检察人员工作证;二是调查中向有关人员了解、核实情况,查阅、调取资料前,应当征得有关单位和人员的同意,并在被调查单位的纪检监察工作人员配合下进行。三是预防调查不同于侦查,不能对被调查人采取拘传、拘留和其他任何限制人身自由的强制措施,不得进行讯问、搜查,冻结存款、汇款等侦查手段,调查场所是单位或被调查人所在地,严禁将被调查对象带入检察院。
三、调查结果处置
1.发现相关职务犯罪线索
根据最高人民检察院《关于推进职务犯罪侦查和预防一体化工作机制建设的指导意见》的要求:“预防部门应当在预防工作中注意发现和受理案件线索,经审查,认为有初查必要的,应当及时移送侦查部门,并向举报中心备案,侦查部门立案的,应向预防部门反馈。”承办人应当填写《预防部门职务犯罪线索处置表》,及时移送侦查部门。
2.发现有违法违纪行为或涉嫌普通刑事案件
根据有关规定将相关线索和材料移交有关单位纪检监察部门或公安机关处理。
3.剖析犯罪原因,形成预防报告
完成对某一行业或领域职务犯罪原因的剖析和预防对策的研究,形成有分析、有对策的详细预防调查报告。根据《最高人民检察院关于实行惩治和预防职务犯罪年度报告制度的意见》,形成专项预防报告,报有关行业的主管部门和有关单位。
4.与发现存有职务犯罪的单位及时联系
发现有关单位内部机制不健全、管理混乱,明显存在导致职务犯罪发生的机会和条件,需要有关方面采取预防措施的,与有关单位联系沟通,开展必要的预防工作,如警示教育、发送预防职务犯罪检察建议、纠正违法通知书等活动。
当然上述四种情况可能并存。针对上述情况,承办人要提出具体的处理意见,并制作《预防调查情况报告》,报预防部门负责人审核后,经分管领导批准。情况报告内容主要包括:立项调查来源、主要问题、具体调查情况、调查结论、处理意见或建议以及承办人、承办日期等。若未发现以上四种情形的,立即终结预防调查工作,并将有关调查结果及时反馈被调查单位。
四、调查终结
1.调查终结的四种情形
预防调查情况报告的处置意见经批准后,一般在立项后的三个月内完成。根据不同情况进行处置后,相关单位落实并反馈的,预防调查可以终结。一是移送线索的,自侦部门已经受理并立案;二是发现有违法违纪行为或涉嫌普通刑事案件的,相关单位纪检监察部门或公安机关已接收并反馈的;三是预防调查专项报告呈送后行业主管部门或相关单位引起重视并被采纳的;四是有关单位内部制度得到完善,取得预防效果的。
2.制作《预防调查终结报告》
根据上述完成情况,承办人应当制作《预防调查终结报告》工作文书。列明立项调查来源、具体调查情况、承办人处理意见或建议、主管检察长意见、处理意见落实情况、预防调查成效综述等。《预防调查终结报告》一式二份,一份立卷归档,一份报送上一级人民检察院预防部门备案。
【关键词】Java程序设计;教学探索;教学方法
随着计算机软件技术的发展,Java以其简单、面向对象、稳定、与平台无关、多线程,动态等特点成为软件开发领域的主流程序设计语言之一,也成为高等院校计算机专业教学体系中一门重要的主干课程。但是并不是所有学生都能学好,这不仅仅是学生的问题,也取决于教师如何完成该课程的教学工作。学生无兴趣,学不会,感觉压力很大,种种现象反映出我们的教学工作出了问题。我们需要寻求解决问题的方法,提教学效果。
一、Java程序设计课程教学中存在的问题及原因
传统教学过程中,任课教师一般首先会按照教材对知识点进行讲解,然后编写程序分析、演示所讲知识点,学生只是跟随老师思路,被动接受,学生不会主动去思考,去寻求解决问题的办法,时间一长就喜欢接受教师写好的现成程序,当自己独立去解决实际问题时,就脑子空空,难以应对。产生这些现象的原因主要有以下几点:
1.知识点没有真正掌握
在学生的学习过程中,随着课程的逐步展开,学习了更多新的知识点后,就把以前学过的基本的语法规则遗忘了。当程序中需要使用以往的知识点时,就要不断的去翻书寻找,如变量如何定义,语句控制的相关用法等等,而对具体用法含义没有真正领悟。
2.在解决问题时编程方式和传统思维方式存在差异
如变量的讲解环节,它的值是可随着程序的调用而变化,具体的式子在传统数学模式里是不成立。有些问题看上去很简单,需要程序解决时,又要循环又要中断,就出现了整个思考过程要程序化。学生在刚开始学习程序时,很难采用计算机的方式去解决问题,另外完全依附于教师,教一点学一点,下课后就算结束了,从不自己独立思考,没有让学生养成良好的编程习惯,从而僵化了学习模式。
3.随着难度增加,学习兴趣逐渐降低
学生初学时兴趣一般都大,但是,随着学习的深入,知识点难度的增加,学习的兴趣和积极性就会逐渐削弱。当新鲜感没有的时候,就会感觉到程序设计枯燥、难懂,也就不去听、不去学了。
4.学习目的不明确,教学与实践脱节
很多学生学习目的不明确,不知道为何而学,学了干什么,很多学生学习这门课紧紧为了修学分,虽然书本中的知识掌握的很好,但是仅仅能够完成书本上的题目,忽略了实际软件研发的经验的积累,从而造成了教学与实践的严重脱节。
针对以上问题,就需要授课教师改变自己的教学方法,探索新的教学理念,深入对Java程序设计进行剖析,提高学生的学习兴趣和动手能力,真正感受到程序设计的魅力。
二、教学改进措施
1.增加教学环节中实训课时
为了使学生能够掌握所学的知识点,灵活运用去解决实际问题,同时培养良好的团队意识,激发自主创新能力,这就要求学生不能只停留在学的层面上,而要进一步达到会的深度。为了使学生真正作到学会并灵活运用这个目标,在教学上就应该加大实践操作的力度,要求教师形成一个从基本知识讲解到实践动手操作的指导团队模式。在进行课程教学的学期开始,就要求主讲教师根据教学的具体内容结合学生平时学习效果来设计适当的课程阶段性项目,在学生上机操作实现的整个过程中对知识点进行运用,从而加深其印象。教师在指导的过程中,在解答专业知识点的同时要注重引导培养学生的创新自学能力。在必要时可根据学生的个性化要求进行分组,实现不同的项目开发与制作。这样就能够增加学生的自信及提高对课程的兴趣程度。教师在课堂上的知识点讲解及实验实训的项目实践应用,都要做到任务分工明确,安排科学合理,效果检验及时,这样就能根据教学进度,结合学生掌握情况,调整教学方式,达到良好的教学效果。
2.拓展新的教学方法
(1)引导学生发散思维
程序演示是Java程序设计课程授课环节的一个重要组成,在程序演示过程老师应该提出问题,启发学生思考,可提问不同的学生,对不同的解决方案进行比较、分析,同时可穿插旧的知识点,帮助学生加强记忆。在提问解决问题的过程中要注重循序渐进的引导,让学生从不知道,到找到解决问题的办法的过程中去思考,培养分析问题、解决问题的能力,同时针对该问题进行拓展,提出新的要求,从而达到开阔学生视野,激发潜能,加强认识新知识点,稳固已经掌握的知识点的目的。
(2)要适时表扬鼓励
学生在学习的过程中,是否有兴趣钻进去,取决于他是否取得进步。假如自己已经尽力学了,还是学不会,当然就很受打击,从而失去再坚持下去的念头。在教学的过程中,无论是提问,还是学生在问一些简单的问题,就应该适时捕捉他们取得的进步,要肯定并鼓励学生。让学生有信心去学,也就是说只要认真的学习,就能不断的提高。这样学生的兴趣不断加浓,就会更用功的去寻求进步,得到同学们,尤其是教师的认可。学生的好胜心,成就感,在教学中得到应用,会取得意想不到的效果。
(3)故意设置错误启发
教学过程中,程序的编写及演示过程中,应该把常见的错误给学生故意暴露出来。问题的解决通常情况下是出现了错误,寻求解决错误的有效方法。学生学习知识本就是要认识错误,得到如何纠正错误的方法。这样在代码书写及调试时,制造矛盾,激发对错误的认识并解惑。在容易出现错误的基本知识点,无论是新学的还是已经学过的,都要不失时机的在错误中提高。这样往往可以加深学生的印象,以后假如出现类似情况,他们也很快能够找到应对的方法。也可以在处理错误时把错误多样化,同样的环境,不同的错误又该如何应对,就起到了,举一反三的教学效果。
(4)搭建课程总体项目
在课程开始就给同学们规划一个大的项目,此后知识点的逐一展开就是逐步完成目标的过程。学习的各个章节可设置局部的小项目,明确目标。要遵循事物发展,由易到难,由小到大的规律,小项目进行排序,前面完成的就是后面要出现的基础,依此一环扣一环,逐层推进最终实现课程的总体项目。不然学生总会在学习中产生顾虑,到底学了有什么用,又用到那里。这样学生就会努力的向目标进发,有针对性的去提高,否则造成盲目学习,其效果可想而知。
(5)教学过程让学生有轻松感
教师应该在教学中,在讲解单调的程序类课程时要有足够的幽默感,这样就能够调动的课堂气氛,使学生更专注于课程内容。其实教学就是一门独特的语言艺术,教学就是在教与学的交流中进行的,就要发挥教师的语言能力,感染和吸引学生,轻松的完成知识点的讲解。往往有些教师就不注意这点,只知道埋头讲知识点,其实已经丧失了教学良机,也就谈不上提高教学质量了。
3.紧密与实践相结合
老师在授课过程中,应该让学生知道自己所学知识的基本用途,了解该如何利用使用所学知识解决实际问题。高校老师在授课之余也担负着科研工作,因此可以将科研工作中的实际案例作为教学案例进行剖析、讲解,甚至可以让学生参加在研项目,通过大量实际案例的分析、代码的编写使学生更加深入的了解Java的运行原理。
4.改变传统课程考核方式
目前高等院校期终考试一般采用笔试进行,这样以来就使学生更注重理论的死记硬背,而不关心实际的应用,即使不会用程序解决实际问题也不影响自己的课程成绩。针对这种现象,应当引入上机考试的方式进行考核。考核时,学生试题来源于试题库,老师在制作试题库时就可以更加注重学生分析问题、解决问题的能力考核,同时,学生平时学习也会更加注重动手能力。平时课程课内实训时就要灌输学生学习要以用为主的思想,加强学生对知识点的理解和联想,不断提升学生的自觉能动性。
三、结束语
随着计算机软件技术的飞速发展,基于Java的行业应用在社会各个领域扮演重要角色,因此高等院校Java程序设计课程教学工作就显的尤为重要。这就要求教师和学生就必须达到教与学的紧密有效的结合,及时发现问题、解决问题,形成良性循环,使学生真正做到知识的深刻理解、掌握以及灵活运用,高效的完成教学任务。
参考文献
[1]廖福保.Java语言课程项目教学探讨[J].广东农工商职业技术学院学报,2012(2):29—31.
[2]史岳鹏.高职高专《Java程序设计》课程项目驱动一体化教学模式研究[J].科技信息,2012(20):33—34.
[3]马雪英,王桂平.以能力为导向的程序设计类课程教学体系[J].计算机教育,2011(4):74—78.
关键词:VB程序设计 教学过程 能力
VB程序设计是大多高校必开的计算机基础课程,在我校,VB也针对绝大多数院系开课。但由于课程比较枯燥难学,学生对程序设计畏惧、对程序设计思想不理解等诸多原因,导致VB课程教学效果达不到预期效果。通过几年的VB基础教学,我总结了一些教学经验,在此与大家分享。
一、好的开始是成功的一半,基础必须打好
VB是一门面向对象、事件驱动机制的程序设计课程,为了以后能更好、更深入地学习,必须在开始时就让学生理解和掌握面向对象和事件驱动两大特点,这样在后续学习中,学生才能合理地使用合适的对象和事件。
在具体教学过程中,我通过一个浅显易懂的例子进行详细讲解。比如“一行内容在窗体左、右移动;移动两种方法:手动和自动,当自动时,文字闪烁显示”,程序运行界面如图1所示:
讲解过程中,首先让学生看清楚题意,看清题目的目的和要求,提示学生找出这个题目中要进行操作的对象是什么,该对象该如何在窗口中体现,对对象的操作是什么。得出的结论是要操作的对象是“一行内容”,可以用一个能够显示文本的控件实现,操作是“左、右移动”。然后运行程序,通过演示程序运行,让学生们找出驱动结果显示的事件是什么。结论是单击“手动”和“自动”按钮,才能得到相应的结果。通过多个简单例题的引导,通过对学生提问,激发学生思考,让学生真正掌握对象的含义和事件驱动的含义,并能在给出的题目中说出需要添加什么对象,用什么事件来驱动。掌握好了这些,就为以后的学习奠定了坚实的基础。
二、实例教学和任务驱动机制贯穿始终
VB语言内容繁多,层次性较差,采用“案例引入,上机实践,质疑解惑”的方式,学生即学即练,上手快,兴趣浓,有成就感。以VB的基础内容控件、控件属性、事件和方法为例。单个讲解的话很容易枯燥乏味,学生也难以真正体会其用途。教师应设计一个综合实例,实例应注重知识的系统性、完整性和连贯性。我以学生最经常接触的“登录界面”为例进行了讲解。程序运行界面如图1-4所示:
本实例包含两个窗体,主要涉及窗体、标签、文本框、命令按钮、图片等控件,通过本例可以详细讲解每个控件适合用在什么情况,以及相应属性、事件和方法的使用。由于此例学生经常遇到,所以可以很好地理解,便于掌握。控件外观属性如图1-4设置。
窗体一的代码如下:
Private Sub Command1_Click()‘按钮单击事件
Form1.Hide‘窗体一隐藏,hide方法的使用
Form2.Show ‘窗体二显示,shoe方法的使用
End Sub
窗体二的代码如下:
Private Sub Form_Load()
Command1.Enabled = False ‘按钮可编辑属性设置,
窗体刚
Command2.Enabled = False 加载时是不可编辑的
Picture1.Picture = LoadPicture(″e:\素材\002.bmp″)
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer) ‘文本框 接收输入事件
Command1.Enabled = True ‘此时按钮变为可编辑
End Sub
Private Sub Command1_Click()
Picture1.Print ″用户″; Spc(2); Text1.Text; Spc(2); ″登录成功″
Command1.Enabled = False
Command2.Enabled = True
End Sub
Private Sub Command2_Click()
Picture1.Cls
Text1.Text = ″″
Text2.Text = ″″
Text1.SetFocus ‘文本框获得焦点
End Sub
三、问题求解能力的培养
Gagné说过:“教育的中心目标就是教会人们思考,运用他们的理性,成为更好的问题解决者。”VB的学习重点是程序设计,是用它来编程实现生活中的问题,所以单纯地靠讲解一些实例是远远不够的,关键是要培养学生发现问题、分析问题和解决问题的能力。我采取的方法是给出初始创意,让学生给出扩展功能及相关功能的解决思路,最终能够转换为程序。仍以上例为例,让学生尽可能补充添加功能,并描述该用何方法,什么结构等等来实现,并以作业的形式交上来,然后课堂上给予总结,上机让学生实现,并给予指导。上例可以添加的功能很多,如输入不能为空,如果为空给出错误提示(分支语句和Msgbox的应用);密码校验功能(分支语句实现);设置输入次数不能超过3次(循环语句实现)等等。这样的方式使得学生能够积极地思考,并能够把理论知识同现实结合起来,从而促进了学生更多问题的处理解决能力,形成了程序设计思维。
对一个题目要求用几种方法来实现,以此提高学生对程序的分析理解和举一反三的综合能力。例如,求1到100之间所有奇数的和。比较容易想到的是用For……Next循环语句实现。要求学生用Do While……Loop和Do……Loop While……来分别实现,学生就必须考虑这三者之间的联系和区别,以及各自的语句执行特点、循环次数的控制和退出循环的方法等。这样既使学生从多个角度考虑了问题,也对这三种循环结构有了更深的理解。更进一步,要求学生求1到N之间所有奇数的和。循环变量的终止值需用变量N来表示,因此需要在程序的前面增加一条定义变量N的语句,还需要使用InputBox语句在程序运行的过程中将终止值输入给变量N,这就要求学生能够把前面所学的知识综合起来运用,学生的创新思维和综合编程能力可以得到训练和明显提高。
四、抓好上机实践环节
上机是提高学生实践和动手能力的关键,所以要严格要求。做法是严格上机制度,上机表现直接跟成绩挂钩。学生自主意识较差,如果不明确布置任务,他们就会浑水摸鱼,上机无事可做,所以每次必须要详细分配任务,并且任务要具备趣味性、应用性和综合性,由易到难、由简到繁,充分调动他们的上机主动性和自我发挥能力。并且要鼓励学生积极提问、互相帮助,耐心给学生指导,充分利用好每一次上机课。
关键词:程序设计 教学 算法
程序设计是我国高校各专业学生必修的一门核心课程,该课程的教学目的是使学生掌握程序设计的基本方法和理论,应用某一程序设计语言编写具体的程序。程序设计的教学质量将影响到学生的程序设计能力,影响到学生创新思维的培养。
一、程序设计课程教学现状
“程序设计”课程长期沿袭传统教学模式,即以一种高级语言的语句体系为脉络展开教学,详细地讲解其语句、语法甚至一些细节内容,学生每学习一个语句需要做一些与该语句有关的习题。课程枯燥无味,学生学习积极性不高,很少动手实践。课程学完后,学生除了学到一些呆板的语句外,收获甚微。
1.理论基础薄弱
有些教师过分重视程序设计语言的教学,而对于程序设计中所涉及的程序设计理论、程序设计的方法和算法的设计思想等理论知识的讲解不够深入、透彻。
2.学生缺乏创新能力
学生可以解决那些和已经学过的知识有直接或有密切联系的问题,而面对一个需要用已经学过的知识进行综合求解的程序设计问题时,就不知从何下手,对所学知识做不到举一反三,缺乏程序设计的创新能力。
3.动手能力不强
学生实际动手能力差,具体表现在两个方面。其一,学生上机调试程序的能力差,难以找到错误产生的原因;其二,实际编写程序的能力不强,编写的程序功能不够完善,风格不一,程序健壮性差。
针对以上出现的问题,我们认为应该在教学过程中对学生各方面的编程素养进行引导和培养。
二、编程方法引导
程序设计的观念虽然发生过很多变化,但程序的基本结构仍然是顺序、选择和循环三种。因此,在学生初学程序设计时就应该注意渗透结构化程序设计的思想,以便使学生养成良好的程序设计习惯。
我们这里谈的不是纯粹的程序设计方法,如结构化的、面向对象的等,而是在教学中渗透程序设计的技巧。这里举一个结构化程序设计的例子。
例:求100以内的素数。
经过分析可以发现,除了“2”以外,偶数不可能为素数,所以外循环有50次是多余的,同理在内循环中,也不必用偶数测试。再进行分析又发现,一个合数最小的因子不会大于它的平方根,所以内循环中的次数被再次减少。最后程序变为:
通过不断改进程序,可以使程序效率得到不断提高,当然这些提高是在数据规模不断增长时才能体现出来。尽管现在很多人认为硬件的速度发展很快,我们应该把速度提高的任务交给硬件去实现,这样的想法未免过于武断。姑且不论类似上述的技巧对于程序执行效率的提高有多少益处,单从基于问题的学习方法这个角度的出发,程序的衍生对于提高程序员的编程水平也是一个很好的训练方法,所以这样的编程技巧是不可多得的,我们在教学过程中就是要进行这方面的引导。
三、编程风格和规则引导
前面提到我们在进行程序设计教学时,传统教学模式比较少注意编程风格和规则的引导,所以很多时候,学生编制出来的程序都是一路下来齐刷刷,缺乏良好风格,死套语法,缺乏考虑可能的不安全因素。
由于学习程序设计是一个循序渐进的过程,所以在教学中如果潜移默化地引导学生从程序设计入门开始,就注意程序设计的一般风格和应该遵守的规则,就能让学生更快更好地编制出高质量的程序来,并且具备良好的编程习惯。
举例说明。我们知道,free和delete都可以把指针所指的内存给释放掉,比如:
这段程序运行一定没问题,但如果在其后加上这样一段代码:
我们会发现出错了!这是因为,p所指内存被释放,但是p存放的地址值仍然不变,即p成了“野指针”。尽管尝试用if(p!=NULL)来判断p的可用性,我们却发现出错处理并没有起作用。所以,良好的习惯是在free和delete后,都要对指针作置空处理,即p=NULL。有人会说如果要这种情况出现在程序结束时,一切指针也会消亡,动态内存也会作系统回收,所以P置空是多余的。但是如果有人将这段程序取出来用到其他地方会怎样呢?结果不是我们想见到的。
四、算法设计概念的引入
程序=算法+数据结构。这就提出我们在进行程序设计教学过程中,不仅要重视语法的讲授,也要重视算法的讲授,甚至是要将算法提到更为重要的地位。程序设计是要解决问题,语言只不过是为解决问题而使用的工具,真正解决问题的是算法,难怪专家说“算法是魂,程序是衣”。
如在C语言程序设计课程教学中,当完成分支结构程序、循环控制和数组,进入内容较多的算法设计教学后,我们将教学内容分为以下五个方面。
(1)一般数据组织算法:查找、排序、字符串处理、求素数、筛选、迭代、穷举等;
(2)函数调用,函数嵌套归、递推及贪心算法等;
(3)指针算法,动态内存分配,链表等;
(4)用矩形法、梯形法计算定积分、模拟算法的随机抽样、蒙特卡罗法等算法;
(5)文件数据处理。
在课堂上增加算法设计的分析和讨论,强调算法设计的优化和程序的优化,是提高学生分析和解决实际问题能力的有效方法。
五、开展研究性学习
在程序设计过程中,开展研究性学习,是为了提高学生分析和解决实际问题的能力,主要是通过对解决问题的算法进行研究而展开的。由于课时所限,并且学生没有足够的实践经验,所以对算法问题的研究也是初级的,主要是讨论典型问题的典型算法及其应用。
1.通过研究性学习,可以重构知识体系,加深对算法的理解。
研究性学习是学生在教师的指导下,选定主题,然后搜集相关材料,对材料进行归纳、加工处理、分析、总结得到相应结论的学习活动。在教学中,可以根据教学内容,经过反复研究,确定研究主题,并根据学生的自愿报名成立研究小组,如搜索算法研究小组等。然后各小组根据自己研究的算法,重新整理相应的知识,对知识进行归纳、总结。通过对各种算法知识进行整理、分类、小结,加深学生对这些算法的理解。
2.通过研究性学习,同学之间取长补短,共同提高。
每个学生都有所长,也有所短,研究性学习一个重要特点就是:分工合作,共同讨论,共同提高。我们可以根椐学生的特点、特长,对他们进行分工,每位学生研究一种算法其中的一个问题,然后整个小组一起讨论,每位学生介绍自己的研究情况、研究成果,然后其他同学进行补充,发表自己的见解,这样每个学生都使自己的研究内容得到补充,同时也学习到了其他同学研究方面的知识,可以取长补短,共同提高。
3.通过研究性学习,总结算法的应用规律,提高程序设计能力。
在进行研究性学习时,除要求学生归纳、整理专题算法知识外,还要总结出算法的应用规律、应用算法解题的步骤和算法的框架。学生通过自己对算法应用规律的总结,对算法的应用得到升华,进一步提高算法的应用能力和程序设计能力。
4.通过研究性学习,提高分析问题的能力、算法表达能力和归纳、综合能力。
对算法的专题研究,不仅要对算法理论进行总结,算法应用的研究也是很重要的一方面,通过算法的解题应用,既提高了学生分析问题的能力,也加深了学生对算法的理解,提高了学生的算法应用能力。另外,我们在算法研究过程中,要求学生透彻理解算法内容,用算法语言准确描述算法,通过这种途径进一步加深学生对算法的理解,同时也提高了学生的算法表达能力和归纳、总结的能力。
结论
我们认为在程序设计教学中,要改革旧的教学体系,需要用新的理念、新的内容、新的方法组织教学。首先要用先进的程序设计理论指导教学,并加强编程算法、逻辑思维和编程方法的引导。其次,重视和鼓励学生对具体问题进行分析和研究,勤于动手和上机训练,养成良好的编程习惯。此外,对不同层次的学生可以进行分阶段教学,前一阶段讲授基本的程序设计方法,除了讲授程序设计语言的基本语法,还对学生进行编程方法及程序设计风格的引导;后一阶段主要讲授程序设计的较高级的语法和功能,提高学生对算法的认知和重视程序,并且在学生中开展研究性学习,培养学生实际动手能力。
参考文献:
[1]李云清等.程序设计创新能力的教学研究[A].全国计算机新科技与计算机继续教育论文集2003.
[2]李海伦等.“程序设计”课程教学改革的研究与实践[J].计算机教育, 2005.7.
[3]丰振.计算机程序设计教学方法研究[J]. 教学研究,2004.9.
[4]等.浅谈程序设计语言课程教学方法[J].吉林大学学报,2005.8第23卷.
关键词:;SQL2000;JAVA课程
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2016)27-0070-02
Abstract: For the sake of convenience for teaching java and chatting between classmates and teacher, this paper designed and constructed website of Java Program Design. This website used and SQL2000 database, and it was totally divided into four modules: network examination center, on-line message, resources center, backstage management. Meanwhile, this website could release news and add the related chain connecting.
Key words: ;SQL2000; JAVA course
近年,Java面向对象程序设计语言因其具有的跨平台性、分布式及安全性等特点[1],在当今网络时代得到广泛应用和发展。作为一种有生产力的编程工具,学习《Java程序设计》课程有助于学生在掌握面向过程程序设计和可视化程序设计基础上,能够更深入地掌握面向对象编程技术,且更有利于开发网络环境下的应用程序。
目前师生之间Java课程的教与学多局限于课堂上面对面的方式,而课后教师与学生之间更深入的交流和探讨,因缺少一定场地而受到限制,最终导致师生互动的机会减少。针对此现状,本文使用[2]技术和SQL2000数据库[3]设计一个Java课程网上学习平台,以满足在线学习及便于师生随时随地交流的目的。
1 需求分析
Java课程网站建设的目标是使教学更加方便,方便学生自己学习,提高学生自学能力,也节省学生、老师的时间。要求所设计系统操作方便、更新及时、易于维护管理。拥有动态更改信息;网上答疑;课程教学等基本功能。学生进入网站后可根据系统功能对该课程进行信息浏览,查看课件,提出问题及学习等;教师进入网站后也可对课程的一些信息进行浏览,对学生提出的问题进行回复,而后台教师需要进入系统对网站进行维护,更新信息、修改信息或者删除某些信息。
因此该系统需要满足的需求为:具有良好的人机界面,以方便操作;学生查看教学信息,下载课件,网上发帖等;教师查看学生提出的问题并进行回答;教师,整理留言和教学资源等。
2 网站功能设计
按照需求分析的结果,网站总体结构设计如图1所示,角色上主要包括学生、教师和系统管理员;功能上主要包括网络考试中心,在线留言,资源中心及后台管理,同时还实现新闻和添加相关链接的功能。
3 网站主要功能分析
3.1用户注册及管理员登录
用户包括普通用户和管理员,所有用户先注册然后登录系统,权限不同则登录成功后相应的界面不同。
3.2网站功能显示
将网站的每个功能模块显示出来,如图2所示,包括:资源中心,考试中心,后台管理,在线留言及使用帮助等。
3.3资源中心
资源中心主要功能包括查看与课程相关的文档及任课教师等信息。
3.3.1电子文档
图3所示的主要功能是上传和下载电子文档。为便于学生课后复习,教师可将课堂上教学用的Java课件等文档进行上传供学生浏览。
3.3.2网站课程实践
为加强学生动手能力,从而将理论与实践相结合,每个知识点都对应有实践环节,每一实验都明确具体内容及相关要求(图4)。
3.4考试中心
图5所示Java课程的网上考试阅卷,在时间和空间上都不必受传统考试的限制,可提高考试和阅卷效率。
3.5后台管理
管理员可以对科目、试题库及的资源等信息进行增加或修改等管理。
3.5.1 科目大类管理
如图6所示,可以增加或删除科目大类,同时给大类编号。
3.5.2 具体科目管理
学好Java,还应该熟悉其课程体系,了解其所属大类的与其相关的其他科目(图7),从而明确该课程的重要性。
3.5.3试题库管理
图8所示为课程体系中各门课程的试题库。
3.6在线留言
师生均可在线留言,但需要事先进行注册(图9),然后通过登录界面进入留言板块。
4 结束语
为便于学生在线学习及师生之间随时随地进行Java课程教学的交流,本网站实现了Java教学资源管理与查看、试题库管理与查看、在线留言及相关新闻等功能,有助于学生更方便更深入地掌握Java语言。
参考文献:
[1] 张白一, 崔尚森.面向对象程序设计―――Java[M] .西安: 西安电子科技大学出版社, 2013.
1汽车制动系统发展状况
几年来西方发达国家又兴起了对车辆线控系统(X-BY-WIRE)的研究,线控(BRAKE-BY-WIRE)应运而生,由此展开了对电控机械制动系统(ELECTROMECHANICALBRAKINGSYSTEM)的研究,简单来说电控机械制动系统就是把原来由液压或者压缩空气驱动的部分改为由电动机来驱动,借以提高响应速度、增加制动效能等,同时也大大简化了结构、降低了装配和维护的难度。由于人们对制动性能要求的不断提高,传统的液压或者空气制动系统在加入了大量的电子控制系统如ABS、TCS、ESP等后,结构和管路布置越发复杂,液压(空气)回路泄露的隐患也加大,同时装配和维修的难度也随之提高[1]。因此结构相对简单、功能集成可靠的电子机械制动系统越来越受到青睐,可以预见EMB将最终取代传统的液压(空气)制动器,成为未来车辆的发展方向。
2EMB系统的模型分析
2.1EMB系统工作原理
电子机械制动系统工作原理为:当汽车行驶时需要采取紧急刹车,驾驶者脚踏的力量信号传到制动踏板,该力量信号经过EMB控制系统的三环调速系统调控后输出电枢电压直接作用于无刷直流力矩电机上,输出的电机轴转动转速信号传递给传动机构进行减速增矩,转化成丝杠位移,再经过制动机构作用转化成制动力,整个过程的时间极短,在0.1s作用[2]。
2.2EMB执行系统
一个设计完整的EMB执行系统包括无刷直流电机模块(包括电机驱动模块)、传动模块和制动模块。要完成EMB的动力学仿真,首先要完成以上三个模块的数学模型设计。EMB执行系统结构框图如图1所示。图1中:Fd为制动器的目标夹紧力;AVI号为电机转速控制信号;DIR为电机正反转控制信号;Ua、Ub、Uc分别为电机定子每相绕组端电压;Uh+、Uh-分别为霍尔传感器供电高低电压;n为电机轴转速;ns为丝杠转速;s为丝杠副中螺母的平动位移;F为制动器的夹紧力;Mb为制动器的制动力矩;Jc为传动机构的转动惯量;TL为传动机构的摩擦阻力矩;Sa、Sb、Sc分别为三个霍尔传感器的信号;Ia、Ib、Ic、分别为电机定子每相绕组电流[3]。
2.3EMB控制系统
电机的控制采用三环(电流环、转速环和压力环)反馈控制,输入为目标夹紧力,输出为电机电枢电压。EMB电机的控制系统结构框图如图2所示。电机的三环调速系统设计就是对控制器设计,该三环调速系统包括夹紧力控制器、转速控制器和电流控制器[4]。其设计方法是:从内环开始,每次向外扩展一环,首先设计电流控制器,再将电流环当作转速调节系统中的一个部分设计转速控制器,最后把转速控制环当作夹紧力调节环中的一个部分设计夹紧力控制器。上述的夹紧力控制器、转速控制器、电流控制器均是PI控制器。电流控制器的输入是目标电流与实际电流的差值,输出为电机的控制电压;转速控制器的输入是目标转速与实际转速的差值,输出为电机电流的目标值;夹紧力控制器的输入是目标制动夹紧力与反馈制动夹紧力的差值,输出为电机转速的目标值。电机电流、电机转速和夹紧力为需测量的量。在本控制系统中,通过无刷直流电机驱动器上安装的电流传感器测量电机实时电流;通过光电编码器测量电机实时转速;通过压力传感器测量制动夹紧力[5]。
3EMB系统的仿真模型
(1)无刷直流电流控制模块,如图3所示。
(2)电流-转速双闭环控制模块,如图4所示。
(3)无刷直流电机三环控制模块,如图5所示。
4仿真结果
4.1电流环仿真
当电动机处于空载时,电流值比较小,所以应当在电机堵转的情况下对电流环进行调节[6]。电流环的试验结果如图6所示。可见,实际电流在初始阶段有较大的超调,但是在后期可以很好地跟踪目标电流。
4.2转速环试验
转速环在试验时,应处于空载状态。转速环的试验结果如图7所示。可见,在启动过程中电流能维持较大的值,从而使电动机迅速达到目标转速。由于电动机在旋转过程中不断换相会引起电流的抖动,所以电动机转速也一直在目标值附近小幅抖动。
4.3压力环试验
压力环的试验结果如图8所示。可见,两种工况下消除制动间隙的时间均小于0.1s,且制动压力的超调小于5%,同时我们可以发现所设计的EMB执行器能输出足够大的制动压力,而且响应迅速。