程序设计课程教学探讨

时间:2022-10-14 01:36:10

程序设计课程教学探讨

摘 要:本文从程序设计课程教学现状出发,提出了程序设计教学中需要从编程方法、编程风格及规则的引导出发,在重视算法教学的基础上,引导学生在程序设计过程中开展研究性学习,从而提高程序设计的质量。

关键词:程序设计 教学 算法

程序设计是我国高校各专业学生必修的一门核心课程,该课程的教学目的是使学生掌握程序设计的基本方法和理论,应用某一程序设计语言编写具体的程序。程序设计的教学质量将影响到学生的程序设计能力,影响到学生创新思维的培养。

一、程序设计课程教学现状

“程序设计”课程长期沿袭传统教学模式,即以一种高级语言的语句体系为脉络展开教学,详细地讲解其语句、语法甚至一些细节内容,学生每学习一个语句需要做一些与该语句有关的习题。课程枯燥无味,学生学习积极性不高,很少动手实践。课程学完后,学生除了学到一些呆板的语句外,收获甚微。

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卷.

注:“本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。”

本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文

上一篇:浅析信息技术课程与其它课程的整合 下一篇:中学生跳远运动损伤原因的调查和实验性研究