Abstract: Matrix is an important mathematical method of diagonalization, but because of its computational complexity, it has caused great difficulties on the application, The mathematical software has the function of processing of diagonalization, but for rational matrix diagonalization problem in the field of rational number the result is not satisfactory. So the study of rational matrix over the rational number field similarity diagonalization diagonalization, contract and orthogonal diagonalization algorithm and program project, design to realize rational matrices over the field of rational numbers on the diagonalization of utility software, solves the rational matrices over the field of rational numbers on the diagonalization of the accurate determination and computation problem.
关键词: 有理矩阵;有理对角化;算法;程序
Key words: rational matrix;rational diagonalization;algorithm;program
中图分类号:TP311.1 文献标识码:A 文章编号:1006-4311(2013)22-0237-04
0 引言
经过一年多的潜心研究,我们有理矩阵有理对角化软件创作小组完成了《有理矩阵有理对角化问题的算法及程序设计》的课题研究与软件开发任务,现将研究情况总结报告如下。
1 研究意义
矩阵是重要的数学工具,在各个领域中都有广泛的应用,如电路学、力学、量子物理乃至三维动画的制作都用到矩阵理论。矩阵对角化是矩阵理论中重要的变换方法,利用矩阵相似对角化可以快速地计算出矩阵所对应的行列式的值或矩阵的高次幂;利用矩阵合同对角化可以化简二次型,为二次曲面的研究提供了极大的方便;利用矩阵正交对角化化简的二次型几何意义是保形变换,更有实在价值,等等,可见矩阵对角化应用广泛。从理论上说矩阵对角化方法已经完善,但是人工实现却非常困难,甚至力不能及,所以研究用计算机实现之就非常重要。
值得注意的是,在实际应用及计算中所面对的数都是有理数,因此所直接打交道的也都是有理矩阵(即有理数域上的矩阵),因此考虑有理矩阵在有理数域上的对角化问题即有重要意义,尽管说已有的数学软件(如,Mathematica、Matlab、Maple等)能够解决矩阵对角化问题,但因为这些软件均是基于实数进行运算,所以对有理数而言势必存在误差(如对于循环小数),因此用之处理有理矩阵在有理数域上的对角化问题所得结果并不精确,有的误差还很大,例如关于相似对角化问题,对于矩阵A=■
人工与我们设计的软件都可求得:
可逆矩阵T=■与对角阵D=■
使得T-1AT=D。但Mathematica求出的可逆矩阵是:
T1=■
而Maple求出的可逆矩阵是:
T2=■
比较可见,Mathematica和Maple的计算结果存在着误差。
又如对于矩阵
A=■
人工与我们设计的软件都可求得正交矩阵
U=■与对角阵D=■
使得UTAU=D.但是在“矩阵工作室”——Matlab中所求的结果却是:
正交矩阵T=■
与对角阵D=■
可见此结果存在较大的误差。再如对于矩阵:
A=■
人工与我们设计的软件都可求得可逆矩阵
p=■,使得
P′AP=■
但是Matlab中所求得的可逆矩阵却为
T=■,比较可见Matlab的结果存在误差。
因此研究和设计有理矩阵有理对角化软件具有重要意义,为有关矩阵对角化问题的学习、教学及研究提供辅助工具。
2 研究现状
本课题的研究主要是处理有理矩阵的有理对角化问题,从国外来看,相关的研究是已有的大型数学软件(如Matlab、Mathematica、Maple等),不过从对角化来说,这些软件均是在实数域、复数域上计算矩阵的对角化问题,而不具有精确处理有理矩阵在有理数域上对角化问题的功能,并且这些软件系统庞大、使用不便、输出的结果也不直观。从国内来看,在知网与维普资讯上搜索,只见到计文军等人《基于MATLAB的实对称矩阵对角化》的论文(该文系内江师范学院大学生科研项目论文),未见其它相关的研究。总之关于有理矩阵有理对角化的的算法与程序设计研究非常少见。
3 相关概念界定
有理矩阵:有理数域上的矩阵称为有理矩阵。
伪正交矩阵:如果n阶实矩阵T满足TT′=T′T=D(D是对角形矩阵),则称T是伪正交矩阵。特别地,当D是单位矩阵时T即是正交矩阵。当T、D都是有理矩阵时称T为伪有理正交矩阵。当T、D都是有理矩阵且D是单位矩阵时称T为有理正交矩阵。如果T的列单位化后仍是有理矩阵,那么T是有理正交矩阵,此时称T是可有理正交化的。
有理相似对角化:对于有理矩阵A,如果存在可逆的有理矩阵T,使得T-1AT为对角形,则称A能有理相似对角化。
有理合同对角化:对于有理对称矩阵A,如果存在可逆的有理矩阵T,使得T′AT为对角形,则称A能有理合同对角化。
伪有理正交对角化:对于有理对称矩阵A,如果存在伪有理正交矩阵T,使得T-1AT为对角形,则称A能伪有理正交对角化。
有理正交对角化:对于有理对称矩阵A,如果存在有理正交矩阵T,使得T-1AT为对角形,则称A能有理正交对角化。
4 研究方法
本项目的基本研究方法可简示为:
理论研究■算法设计■程序设计
这是一个周而复始的过程,为此制定了以下的研究方案:
5 研究过程
根据上述的研究方案,我们展开了具体的研究工作,下面介绍其中的部分工作:
①最困难的一步是有理矩阵特征多项式的算法设计。因为[xI-A]是含有未知数x的行列式,如果按照行列式的计算方法直接计算,算法即将非常复杂,程序设计也将非常困难,因此我们努力争取在不展开行列式的前提下而求得矩阵有理特征根。起初的思维是,因为整系数多项式有理根的求法只与最高项系数和常数项有关,而根据根与系数的关系以及矩阵的迹与根的关系,求特征多项式的最高项系数与常数项是容易的,所以就企图在只求出特征多项式的最高项系数与常数项的状态下解决问题。然而事与愿违,因为接下来需要判定是否所有特征根都是有理数,而完成这一工作的唯一途径是判断所有互不相同的特征根的重数和是否等于n,而确定重数又只能依靠综合除法,但使用综合除法就必须知道特征多项式的所有系数,因此即陷入了困境!为了在山穷水尽之际觅得柳暗花明,我们曾构想过许多方法,又查找了很多资料,终于找到了参考文献[2],其中给出了以矩阵A的幂及其幂的迹表示特征多项式fA(x)系数的方法,由此解决了确定特征多项式系数的算法。
②众所周知,高于四次方程的根是很难求得,这也就使一般的求多项式的根的算法依赖于近似计算方法。但因为整系数多项式的有理根容易求得,而有理矩阵的特征多项式必然是有理系数多项式,又根据有理系数多项式可约性理论,有理系数多项式完全可以转换为与其同解的本原多项式来求根,这就使我们形成了求所有特征根的算法思想:先将有理矩阵的特征多项式转化为与其同解的本原多项式,然后再用整系数多项式有理根的求法来求其特征根,并用综合除法来确定其重数.然而经过多次运算检验后,发现当特征根为0时,综合除法失效,于是只能先将0作特别处理,然后再用综合除法判定余下的部分。对此,经过讨论研究后,拟定了以特征多项式的最低次项系数来判定0是否为特征根,若是,则再由最低次项系数来确定其重数。
③在正交对角化中,当使用施密特方法对所求的变换矩阵正交化后(为了方便我们称正交化后的变换矩阵为“伪有理正交矩阵”),需要对伪有理正交矩阵的列单位化。然而并非每一个伪有理正交矩阵都能单位化,所以对于伪有理正交矩阵的每一列,在单位化之前需要判定其能否单位化,经研究,我们采用了“当其模均为有理数时,才可单位化”的判定方法。
④为实现有理数域上的精确计算,我们设计了分数加法、分数乘法子函数来实现有理数的四则运算,算法上说并不复杂,但麻烦的是程序设计中如何存储分数以及实现算法,在这里我们采用了用两个矩阵对应地存储一个有理矩阵的办法。
⑤由于有限小数及无限循环小数均为有理数,因此程序运行时除了以分数形式输入数据外,还允许输入小数,输入后程序将自动将所输入的小数转化为分数来计算,以确保运算精确性。
⑥程序设计中,由于矩阵对角化运算中,会临时出现不同维数的数组,这样动态数组就成了算法实现的关键之一,这需要反复调试、认真的处理,比如数组是定义在调用函数中,还是定义在被调用函数中,是需要具体处理的,否则会无故地损失内存,我们的经验是,对于循环调用的情况,数组最好定义在调用函数中。
6 研究结果
经过一年多的研究,我们完成了有理矩阵有理相似对角化、有理合同对角化、有理正交对角化的算法设计,三篇:①有理矩阵有理相似对角化的计算机实现;②有理矩阵有理合同对角化的计算机实现;③有理矩阵有理正交对角化的计算机实现。
并使用通用的、移植性好的C语言设计出程序,形成了一个方便、实用的有理矩阵对角化软件。由于该软件是在分数运算的基础上设计的,所以使用该软件能够精确地解决有理矩阵在有理数域上的对角化问题。具体说软件有以下三种功能:①有理矩阵有理相似对角化:对于有理矩阵A,判别有理矩阵A在有理数域上能否相似对角化,若能有理相似对角化,则输出其对角矩阵及相应的变换矩阵P;若不能有理相似对角化,则输出不能有理相似对角化的原因;②有理矩阵有理合同对角化:对于有理对称矩阵A,求出其标准形及相应的变换矩阵P;③有理矩阵有理正交对角化:对于有理对称矩阵A,首先判别有理矩阵A在有理数域上能否伪正交对角化,若能,则求出相应的伪有理正交矩阵T及对角矩阵,然后再判别T能否在有理数域上单位化,若能,则将T单位化后得到正交矩阵U,同时输出U与相应的对角阵;若T不能单位化,则输出不能有理正交对角化的原因。
下面给出三个计算例子:
例1 有理相似对角化计算例子,对于矩阵
A=■
存在可逆矩阵P=■
使得P^(-1)AP=■
程序运行时间:0.375000秒。
例2 有理合同对角化例子,对于矩阵
A=■
存在可逆矩阵P=■
使得P’AP=■
程序运行时间:0.312000 秒。
例3 有理正交对角化对于矩阵A=■
存在伪有理正交矩阵T=■
使得T^(-1)AT=■
进而,又存在有理正交矩阵U=■
使得U’AU=■
即A可以有理正交对角化。
程序运行时间:0.407000秒。
7 结论
本课题通过设计有理矩阵在有理数域上的相似对角化、合同对角化和正交相似对角化的算法,应用C语言编写相应的程序,设计出一个具有有理矩阵有理对角化功能的软件,为有关领域的学习、教学提供辅助工具。
但该软件仍存在着些许不足,如大规模矩阵问题、大整数运算问题、控制数据运算结果溢出问题都需要继续优化,进一步提高软件运算速度。
致谢:
感谢韩山师范学院王积社副教授的悉心指导!
参考文献:
[1]计文军,杨海彬,王艳华.基于MATLAB的实对称矩阵对角化[J].内江科技,2007(4).
[2]孙志和,窦在祥.特征多项式系数的矩阵表示[J].青岛理工大学学报,2006,27(3).
[关键词] 算法数学教学高职计算机专业算法学习报告
算法(algorithm)一词源于算术(algorism),算术方法的原义是一个由已知推求未知的运算过程。后来,人们把它推广到一般,指算法是在有限步骤内求解某一问题所使用的一组定义明确的规则,甚至把把进行某一工作的方法和步骤也称为算法。
算法是数学及其应用的重要组成部分,是计算科学的重要基础。随着现代信息技术的飞速发展,算法在科学技术、社会发展中发挥着越来越大的作用,并日益融入社会生活的许多方面,算法思想已经成为现代人应具备的一种数学素养。对于高职计算机专业的学生来说,算法的学习尤为重要,因为它是学习程序设计语言等专业课的基础。可是,现在的高职数学教材没有这一内容,并且在实际教学中数学理论与专业课程之间严重脱节,让学生觉得数学学习学之无用。因此在高职计算机专业的数学教学中加入算法内容,可以让学生在初步感受算法思想的基础上,结合对具体数学实例的分析,撰写算法学习报告,体验程序框图在解决问题中的作用;通过模仿、操作、探索,学习设计程序框图表达解决问题的过程;体会算法的基本思想以及算法的重要性和有效性,发展有条理的思考与表达的能力,提高逻辑思维能力,为学习程序设计语言等专业课程打下坚实的基础。
一、根据学生的学习现状,设计了算法学习报告,通过让学生撰写学习报告来探讨如何通过具体的数学实例让高职学生体会算法的基本思想
算法学习报告包括:学生预习情况、小组讨论、教师点评、学习总结、教师对学习报告的评价和调查问卷六个部分,下面来具体进行分析:
1.学会课前预习是学好任何学科的前提,数学学习也不例外。可是,对于职业学校的学生来说,大多数的学生没有良好的学习习惯,也比较懒惰。如何让高职学生改变这样的现状已成为新时期高职教师亟待解决的问题。因此,根据高职学生的这一特点和算法学习的要求,我设计了算法学习报告中的学生预习情况部分,让学生通过充分课前预习来为课堂学习做好准备。这部分细分为:解题分析、算法分析、画出流程图和写出程序设计的代码(程序设计代码的编写可根据学生的实际情况进行调整)。
下面以一个数学实例来具体介绍算法学习报告中的学生预习部分。
教师在课前先给出预习内容:任意给定3个正实数,设计一个算法,判断分别以这3个数为三边边长的三角形是否存在?
学生预习情况:对于这样一道“判断分别以这3个正实数为三边边长的三角形是否存在?”的题,以往的数学课上讨论的很少。因此,可能班级中绝大部分的学生没有一点正确的解题思路,就更谈不上写出解题分析、算法分析、画出流程图和写出程序设计的代码了。那么这时就来看看在课堂上教师如何引导学生进行这个内容的学习。
2.在课堂上通过以学生为主体的小组讨论方式,可以调动他们学习算法的积极性,同时开拓他们的学习视野。俗话说:“三个臭皮匠,顶个诸葛亮!”
课堂上小组讨论情况:有同学提出利用“两边之和大于第三边”来判断三个正实数为三边边长是否构成三角形。
3.教师点评是教师从旁引导,使学生能够正确理解算法的设计思路,建构正确的知识体系。
教师点评:为学生分析构成三角形的条件,鼓励学生尝试用“两边之和大于第三边”来判断三个正实数为三边边长是否构成三角形。
4.学生经过课堂上的小组讨论和教师点评后,已经有了大致的解题思路,但是仍需精加工。因此,要求学生独立完成学习报告中的学习总结,写出其中修改后的算法分析、画出流程图和程序设计的代码以及学后记。
学生修改后的算法分析:
第一步:输入3个数a、b、c。
第二步:利用“两边之和大于第三边”判断a、b、c是否能构成三角形。
第三步:如果能构成三角形,输出结果或者输出“无法构成三角形”的信息。
学生修改后的流程图:
程序设计代码:略
学后记:要求学生写出学习这部分内容的学习感受,找出自己在学习中的优缺点,为今后的算法学习大好坚实的基础。
同时通过以上这些具体的学习过程让学生通过自我反思,提高自身解决问题、分析问题的能力,为以后的算法学习积累丰厚的经验。
5.教师对学生所做学习报告的评价和成绩评定,可以让学生了解自己在算法学习上的优势和不足之处,为今后的学习打下坚实的基础。
6.学生在新的内容学习结束后,究竟掌握了多少?在算法学习方面还存在哪些问题呢?我在设计算法学习报告的同时还设计了一份调查问卷来了解学生的学习状况。
(1)你在预习时能理解多少研究主题的内容?
A.全部B.一半左右C.很少的一部分D.一点也不懂
(2)你在预习时能写出多少算法设计的步骤?
A.全部B.一半左右C.很少的一部分D.一点也不懂
(3)你在预习时能画出多少流程图的结构?
A.全部B.一半左右C.很少的一部分D.一点也不懂
(4)你在预习时能写出研究主题的程序设计多少行?
A.全部B.一半左右C.很少的一部分D.0行
(5)在听了小组的讨论后,你觉得在哪个方面的收获最大?
A.算法设计B.画流程图的结构C.写出程序设计D.以上三种都有
(6)在听了教师的点评后,你觉得在哪个方面的收获最大?
A.算法设计B.画流程图的结构C.写出程序设计D.以上三种都有
(7)你觉得填写学习报告中的预习情况对你的算法学习有帮助?
A.有很大帮助B.有一点帮助C.没有帮助D.可有可无
(8)你觉得小组讨论有必要进行下去吗?
A.很有必要B.有些必要C.没有必要D.可有可无
(9)在学习了这个研究主题后,你觉得目前你最薄弱的是哪一个环节?
A.算法设计B.画流程图的结构C.写出程序设计D.以上三种都有
(10)①教师给出的最佳程序设计写了行,
②你写出的正确的程序设计是行,
③最佳程序设计的行数:你写出正确的程序设计的行数= 。
让学生每做一份算法学习报告就做一份调查问卷,可以让数学教师和专业课教师及时明确地掌握学生学习情况的第一手资料。教师可以通过这些数据,对全班学生学习情况进行横向的对比,随时调整教学设计方案,找到适合高职计算机专业学生数学教学的模式;在撰写多个算法学习报告后,也可以对某位学生调查问卷的数据进行纵向的对比,从中可以看出这位学生的算法学习是否有进步,还存在哪些方面的问题亟待解决。教师可以及时给学生进行有针对性的辅导,提高他们的算法学习成绩。
二、撰写算法学习报告可以加强算法的核心内容――程序框图的学习
由于算法的概念并没有一个统一的定义,在教学过程中应从实例出发,通过让学生撰写算法学习报告可以加强学生对解决具体问题过程与步骤的分析,体会算法的思想,了解算法的含义,力求使学生能够对算法本质有所认识。自然语言、程序框图和算法语言是表达算法的三种形式,其中程序框图最为重要,它是算法的核心内容。教师在教学中要重点抓住它,而不必一味的追求程序设计的完整。算法案例配合学习报告的使用,可以使学生进一步理解程序框图,领会算法的本质。
三、算法学习报告对高职计算机专业数学教学的重要性和有效性
1.算法学习报告的撰写将数学学习与程序设计语言学习有机的进行了结合。
算法是实践性很强的内容,只有通过学生自己的亲身实践,让学生亲自去解决几个算法设计的问题,才能使学生体会算法的基本思想,学会一些基本逻辑结构和语句。算法内容是将数学中的算法与计算机技术建立联系,形式化地表示算法。为了有条理地、清晰地表达算法,往往需要将解决问题的过程整理成程序框图;为了能在计算机上实现,又要将自然语言或程序框图翻译成计算机语言。因此,如果能让学生上机,算法设计的整个过程就可以得到完整的体现,学生可以及时看到自己设计的算法的可行性、有效性,这不但可以很好地激发学生的兴趣,而且还能提高学习效果。但是有些学校教学条件不允许或者还没有开设程序设计语言的课程,算法学习报告的撰写正好弥补了这一不足,方便了学生进行算法的学习。
2.算法内容的学习最好安排在高职计算机专业的学生已经开始学习VB、C等程序设计语言课程后,这样能够直接与专业课的学习进行互动,学习成效会更加显著。
如果算法内容可以让高职计算机专业的学生用数学学习报告的方式进行学习,那么不仅能提高学生数学学习的兴趣,也能为专业课的学习打下了坚实的基础。
目前,算法教学刚刚起步,还有很多不完善的地方,但是我相信经过一段时间的摸索,一定会找到一个适合高职计算机专业学生的数学教学模式。高职数学教学改革任重而道远!
参考文献
[1]普通高中标准实验教科书・数学3.北京:人民教育出版社,2004
关键词:程序设计;习题课;实验内容改革;课堂教学
社会竞争日益激烈,快速变化的社会环境对人才的综合素质提出更高要求,强调适应能力和设计应用能力的提高。为了提升我国高等教育的水平,尽快与国际高等教育接轨,近年来国家加大了对教育科研的投入,加强对高等教育的管理监督,强调对学生动手能力和创新能力的培养[1]。计算机作为现代工作生活必不可少的工具,人们的创新思想和设计理念都需要借助计算机来实现,各个专业的学生都需要具备一定的程序设计能力,因此大多数理工科专业的学生在整个本科学习过程中会选修两门以上程序设计方面的课程。如何合理地安排课程和实验内容,提高学生的程序设计能力,对培养高素质的综合人才具有重要意义。目前大学课程的改革偏重于课程内容以及课程设置方面的改革,而对教学实施改革的力度还不够[2]。
1程序设计能力的培养
程序设计能力的培养,首先是培养学生的设计能力,如何分析问题,提出解决方案;如何表达自己的设计思想,进而完善设计思路。设计能力的培养与具体的程序实现没有太大关系,然而却是程序设计的基础。因此,程序设计能力应该由两大部分组成:
第一部分,也是基础部分,分析问题,表达并细化解决思路的能力。这一部分与课程内容的联系较为松散,却是能力培养的基础。
第二部分,是与课程密切相关的编程实现和调试程序的能力。学生用课程中所学的某种编程语言,例如汇编语言或C语言,实现自己的设计思想,并实际动手上机,调试运行程序,解决具体问题。
目前课程内容设置以及教师的授课均偏重于第二部分,课堂上多讲授具体指令的功能及应用,大多数例题程序只有十多条,至多几十条指令,并且教师在课堂授课时大多直接给出正确的程序,而不是向学生演示分析问题、设计流程、编写程序、最后调试修改程序的整个程序设计过程。其结果就是,面对程序设计题目时,学生大多直接开始编写程序,而不是整理设计思路。盲目编写的程序往往逻辑混乱,缺乏调试经验的学生无法调试得到正确结果,打击了学生学习的自信心和积极性。因此在课堂教学活动中,应该强化对学生分析设计能力的培养,通过例题和课堂问答,详细演示整个分析、修改,最后完成流程设计的过程,不要直接给出答案。大多情况下,引导学生完成的流程与例题的答案有所不同,分析两者,改变学生始终希望有标准答案的习惯。有了流程后,引导学生用所学指令编写程序,利用多媒体教学手段,向学生演示整个调试修改程序的过程,强调分析问题、整理设计流程的重要性,改变学生忽略流程设计,直接编写程序的“恶习”。
基金项目:重庆市高等教育教学改革研究项目(0634170);重庆大学教学改革项目(教200617)。
作者简介:胡青(1975-),女,重庆人,讲师,硕士,研究方向为模式识别和智能系统。
实际应用中,人们分析解决问题时,多采用从大到小,从上到下逐渐细化的方法。然而在教学过程中,学生很难接受这种方法,面对一个稍微复杂的具体问题时,学生大多无从下手,不知道如何开始分析。“汇编语言程序设计”课程在整个本科教育体系中属于基础教育,开设时间较早,大多开设于大学二年级,这也就意味着,本课程主要面向低年级的,独立思考能力相对较差的学生。这类学生可以解决具体的小问题,对于稍微大一点的问题,就不知道如何进行分析。针对这种情况,培养学生思维分析能力时,适宜采取从小到大的方法,逐步引导学生适应分析方法,示例最好选择学生熟悉的事务,如学生成绩管理等。从一个具体的小功能出发,如统计某高考学生的总分,配合课程进度,逐步添加功能。例如学习分支结构及相应指令后,就可以统计某个学生不及格的课程门数,到课程结束时可以完成一个具有基本功能的学生成绩管理系统。最后再引导学生用从大到小,从上到下的方法分析设计学生成绩管理系统的功能,使学生了解熟悉这种分析方法。
第二部分程序设计能力的培养,要使学生适应计算机的“思维”方法。计算机中使用二进制,数据的储存、运算、传输都采用二进制。这就需要教师耐心引导,通过大量的例子和演示,使学生能够切换到计算机的“思维”方法,而不是继续停留在传统的纸笔方式。贯穿整个程序设计的是数据流,从哪里得到原始数据,对这个数据做何种处理,结果存放到哪里。调试验证程序的过程就是修改待处理数据,观察数据处理的结果是否正确,修改指令直到结果正确的过程。与其他非计算机类的课程相比,“汇编语言程序设计”课程有其特殊性,程序设计是一个调试修改错误,最终得到“正确”程序的过程,而其他非计算机类的大多数课程都要求一次得到正确结果,不允许出现错误,这就导致学生下意识追求直接写出“正确”程序,而不是调试程序。教材上的例题以及教师授课时都直接给出最终的程序,省略中间的调试修改过程,在一定程度上也加深了学生的这种倾向,刚接触程序设计的学生往往有重指令、轻数据、忽略调试的倾向。因此充分利用多媒体手段,在课堂上引导学生动手编程,演示调试修改过程,通过实际的例题说明观察数据,调试修改程序的方法,对培养学生调试修改程序的意识和能力是及其必要和有效的。
2教学及实验改革的实践
2.1增设习题课
“汇编程序设计”课程是实践性很强的课程,都配有一定的实验课程,教师对实验课的重要性已有了足够的认识,然而强调实验课程对学生动手能力的培养[3],在一定程度上忽略了课堂教学对学生“动脑”能力的锻炼。课堂教学不能局限于程序指令或语法规则的讲授,固定不变的“静态”内容更多需要学生记忆,而不是理解和应用。理论教学活动以教师为主体,而习题课应以学生为主,教师起辅助引导作用,习题课侧重于“动态”思维能力的培养。
例如任何一本程序设计入门的教材都将程序设计分成了3种基本结构,即顺序结构、分支结构和循环结构,掌握这3种结构的设计调试是整个程序设计的基础。介绍相关指令和程序结构后,在习题课上,通过具体的例子,引导学生分析问题,提出解决问题的流程,使用所学的指令和结构编程实现。利用多媒体手段,演示程序的调试修改过程,设计调试数据,调试学生编写的程序,引导学生自己发现解决错误,整个过程中注意与学生的互动。多个简单的例子组合起来就形成了一个稍微复杂的问题,通过前面分步的分析,学生对这个问题已经熟悉了解,不会产生畏难情绪,之后再通过一个类似的问题,引导学生自行分析实现一个稍具规模的程序,可以有效地增强学生的自信心。习题课中要注意黑板与多媒体手段的结合,强调以学生为主体,教师引导提示。通过习题课使学生对如何分析设计调试程序有了直观认识后,再经过实验环节,加深学生的理解和应用,最终达到培养学生能力的目的。
2.2实验内容的改革
实验环节作为理论教学的补充,一直处于辅助地位,一般针对理论教学的章节安排设置实验内容,而理论教学中各个章节的知识点都是相对独立的,这就直接导致实验内容相互间联系松散,甚至各自独立。根据各章节的知识点安排实验内容,每次实验都只要求学生编写一小段程序,锻炼检查学生对具体知识点的掌握,前后实验之间联系较为松散,到课程结束时,学生编写过多个实验程序,但每个程序都只有几十行代码,很难将各个知识点融会贯通,灵活运用,更加无法体会模块化设计的必要性和设计思想。因此设置实验内容时,应该加强实验间的联系,每次实验都给出需要综合应用所学知识点的题目,随着课程的进展,实验内容也从简单到复杂,到课程结束时,学生应该能够进行一定规模的程序设计。表1列出了本课程的综合应用实验题目,共分7次实验,每次实验4学时,每次实验均布置1~2道针对该次实验知识点的一般应用题,外加综合应用前面所学知识的综合应用题。这样的实验设置可以帮助学生融会贯通所学知识,并能有效地改变学生忽略平时学习,期末集中突击的现象。
表1 “汇编语言程序设计”课程综合实验设置
实验名称综合实验题目
实验1简单程序实验编程实现下列无符号数运算,结果放在变量X中,X=(84÷6+5)*7-100
实验2分支程序实验无符号字节型变量X取值范围为[0,200],编程实现如下函数f(X),结果存放在变量Y中。
f(X)= X/20≤X≤50
(X÷6+10)*7-1050
5*X 100
实验3循环程序实验无符号字节型变量X取值范围为[0,200],编程实现如下函数f(X),结果存放在变量Y中。
f(X)= 0+1+2+…+X0≤X≤50
(X÷6+10)*7-1050
5*X 100
实验4子程序实验编写一个子程序实现实验3中综合题的函数功能
实验5DOS功能调用实验从键盘输入X的值,并将f(X)结果显示在屏幕上
实验6图形功能实验在屏幕上画出f(X)函数的图形
实验7文件输入输出实验从键盘输入X的值,共输入10次,将f(X)的结果显示在屏幕上,并且将X和f(X)的值写入文本文件OUT.TXT
2.3实验过程管理的改革
同理论课相比,实验课的管理相对要松散一些。实验课中学生迟到、早退、旷课、代人签到等现象屡见不鲜。近年来我们加强了对实验环节的管理和监督,规范实验报告的要求,要求教师批改每份报告,并给出评分等级。然而在实际执行过程中发现,学生抄袭报告现象较为严重,不少学生在实验前并没有完成预习工作。由于批改工作量较大,一个教师要批改几十甚至上百学生的实验报告,不少教师采取“粗放式”的批改办法,实验报告制度在当前情况下形式大于实效。
计算机类课程的实验有其特殊性,学生更容易复制抄袭,并且教师很难在短时间内通过阅读报告检查出程序的错误,发现抄袭报告的学生,也就很难合理公平地评定出实验成绩,这在一定程度上打击了学生独立完成实验的积极性。实验成绩的评定既要重视实验结果,更要重视实验过程[4],只有建立相应的管理机制杜绝抄袭现象,才能促使学生踏踏实实地完成平时的实验,进而达到锻炼培养学生动手能力的目的。每次实验都布置具体的实验任务,设定截止日期,要求学生在截止日期前将自己编写的程序通过电子邮件发送给指导教师。教师直接运行程序,检查学生实验的完成情况,可以有效地提高批改速度和正确率,再利用计算机软件比较学生提交的程序,相似度达到一定程度就可判定为抄袭,对于认定为相互抄袭的学生,该次实验均判定为不合格,这样既可以减轻教师批改报告的工作量,也可以较为客观准确地评定出学生的实验情况,对改变当前抄袭报告的现象能起到积极作用。
通过实际的教学活动发现,习题课上学生注意力比较集中,大部分同学都能跟随教师的指导积极参与。同以往相比,上过习题课后,实验课中提问的学生人数明显增加,不少学生询问如何调试,而不是直接请求教师帮助解决问题。采用上述措施后,抄袭实验报告的现象依然存在,但人数有所下降。说明上述改革措施,对培养学生综合应用能力和调动学生的学习主动性起到了积极作用。
3结束语
随着计算机技术的快速发展,计算机已经深入人们生产、工作、生活的各个方面,良好的计算机应用和设计能力是高素质人才应该具备的基本能力。本文针对“汇编语言程序设计”课程的特点,对该课程的教学方法、内容和管理模式进行了改革实践,这些措施对提高学生程序设计能力起到了积极作用。希望课程建设经验能够对其他相似课程的改革起到参考借鉴作用。
参考文献:
[1] 教育部. 国家教育事业发展“十一五”规划纲要[Z]. 2008.
[2] 周建平. 大学课程改革的“深度”缺失与觉醒[J]. 江苏高教,2009(1):71-73.
[3] 李丽滨,卢宇. 高校计算机实验教学改革的思考与探索[J]. 辽宁教育研究,2002(9):52-53.
[4] 刘建英. 计算机硬件开发性实验教学之我见[J]. 高等理科教育,2007(4):105-107.
Reform in Teaching and Experiments of Course “Assembly Language Program Desgin”
HU Qing, YOU Ji-yuan, SHI Xin
(Department of Information Engineering and Automation, College of Automation, Chongqing University, Chongqing400030, China)
Abstract: Program designing is a fundamental requirement for creative talented people in the new century. This paper discussed how to improve students’s program designing ability by “Assembly Language Program Design” course, proposed that program design ability consist of two components: problem analysis and program implement, reformed teaching method, course experiments and management. The teaching results show that the reforms do have some effect on improving students’ program designing ability, activating students learning.
>> 高职JAVA程序设计课程教学改革的探索与实践 民族高校Java程序设计课程的教学改革与实践 高职院校“Java程序设计”课程的教学改革与实践 Java程序设计的教学思考 基于游戏开发的Java程序设计课程教学改革研究 基于游戏驱动的Java程序设计课程教学改革研究 基于工程实践能力培养的Java程序设计课程教学改革研究 Java程序设计教学改革的新思路 浅谈Java语言程序设计课程的教学改革方法与措施 面向应用的“Java程序设计”精品课程教学改革与实践 《Java程序设计》双语教学的实践与思考 《Java程序设计》课程网站的设计与实现 关于《JAVA程序设计》课程的改革思路 基于TOPCARES—CDIO的Java语言高级程序设计课程教学改革初探 基于CDIO的Java程序设计课程教学改革探索 基于OBE的Java程序设计课程教学改革 高职院校Java程序设计课程教学的探讨 Java程序设计课程教学改革与实践 “Java程序设计”的教学研究与探索 Java程序设计教育问题与对策 常见问题解答 当前所在位置:l.
[2]中国互联网络信息中心. 第十七次中国互联网络发展状况统计报告[EB/OL]. http://.cn/html/ Dir/ 2006/01/17/3508.htm,2006.
[3] 尚俊杰,李芳乐.“轻游戏”:教育游戏的希望和未来[J]. 电化教育研究,2005(1):25.
[4]Harasim Letal. Learning Networks [M]. Cambridge,MA: MIT Press,1995.
[5]Jehng J.J. The Psycho-social processes and cognitive effects of peer-based collaborative interaction with computers [J]. Journal of Educational Computing Research. 1997,17(11):19-46.
[6] D.Campell, 2000; Marzano, Pickering&Pollock, 2001; Newmanetal, 1995.
中图分类号:G424.1 文献标识码:A
Improving the Experiment Equality on the C Programming
by Group Teaching in the Network Environment
ZHU Juan
(Information Science and Technology, Jiujiang UniversityJiujiang, Jiangxi 332005)
AbstractGroup teaching method is an important method that used widely in the practical classes. And it is important to reform the teaching model, and to improve the teaching quality. In this paper, the method of group teaching is introduced to the experiment of C programing class. By developing the group strategy, the students complete the experiment tasks by team working. The result proves that the method of group teaching is valuable in the C programing class.
Key wordsgroup teaching; teaching mode; teaching feedback
0 引言
C程序设计课程受众非常广泛,普通地方高等院校几乎都有开设,对计算机专业的学生而言,这是程序设计的入门课,也是专业核心课;对非计算机专业学生而言,这是通过计算机等级考试的核心科目,是必选通识课。
随着计算机理论教学的逐步深入,C程序设计课程的教学模式也几经改革,取得了很大的进步,但是,还存在着一些问题:C程序的教学往往过于强调语法的讲授,对如何分析和解决问题讲得不够透彻,没有把编程思路放在主体地位上;过于注重课堂讲授,对学生编程能力和程序调试能力的训练不够,忽视学生实际动手能力的培养。C程序作为一门程序设计类课程,实践能力是其重要的环节,虽然大多数高校都安排了实验上机环节,但是将近一百人的课堂,只有一个教师进行指导,这样的实际情况下,教师对学生实际操作的指导是远远不够的。因此,往往在一个学期结束之后,仍然有不少同学甚至不能进行简单的程序调试。
针对以上现状,本文试图构建分组实验的教学模式,提高C程序课程实验教学的质量,提高学生编程能力。
1 分组实验教学的概念
分组实验教学是根据实验课程及现有学生特点进行分组,使之以组为单位来完成实验任务,以提高实验教学效果,促进学生动手能力的提高。
2 分组教学的准备
2.1 分组实验设施的配置
C程序设计课程的实验教学一般都分配有专业的实验室,人均一台电脑,安装有专业的实验软件,一般为Turbo C2.0或Visual C++6.0,学生以自己的电脑为单位独立完成实验任务。本文拟提出的分组实验教学模式,在原有的实验设施的配置之上,还需要配置有网络连接,通过网络实现分组讨论。
2.2 小组的划分
在以往的类似分组实验教学活动中,对学生的分组一般是按学号顺序进行分组,这样的分组会导致学生学习能力在各小组分配不均匀,可能会出现有的小组实验能力特别强而另外小组实验能力非常弱的情形。因此,本文拟提出以学生上一学期的期末成绩作为分组的依据,每五人一组,使得成绩好和成绩较差的学生在各组基本平均分配。
2.3 小组组长的指定
每个小组指定一名组长,组长在小组里很大程度上起到教师的作用,不仅自己完成实验任务,还要负责组织小组成员的讨论安排以及,帮组解决小组成员程序调试中出现的问题。所以,一般指定小组内成绩最好的同学为小组组长。
3 分组教学的实施
3.1 实验任务的布置
利用QQ群功能,以班级为单位构建一个班级群,然后各小组成员构建自己的小组群,便于实验任务的布置以及群之间的讨论。教师在班级群将实验任务出去,实验任务包括指定实验名称、实验内容、调试计划等,各小组的实验任务可以相同也可以不同。
3.2 分组实验教学的实施
算法讨论。由于C程序设计是一门程序设计类课程,实验内容主要以编写程序代码为主,而编程的核心是算法的分析与设计。以往很多同学无论是计算机专业还是其他非计算机专业的学生拿到程序题目就开始编写代码,没有算法设计这一环节,因此对于程序调试过程中的逻辑问题无(下转第40页)(上接第38页)法解决。所以,算法设计纳入本实验环节,小组长组织本小组成员在QQ小组群里首先对算法的思路进行讨论,确定行之有效的算法,甚至为了强化大家对于算法概念的掌握,可以要求一个题目用多个算法来实现。
代码编写。通过算法讨论,并确定算法的正确性之后,各小组成员分别独立完成自己程序代码的编写。
程序调试。程序调试时C程序设计实验课程的重要环节。再有经验的程序设计者也不可能将所有程序一次性编写成功,调试――修改――调试,这是程序设计必经的环节。而限制学生C程序实验课程教学效果提高的重要因素就是学生程序调试能力太差。学生往往缺乏程序调试的意识,成绩好的同学遇到问题问老师,成绩不好的同学遇到问题干脆放弃,长此以往,很多同学上机的兴趣就遗失了。本文拟通过分组的形式,遇到问题,小组讨论,众人拾柴火焰高,在小组长领导之下,对于简单问题,成员之间共同解决。对于实在解决不了的,由小组长发给教师,在教师的指导下解决。这样的解决方式,一方面锻炼了学生调试程序的能力,另一方面自己的问题自己内部解决也激发了学生的成就感启发了其继续学习下去的兴趣。
实验报告的编写。以往的实验报告按人头上交,每个学生每次实验课均提交一次实验报告,大部分同学的实验报告均照抄程序代码,敷衍了事。实验报告是对一次实验过程的总结,包括算法的设计,程序的调试等,认真的总结也是一次学习的过程。在本论文中,拟每个小组只需以小组为单位提交一份实验报告。这种形式,一方面避免学生将大部分精力投入抄写实验报告中,另一方面,通过小组长督促本小组成员对本次实验认真总结,除了算法的设计之外,更重要的是调试程序的经验。
4 分组实验教学的反馈与调整
笔者在所授课班级通过实施分组实验教学,班级学生实验动手能力整体比较高,国家计算机等级考试过级率也高出同类班级。
同时,对班级不同小组成绩进行横向比较,发现实验内容难易程度、小组长的沟通和组织能力以及小组成员的学习积极性是影响教学效果的重要因素。因此,需要在教学实践中不断加以关注和调整,发挥有利因素,抑制不利因素,使得分组实验教学模式在C程序设计课程教学中发挥更加重要的作用。
5 小结
将分组式教学模式引入C程序设计课程教学,就课程改革而言具有重要意义,实践证明通过分组式教学,学生的C程序设计理论知识得到了很好的巩固,编程动手能力得到了很大的提高,同时对学生的学习积极性也起到了很好的激励作用。
参考文献
[1]林国忠.中学体育教学运用分组教学模式的探析.福建体育科技,2010.3.
【关键词】开放式实验教学 程序设计 教学改革
【中图分类号】G 【文献标识码】A
【文章编号】0450-9889(2016)09C-0048-02
现阶段高职院校学生程序设计能力还相对较低,这主要是由实验教学模式存在问题所致,传统教学模式仍在程序设计教学中沿用,这在很大程度上抑制了教学成效的提升。开放式实验教学是一种先进的实验教学模式,它以培养学生创新意识和创新思维为目标,在运用科学思维方法的基础上大胆设计解决某个领域的相关问题,作为一种教学模式具有高度开放的特征。开放式实验教学能够实现对学生创新精神和实践动手能力的有效培养,是推动高校人才培养目标实现的核心途径。相对于其他教学模式,开放式实验教学在巩固相关知识、培养工作能力、养成科学作风方面具有明显的优势,它能够在提升教学成效的同时有效培养学生的程序设计能力,对于教学目标的完成更加有利。因此,高职院校教师应当进一步强化开放式实验教学,进而培养出更多具备较高程序设计能力的人才。本文试分析程序设计类课程实验教学现状,探讨开放式实验教学中提高学生程序设计能力的有效策略,从而为教学改革提供理论依据,推动教学水平的提升。
一、程序设计类课程实验教学现状
传统实验教学围绕教师开展,教师依据实验大纲和教学大纲进行实验任务的布置,学生被动执行实验任务。这种传统实验教学模式应用于计算机程序设计类课程JAVA、C++中,会使得学生实际动手能力难以得到有效培养,最终造成理论与实践相脱节。由于实验教学中学生缺乏明确目标,学生无法对实验课程产生强烈兴趣,他们机械化完成实验任务时创造性思维发展会受到抑制,其程序设计能力很难得到实质上的提升。指导教师的辅导对象往往是个别有兴趣的学生,很难提升整体实验教学效果。通过对多年程序设计类课程实验教学进行了解不难发现,传统实验教学模式通常带来以下问题:
(一)实验教学形式僵化,学生思维难以发散
教师开展一段时间理论课程后就会安排实验课程,并依据教材配套实验任务演示讲解,然后给学生预留一定时间完成实验任务。配套实验任务设计通常能够较好地实践和验证阶段性理论知识,但是这种设计形式下的实验教学也具有形式僵化、内容陈旧等问题,教师依据实验步骤进行正确结果的演示,学生模仿教师进行实验步骤的重复。这种情况下学生思维很难得到锻炼,如果完全依据教师演示就会获得相应的实验结果,但是一旦出现偏差学生就不知道怎样处理。一旦出现问题学生通常会直接请教教师,或者重新进行实验步骤,对于为什么会出现这些问题学生很少会去思考,实验结束后收获很少。
(二)实验过程被动,实验结果唯一
传统实验教学模式中学生始终被动地进行实验,他们机械地进行实验操作,只是简单重复一遍实验指导书,这样就能够获得合格的实验结果,很多学生完成试验后很难产生深刻的理解和记忆。另外,还有一部分学生没有进行实际的实验操作,只是简单地抄写同学的实验报告,他们连实验的内容都没有掌握。当前,很多高校学生实验报告的内容都基本相同,这种情况下学生不会对实验进行探索和研究,实验教学很难发挥出应有的作用。
(三)设计和实际相脱离,程序和问题相脱离
传统实验任务通常将相应理论知识验证作为重点,一些实验任务的设计目的正是验证理论。这种情况下学生即使很好地完成实验任务也无法做到理论联系实际,虽然能够正确运行所写程序但却无法达到解决问题的目的。例如,在累加阶乘计算中,学生编写的从1加到100程序虽然能够正常运行并获得正确结果,但从1乘到100通常程序就无法获得预期的运行结果。由此可见在设计好的实验任务中很难会去到某些实际问题,而学生一旦遇到这些实际问题就会束手无策,不知道怎样处理和解决。
二、开放式实验教学中提高学生程序设计能力的有效策略
作为一个新型教学改革项目,开放式教学与传统教学模式存在显著区别,它通过创新实验方式实现学生创新精神和实践动手能力的培养,最终推动高校人才培养目标的实现。在开放性实验教学中学生不仅能够对所学知识进行巩固,还能够形成严谨认真的作风和较强的工作能力,对于完成教学目标具有推动作用,培养出的应用型人才更加具备创新素质。
在具体开放式实验教学中,教师在实验任务设计中不应当设定具体指标,只需将要体现的理论知识罗列出来,这样学生就能够自由发挥,通过自主设计提出自己的实验报告。在实验过程不固定、实验结果不统一的情况下,学生就不会提交相似的实验报告,这样他们不仅会产生更大的实验热情,还会将自身的创新精神最大限度发挥出来,同时和教师充分交流实验过程中遇到的问题。这种方式对于那些过去不进行实验、抄袭实验报告的学生也会产生影响,由于和其他学生的实验任务不同,他们无法抄袭别人的实验报告,只能根据教师的指导设计和完成简单的实验任务。
(一)开放实验教学,鼓励学生自主创新
实验教学应当改变教师单纯演示、布置实验任务的做法,而是由教师从理论课出发针对某个问题引导学生进行实验任务的自主设计,然后在设计实验过程中进行相关理论知识的运用和验证。这样学生创新意识就能够充分发挥出来,实验创新能力和动手能力才能够得到有效培养,进而推动学生科研工作方法和科研思维方式的形成,使得学生能够在实验中解决问题,进而更好地进行程序设计和项目开发。例如,教师在指导学生进行火车售票模拟系统设计时,应当先将其中会应用到的理论和知识传授给学生,并让学生归纳程序设计中应当注意的问题和需要解决的问题,再在此基础上进行自主设计,对于学生难以解决的问题教师可以给予相应的指导。在这个过程中不仅能够培养学生的创新意识,还能够锻炼他们的动手能力和科学思维方式。
(二)学生掌控实验过程,产生多样化实验结果
在提出问题、形成概念、解决问题等过程中,学生应当独立思考、积极探索,这样他们才能够处于教学活动的中心,开放式实验模式才能够在教师的引导下有序运行。在开放式实验教学中学生应当获得更加广阔的空间发挥能动性和创造性,通过贯彻因材施教、发展个性的原则,为学生创造出良好的发展成长氛围。让学生主导实验过程,不仅能够将学生主体作用充分发挥出来,还能够使他们产生更大的参与热情,用主动学习代替被动学习。另外,教师还应当引导学生产生多样化的实验结果,这样学生探索创新的欲望才能够被有效激发出来,进而更加积极地投入到实验当中去,多样化实验结果还能够引发学生进行更加深入且广泛的思考,进而实现自身设计能力的提升。例如,在程序设计教学中,教师往往会规定程序设计步骤,告诉学生在哪个阶段应当进行什么内容的设计,在开放式实验教学中教师应当让学生自主进行程序设计步骤的安排,然后根据自身的思路和想法进行实验,同时不定时了解学生实验进度,并给予必要的指导。
(三)问题驱动设计,程序贴近实际
对学生掌握理解计算机逻辑设计进行训练是计算机程序设计课程的主要目的,学生能够通过程序设计对计算机解决实际问题的过程进行控制。所以在学习过程中学生应当实现问题驱动设计,设计目的来源于问题、设计结果回归到问题。研究问题是学生进行不断学习的目的,这样学生能够在问题解决过程中获得成就感,进而更好地培养相应实践能力。实际当中程序设计应当和实际生活应用紧密结合,而不能局限于课堂上构建的理想环境。例如学生设计火车售票模拟系统时,教师可以首先提出实际中经常遇到的问题,包括一个人一次可以买几张,多个窗口同时购票情况下的先后顺序。
三、结语
在计算机得到普遍应用的今天,程序设计已经成为日常工作中的重要技能。然而,当前高职院校学生程序设计能力还存在较多问题,这主要是由于教学模式陈旧、落后造成的。因此,高职院校应当对程序设计实验教学进行强化,用开放式实验教学替代传统教学,进而实现对应用型人才的有效培养,以满足信息化社会发展的需求。由于程序设计需要学生具有较强的实践能力和创造能力,所以高职院校应当有效提升实验教学的开放程度,同时在实验教学过程中充分贯彻开放性教学思想,通过相互衔接、多种形式的开放模式有效提升学生程序设计能力。本文分析了程序设计类课程实验教学现状,并在此基础上探讨了开放式实验教学改革策略,希望高职院校教师能够加强对开放式实验教学的重视,有效提升实验教学成效,最终为社会培养出更多的合格人才。
【参考文献】
[1]张永梅,马礼,孙晶静,等.培养学生程序设计、实践与创新能力的探索[J].电脑知识与技术(社会科学版),2016(1)
[2]张野,宋微,冯冬茹,等.程序设计实验课堂错误转化提升策略研究[J].赤峰学院学报(自然科学版),2016(4)
[3]任长普,何炎明,张兆梁,等.远程开放教育VB程序设计课程教学实践――以克拉玛依电大教学为例[J].开封教育学院学报(社会科学版),2015(3)
[4]王晓东,朱华,王金发,等.加强实验教学示范中心建设 促进实验教学改革[J].实验室研究与探索(自然科学版),2015(1)
【基金项目】2014年度广西高等教育教学改革工程立项项目“提高学生软件设计能力的研究――创办高职高专软件兴趣小组的实践”(2014JGA438)
【关键字】程序设计 实验教学 ACM
一、引言
近来年,随着信息技术在社会各个应用领域的渗透和普及,程序设计类课程已经发展为高校计算机教育的重点课程。理论教学与实验教学是程序设计类课程的重要组成部分,其中,实验教学是完整教学过程中的不可或缺的实践性教学环节。实验的目的不仅仅是为了验证所编程序的正确与否,也是为了加深对程序设计语言知识的充分理解,更重要的是培养学生的实际操作能力和积累丰富的编程经验,从而引导他们利用程序设计语言编程来解决实际问题。基于此,本文对如何更好的进行程序设计类课程的实验教学作一些探讨。
二、现状分析
目前,我校计算机学院开设了高级语言如C、C++等多门程序设计类课程,这些课程的共同目标就是让学生通过上机实验和课程设计来巩固课堂上讲解的语法规则和算法技巧,锻炼编程能力。但是现有的程序设计类课程实验教学存在着很多问题,导致整个教学效果得不到提高,与教学目标的要求不相符。本节将主要从三个方面对其存在的问题进行总结:
2.1 实验教学安排
我院程序设计类课程的上机实验课时是有限的,一般都是每周安排两个课时,或者最多四个课时,通常会在连续的几周内结束。由于一般程序的编写和调试比较费时间,要是学生不事先做好充分的准备,仅仅靠在两个课时内去完成一个完整的程序编写是不太可能的,对所学内容也没能充分理解,很难在课堂上培养学生的实际编程能力。
2.2 实验教学内容
我院专业实验中心的机房环境是一个内部的局域网,不能连接到互联网,教师都是通过课件投影或屏幕广播教学软件来完成主要的实验教学过程。实验内容基本卜^都是对课堂理论教学内容进行验证和实现,学生按照教材或课件来完成实验。整个的实验教学环节中,教师根据实际的情况来选择是否进行案例教学,而当前多数实验教学过程中的案例所覆盖的知识点范围不够理想,不能将新旧知识点都包含进来。案例陈旧,缺少更新,实用性和趣味性也不强,因此不能很好的激发学生的学习热情,不利于培养学生的独立思考和动手操作能力,未能达到教学目标的要求。
2.3 实验教学考核
实验课程主要是通过实验报告中的程序编写情况来考核的。由于时间有限,实验报告的批改都是教师在课后另找时间检查,教师往往只能通过纸质的实验报告来分析学生的程序,要求程序能正常通过,看到运行结果就可以了,而忽略了程序中的调试环节,而这些环节中通常都是学生未掌握的知识点。这种考核方式不利于教师对学生学习情况的掌握,也不利于培养学生的创新能力。
三、ACM学习模式的特点
现在,随着ACM国际大学生程序设计竞赛(简称ACM)在高校中的推广,越来越多的学生参与进来了。在迎接ACM竞赛的学习过程中,形成了一种具有ACM竞赛特点的学习模式,这种学习模式的特点如下:
l、ACM竞赛所涉及的知识面十分广泛,算法电极具复杂性。通常在平时的训练过程中为了能深刻而透彻的理解各个知识点,教师会引入大量的案例教学。运用典型案例可以将学生带人特定的问题进行案例分析,通过学生的独立思考或团队合作,进一步提高其解决具体问题的能力。
2、ACM竞赛是通过在线测评系统上实时提交程序代码,给出评判结果的竞赛形式。ACM测评系统能够实时的给出参赛队的排名情况和每道题的通过率以及通过人数,教师可根据题目的通过率来掌握学生对知识点的学习情况,也可以反思其教学方法和教学内容中存在的问题。
四、基于ACM模式的程序设计类课程实验教学的做法
将ACM学习模式应用到我院现有的程序设计类课程实验教学过程中,具体措施运用如下:
4.1 实验课程的开设
我院高级语言(C、C++)程序设计实验课程都是在大一这一学年开设的,大一第一学期是面向过程的C语言编程学习,大一第二学期是面向对象的C++语言编程学习。这样开课的结果就使得大多数学生连面向过程的编程都还没有完全搞清楚,就直接跳到了面向对象的编程,可以说整个大一学期都是处于混沌的编程状态。因为对程序设计语言的思想和语法还没完全掌握,所以很多学生不具备基本的编程能力,甚至对编程有恐惧感。为了解决这些问题,我们结合ACM的竞赛模式来调整开课计划,把原计划2个学期的高级语言程序设计实验课程的教学时间调整为5个学期,这样可以贯穿整个计算机专业课的学习过程,从而将程序设计语言和其他计算机专业课的学习更好的结合起来,让学生有时间去深刻地理解程序设计语言的思想和方法,不断地锻炼实践操作能力和积累编程经验。
4.2 实验内容的选取和实验课程的考核
对实验环境来说,要求将我院专业实验中心机房连接到我校的源程序在线测评(Onlinejudge,简称OJ)平台上。根据程序设计类课程的实验内容和具体要求,每次实验前,教师可以从我校或者其他高校的OJ平台上的ACM竞赛题库中挑选或改造2-3个相关题目作为实验内容挂到我校的OJ上。在实验课阶段,由学生独立完成或者自由组队来编写程序,调试程序,解决问题,编写好的程序提交给OJ来判断正确与否。通过每次实验在OJ上完成的做题数量,教师可以由此掌握到学生对知识点的学习情况,对欠缺的知识点再给与重点讲解。同时教师可以根据OJ上的排名很轻松的完成实验课程的考核。学生也可以通过每次实验的做题和排名情况,来检查自己的学习方法和学习内容,从而达到熟练掌握所学内容的实验教学目的。
五、结束语
关键词:c++教学;教学改革;三步法;主动学习
0、引言
c++具有功能丰富、表达能力强、灵活方便、应用面广、目标程序效率高、可移植性好的特点,因此很多高校都将其作为计算机专业的一门专业基础课。该课程对培养学生的编程技能与逻辑思维能力、分析解决问题的能力、自学能力有重要作用。但是,c++存在概念多、规则复杂、使用灵活、不易调试等问题,使得教师教学和学生学习都感到困难,特别是很多高等院校将c++作为计算机专业学生入学后首先接触的第一门专业基础课,这种现象尤为明显,而c++基础学不好将直接影响后续专业课程的学习。因此如何进行c++程序设计课程教育,进一步提高教学效果与质量,成为了计算机专业课程建设中的一个紧迫任务。
1、教学计划改革
教学计划改革前,中南林业科技大学c++程序设计课程安排在大学一年级第2学期开设,其中理论课程安排在第1~16周,每周4学时,共64学时,4学分;实践课程安排在第2~19周,每周2学时,共36学时,2学分。
笔者通过几年的教学实践,发现教学计划中存在3点问题:
(1)学生没有编程基础。中南林业科技大学计算机专业学生在大学一年级第1学期的专业基础课程只开设了计算机导论这门课程,导致学生缺乏计算机编程基础的知识。
(2)理论教学跨度过长。C++程序设计理论课时共64学时,需要、16周的教学时间。这使学生在学习过程中遗忘了前面的教学内容,从而影响学生的学习热情。
(3)实践教学课时不足。C++是一门实践要求强的课程,理论教学与实践教学课时合理安排应是1:1或者1:1.5。而中南林业科技大学的c++程序设计课程的实践教学课时不足,从而影响学生学习兴趣。
基于以上3点问题一中南林业科技大学对c++程序设计课程的教学计划做了修改,将c++程序设计课程教学内容分为两个部分。
(1)面向过程教学内容安排在大学一年级第1学期进行,其中,理论课时32学时,每周4学时,共8周,2学分;实践教学课时32学时,每周4学时,共8周,2学分。
(2)面向对象的教学内容安排在大学一年级第2学期,其中,理论课时32学时,每周4学时,共8周,2学分;实践教学课时32学时,每周4学时,共8周,2学分。
2、教学改革
2.1 教学内容改革
根据新版教学计划,对c++程序设计的教学内容进行改革。首先调整教学大纲内容。最初的教学大纲是按照64学时编制的,内容涉及c++面向过程编程和面向对象编程思想。新修改后的教学大纲分为两部分:第1部分是C++面向过程的程序设计思想;第2部分是c++面向对象的程序设计思想。每部分包括32学时的理论教学和32学时的实践教学。
在面向过程的教学内容中,重点介绍c++的基本语法、规则和编程思想,详细介绍数据类型、变量、运算符、表达式、语句、控制语句、数组、函数、函数重载、参数传递的关键知识点,弱化了指针的知识点。同时对一些知识进行归类教学,采用“三步法”教学方法对关键知识点进行归纳和总结。
在面向对象的教学内容中,重点对c++中类、对象、成员函数、数据成员、构造函数、封装性、信息隐藏、继承性和多态性等知识点进行详细介绍,弱化运算符重载的内容。
通过对教学内容的改革,使学生在具体的教学过程中,不会产生迷惑,从而避免学生在接触到程序设计时,区分不了面向过程与面向对象的编程思想。面向过程程序设计思想的重点是c++基本语法、规则和编程思路的形成,而面向对象的教学则可以为学生在后续学习目前流行的开发语言Java和c#等面向对象程序设计语言时提供帮助。
2.2 “三步法”的教学方法
“三步法”是笔者通过长期的C++教学过程发现的一个规律。“三步法”的教学方法定义为:在c++语法中,一般存在“定义、声明和应用”3个步骤,因此,将这3个步骤称为“三步法”教学。通过“三步法”的学习,能够使学生减少编程过程中的语法错误,提高编程能力。
在面向过程的教学内容中,总结了许多采用“三步法”教学的知识点。如函数的“三步法”教学方法是函数的定义、声明和调用。对于函数,我们在教学过程中第1步要定义函数,即定义函数的功能;第2步是向编译器声明函数的原型;第3步是在需要时进行调用。通过“三步法”教学,学生能够很快地领会函数的正确使用方法。其他的知识点包括变量的“定义、初始化和应用”、数组的“定义、初始化和应用”等。
在面向对象的教学内容中,也总结了大量的“三步法”教学知识点,其中类与对象是典型的知识点。对于类与对象,总结的是类的定义、对象的定义和对象应用的“三步法”教学方法,旨在告诉学生要正确使用对象方法,第1步必须要定义类数据类型,第2步是利用定义后的类数据类型定义对象,第3步才是对对象的应用。
“三步法”的教学方法是在笔者长期的教学实践过程中总结出来的教学方法,对于初次接触计算机编程的学生来说,通过程式化的学习,能快速记住编程的规范,减少语法错误,提高初学者的学习兴趣与热情,增强学生的自信心。
2.3 实践教学的改革
c++程序设计是实践性很强的一门课,培养学生的编程能力是教学的首要目的。因此,在授课的同时,如何引导学生利用上机实验来加强实践也是教学中的一个重要环节。实践课程的主体是上机实验课程,但仅在上机实验课上编程是不够的,学习效果也会大打折扣。为此,我们对实践教学进行了改革。
(1)改革实践课程教学方式。传统的实践教学方法是学生上机实验课,发现问题后由教师答疑,编写实验报告,最后由教师批改实验报告。在这个过程中,我们发现一个问题。由于现在的教材编订,许多的实验内容都有标准的答案,这样容易造成学生在实验课程中,按照标准答案写程序,不能使学生的编程思维得到有效的训练。为此,我们对这一教学方法进行了改进。首先在理论课堂上给出下次实践课程的实验内容,要求学生必须先写好实验报告;然后在实验过程中,由邻桌同学对事先写好的实验报告进行调试和批改。这样做的好处是学生事先对实验内容进行预习,并设计相应的程序,同时,学生是带着批判的精神来调试其他同学的程序,激发了学生的学习兴趣,提高了实验课程的学习效率。
(2)以小项目带动实践教学,提高学生编程兴趣。我们提供许多对学生具有吸引力的小项目,如24点游戏、老虎过河这两款游戏,不仅玩起来简单,用c++语言实现起来也简单,这对刚学习计算机编程的学生来说,既有娱乐性,又简单易编程,实现后易有成就感,易增加学习兴趣。在实现这些小项目的过程中,练习和巩固了C++语言的基础知识。另外,我们还设计了与学生的年龄特征及学生生活内容相关的小型系统开发,如课堂点名、签到系统、学生信息管理系统等。在c++语言的基础知识学完之后,需要学习面向对象编程,功能模块增多,难度增加,该类项目与学生的日常生活息息相关,学生对这些项目的各功能模块的流程也非常熟悉。
(3)采用综合设计型实验增加学生团队合作协调能力。通过布置或由学生结合本人的兴趣,从实际应用中选择有具体应用背景的实验题目,安排学生分组共同完成。综合设计型实验的具体内容如下:
①首先将综合设计型实验的题目要求布置给学生,要求学生在选好题目的基础上,认真研究题目的要求,自行查阅有关资料,写出系统的需求分析、总体框架设计,确定小组组长和成员,由小组组长进行任务分配工作。
②小组组长组织系统的需求分析、总体框架设计的讨论工作,将确定的系统详细设计方案交于教师审阅。
③在限定的时间内,组长安排成员完成C++语言的代码设计,完成各个功能单元的实现和调试。
④联编调试,要求把各个功能块联编起来进行调试。
⑤写出相关的系统分析、设计、实现等实验报告和文档。
综合设计型实验建立起以学生为中心的教学模式,这样既锻炼学生的动手能力,也加强他们交流与团结协作的精神,全面提升学生的程序设计与软件开发能力。
2.4 考核方式改革
传统教学模式中,c++理论课程的考核往往只有考试一个环节,显得不太合理。基于之前的改革,笔者对c++程序设计理论课程的考核包括以下几个部分:
平时环节占总成绩的20%,主要考查学生的出勤、作业、课堂表现等;团队表现占总成绩的20%,主要考查学生的团队协作能力;期末考试占总成绩的60%,主要考查学生的基本知识点、程序阅读能力与程序编写能力。
对于实践教学,考核以考查为主,主要考查学生在实践过程中的编程开发能力。实践课程的考核分4个部分,包括:平时环节(占总成绩的20%),实验过程(占总成绩的40%),实验报告(占总成绩的20%),团队协作(占总成绩的20%)o
3、结语
程序设计课程的教学目的是通过一门程序设计语言的教学,使学生掌握程序设计思维,包括基本结构和基本算法等,从而掌握程序设计的一般方法。但c++程序设计课程存在语法复杂、编程灵活、调试困难等问题,再加上开设这门课程时,学生通常属于初学者,容易让学生对这门课程普遍感觉枯燥、难懂。
注:本文为网友上传,不代表本站观点,与本站立场无关。