论文部分内容阅读
摘 要:程序设计基础是软件工程专业一门重要的基础课,它以计算机语言为基础,以程序设计逻辑和思想为导向,运用特定的算法进行程序设计与专业素养的培养。该课程具有很强的理论性与实践性,因此需要任课教师采用一定的教学方法,加深学生对理论的理解与应用,激发学生的学习热情,达到高效的教学目的。
关键词:指针 程序设计 算法 程序自动评测
中图分类号:G642 文献标识码:A 文章编号:1674-098X(2011)01(b)-0167-01
“程序设计基础”是软件工程专业本科生开设的第一门专业课,这门课程对于计算机类专业来说是一门历史悠久的基础课,其授课内容从最初的非结构化BASIC,到后期的结构化PASCAL、C语言,授课的思路与方式随着计算机领域软、硬件的推陈出新,也悄然发生着变化。从授课方式上,从黑板加粉笔转换为以多媒体为主要教学媒介的现代教学技术与手段自不必说了;以C为语言基础的程序设计,也通过一门优秀的程序设计语言为编程设计打开了一扇广阔之门。
该门课程对于学生专业素养的培养和专业思维的导向具有一定的指导作用。在该门课程的授课之中,我有以下的一些体会和心得。
1 讲透指针与指针的运用
程序设计类课程犹如学习写作艺术,首先要对所用语言的语法规则了如指掌,然后才能在此基础上提升到艺术的高度。C语言作为一门程序设计语言,本身具有可移植性强、执行效率高等特点,既可以作为应用软件,也可以作为系统软件的开发工具。而在C语言的学习和使用中,指针可以说是其特色和精华所在,它和数组、字符串以及函数间的数据传递有着密不可分的联系,且在某些场合,指针是解决运算的唯一途径,它可以有效的表示和实现复杂的数据结构。
指针是与计算机系统内部密切相关的一种处理形式,指针的概念不直观,学习起来难度较大。首先引入“地址”的概念,这个“地址”就是变量所占存储单元的第一个字节的地址。其次,要区分指针和指针变量这两个概念:指针即地址;而指针变量是用于保存某一具体数据类型变量地址的特殊变量,重点它是一个变量。有了这个基础以后,才可以顺其自然地引出指针运算以及指针与数组、指针与函数等两两关系的介绍。
在这部分内容中,要强调几个指针运用中须注意的地方:(1)在引用一个指针变量前必须让该指针指向一个变量;(2)区分指针的类型和指针所指向的类型;(3)指针的算术运算只对数组的应用是有意义的,且运算结果不能超出数组的范围;(4)作为指针常量的数组名和指针变量的区别。最后,有几个引申概念是难以理解和掌握的:指针数组、数组指针及指向指针的指针,也就是所谓的二级指针。
在这里,我运用一种对比记忆和理解的教学方法:先给出各个概念的定义及其语法,在理解概念的同时区分语法格式上的差别;然后结合具体问题的讲解,使学生对其各自的应用有实质上的理解;最后总结出其实质与共性。
2 归纳总结程序设计算法
程序是为实现特定目标或解决特定问题而用计算机语言编写的,可以连续执行并能够完成一定任务的指令序列的集合[1]。瑞士计算机科学家尼克劳斯·沃思(Niklaus Wirth)曾提出“程序=数据结构+算法”这一著名公式,数据结构是对程序中数据流或者说数据组织形式的描述,在语言基础中我们介绍了C语言的数据类型和数据结构及其基本的使用方法;算法是对程序控制流的描述,即对数据所进行操作的步骤。数据和算法之间的对立统一体现了程序要处理数据对象与处理数据对象方法之间的关系。算法脱离于语言之外,具有通用性,是程序设计的灵魂;所以说程序设计基础这门课,除了打下坚实的语言基础以外,还要分类介绍一些常用的基础的程序设计算法:比如多项式的求和与求积运算、遍历或穷举求解、数列的排序问题以及矩阵运算等等。
分类讲解这些算法的时候,结合授课过程中遇到的例题、习题,以及本节课给出的更具代表性的实际问题或具体应用,首先把各个算法的含义讲解清楚,然后分步骤地给出各算法的设计思路;对于同类问题,比较不同的算法的空间与时间利用效率,从而总结更适用于哪些情况,这样对后继课程“算法分析与设计”也起到一个入门和先导的作用。
与依靠记忆的课程不同,程序设计基础是一门理解性和实践性非常强的课程,也是一门知识和能力并重的课程。因此,对于语言运用与算法的掌握,不可能仅仅依靠老师的讲解与学生的思考,还需要引导学生借助所学语言与计算机这两种软硬件工具自行实践该算法,变被动为主动,加深对抽象知识的理解与运用,从而引发对更深层次问题的思考与讨论。
3 引入自动化程序评测系统批改学生作业
现在已有不少学校采用由计算机进行编程作业评判的方式来对学生的作业进行考核。但更多的情况下是学生的编程作业通过FTP,Email甚至是纸质的方式提交给老师,由老师对程序以及程序的相关文档进行阅读和评判,其繁重的工作量和低效率的教学方式对于程序设计课程非常不适宜。在高等院校的教学中,计算机方面的课程,特别是程序设计语言课程,具有实践性特别强的特点。因此,采用计算机对程序直接进行评判是一种智能化的高效的教学手段。
采用程序在线评测系统后,老师可以通过对参数进行设置,限制学生提交的编程作业的类型、文件大小、运行时间长短和空间大小。学生在提交编程作业的时候能很快地得到作业是否正确的反馈。一方面,程序在线评测系统可以对作业进行自动编译,检查出程序是否存在语法错误;另一方面,它还能验证程序是否能得到正确结果,以及所花费的代价(时间和空间上的)。根据后处理的结果与相应的参数设置,程序在线评测系统能自动给出学生此次编程作业的成绩。这大大地减小了学生提交错误程序的概率,还能给出与程序相应的成绩。当然老师也可以进行再次审查,对学生的作业提出评语,修改成绩等。
这种方式完全模拟了使用程序设计语言解决实际问题的过程,编写程序、不断测试修改、根据结果反馈修改程序。这样的考试方式对学生的学习过程具有很好的指导作用。与此同时,还消除了老师在检查作业的过程中的主观因素,增加了学生之间的公平性。
4 结语
经过教学过程的实践与学生反馈,引入研究性的这种教学方法和互动的教学过程收到了良好的效果,经过调查86%的学生接受并且对这种教学方式感兴趣;因为他们在理解相关理论的同时,不仅做到“知其然知其所以然”,而且把它们运用到实际问题当中,并且在解决问题的过程中及时得到反馈,增强了他们解决问题的热情,从而提高了学习效率。
参考文献
[1] 高克宁,李金双,赵长宽,等.程序设计基础[M].北京:清华大学出版社,2009:3~27.
[2] 张玉清,王群.“算法分析与设计”教学方法探索[J].中国地质教育,2006(4):119~120.
[3] 段岩,尹立杰,等.C语言程序设计的教学技术整体性的应用研究[J].中国地质教育,2006(3):49~51.
[4] 高阁.C语言指针教学的研究与探讨[J].机电产品开发与创新,2010(1):185~186.
关键词:指针 程序设计 算法 程序自动评测
中图分类号:G642 文献标识码:A 文章编号:1674-098X(2011)01(b)-0167-01
“程序设计基础”是软件工程专业本科生开设的第一门专业课,这门课程对于计算机类专业来说是一门历史悠久的基础课,其授课内容从最初的非结构化BASIC,到后期的结构化PASCAL、C语言,授课的思路与方式随着计算机领域软、硬件的推陈出新,也悄然发生着变化。从授课方式上,从黑板加粉笔转换为以多媒体为主要教学媒介的现代教学技术与手段自不必说了;以C为语言基础的程序设计,也通过一门优秀的程序设计语言为编程设计打开了一扇广阔之门。
该门课程对于学生专业素养的培养和专业思维的导向具有一定的指导作用。在该门课程的授课之中,我有以下的一些体会和心得。
1 讲透指针与指针的运用
程序设计类课程犹如学习写作艺术,首先要对所用语言的语法规则了如指掌,然后才能在此基础上提升到艺术的高度。C语言作为一门程序设计语言,本身具有可移植性强、执行效率高等特点,既可以作为应用软件,也可以作为系统软件的开发工具。而在C语言的学习和使用中,指针可以说是其特色和精华所在,它和数组、字符串以及函数间的数据传递有着密不可分的联系,且在某些场合,指针是解决运算的唯一途径,它可以有效的表示和实现复杂的数据结构。
指针是与计算机系统内部密切相关的一种处理形式,指针的概念不直观,学习起来难度较大。首先引入“地址”的概念,这个“地址”就是变量所占存储单元的第一个字节的地址。其次,要区分指针和指针变量这两个概念:指针即地址;而指针变量是用于保存某一具体数据类型变量地址的特殊变量,重点它是一个变量。有了这个基础以后,才可以顺其自然地引出指针运算以及指针与数组、指针与函数等两两关系的介绍。
在这部分内容中,要强调几个指针运用中须注意的地方:(1)在引用一个指针变量前必须让该指针指向一个变量;(2)区分指针的类型和指针所指向的类型;(3)指针的算术运算只对数组的应用是有意义的,且运算结果不能超出数组的范围;(4)作为指针常量的数组名和指针变量的区别。最后,有几个引申概念是难以理解和掌握的:指针数组、数组指针及指向指针的指针,也就是所谓的二级指针。
在这里,我运用一种对比记忆和理解的教学方法:先给出各个概念的定义及其语法,在理解概念的同时区分语法格式上的差别;然后结合具体问题的讲解,使学生对其各自的应用有实质上的理解;最后总结出其实质与共性。
2 归纳总结程序设计算法
程序是为实现特定目标或解决特定问题而用计算机语言编写的,可以连续执行并能够完成一定任务的指令序列的集合[1]。瑞士计算机科学家尼克劳斯·沃思(Niklaus Wirth)曾提出“程序=数据结构+算法”这一著名公式,数据结构是对程序中数据流或者说数据组织形式的描述,在语言基础中我们介绍了C语言的数据类型和数据结构及其基本的使用方法;算法是对程序控制流的描述,即对数据所进行操作的步骤。数据和算法之间的对立统一体现了程序要处理数据对象与处理数据对象方法之间的关系。算法脱离于语言之外,具有通用性,是程序设计的灵魂;所以说程序设计基础这门课,除了打下坚实的语言基础以外,还要分类介绍一些常用的基础的程序设计算法:比如多项式的求和与求积运算、遍历或穷举求解、数列的排序问题以及矩阵运算等等。
分类讲解这些算法的时候,结合授课过程中遇到的例题、习题,以及本节课给出的更具代表性的实际问题或具体应用,首先把各个算法的含义讲解清楚,然后分步骤地给出各算法的设计思路;对于同类问题,比较不同的算法的空间与时间利用效率,从而总结更适用于哪些情况,这样对后继课程“算法分析与设计”也起到一个入门和先导的作用。
与依靠记忆的课程不同,程序设计基础是一门理解性和实践性非常强的课程,也是一门知识和能力并重的课程。因此,对于语言运用与算法的掌握,不可能仅仅依靠老师的讲解与学生的思考,还需要引导学生借助所学语言与计算机这两种软硬件工具自行实践该算法,变被动为主动,加深对抽象知识的理解与运用,从而引发对更深层次问题的思考与讨论。
3 引入自动化程序评测系统批改学生作业
现在已有不少学校采用由计算机进行编程作业评判的方式来对学生的作业进行考核。但更多的情况下是学生的编程作业通过FTP,Email甚至是纸质的方式提交给老师,由老师对程序以及程序的相关文档进行阅读和评判,其繁重的工作量和低效率的教学方式对于程序设计课程非常不适宜。在高等院校的教学中,计算机方面的课程,特别是程序设计语言课程,具有实践性特别强的特点。因此,采用计算机对程序直接进行评判是一种智能化的高效的教学手段。
采用程序在线评测系统后,老师可以通过对参数进行设置,限制学生提交的编程作业的类型、文件大小、运行时间长短和空间大小。学生在提交编程作业的时候能很快地得到作业是否正确的反馈。一方面,程序在线评测系统可以对作业进行自动编译,检查出程序是否存在语法错误;另一方面,它还能验证程序是否能得到正确结果,以及所花费的代价(时间和空间上的)。根据后处理的结果与相应的参数设置,程序在线评测系统能自动给出学生此次编程作业的成绩。这大大地减小了学生提交错误程序的概率,还能给出与程序相应的成绩。当然老师也可以进行再次审查,对学生的作业提出评语,修改成绩等。
这种方式完全模拟了使用程序设计语言解决实际问题的过程,编写程序、不断测试修改、根据结果反馈修改程序。这样的考试方式对学生的学习过程具有很好的指导作用。与此同时,还消除了老师在检查作业的过程中的主观因素,增加了学生之间的公平性。
4 结语
经过教学过程的实践与学生反馈,引入研究性的这种教学方法和互动的教学过程收到了良好的效果,经过调查86%的学生接受并且对这种教学方式感兴趣;因为他们在理解相关理论的同时,不仅做到“知其然知其所以然”,而且把它们运用到实际问题当中,并且在解决问题的过程中及时得到反馈,增强了他们解决问题的热情,从而提高了学习效率。
参考文献
[1] 高克宁,李金双,赵长宽,等.程序设计基础[M].北京:清华大学出版社,2009:3~27.
[2] 张玉清,王群.“算法分析与设计”教学方法探索[J].中国地质教育,2006(4):119~120.
[3] 段岩,尹立杰,等.C语言程序设计的教学技术整体性的应用研究[J].中国地质教育,2006(3):49~51.
[4] 高阁.C语言指针教学的研究与探讨[J].机电产品开发与创新,2010(1):185~186.