如何上好程序设计类课程
来源:用户上传
作者: 周 宣 谷征峥
摘要:本文在算法基础上,提出了编程和调试的章法理念。结合汇编语言综合编程练习内容,从讲授和实验两个方面专门安排了章法训练练习,强化了学生对程序设计方法的能力训练,取得了显著效果。
关键词:程序设计课程 教学方法 章法
引言
程序设计类课程的主要教学内容是算法、数据结构、程序设计方法及语言运行环境。语言环境学生都能掌握,算法解决问题的细节和编程思路,数据结构和算法密不可分。一般程序设计教材中都对典型问题的算法及其数据结构提供丰富的示范程序,学生也比较容易理解和掌握;而程序设计方法是解决复杂问题的宏观编程思路。目前各种程序设计教材中,在介绍了程序三种基本结构和典型算法例题后,都会给出几个综合例题,但普遍缺少详细、具体的分析设计过程,特别是缺少上机调试步骤的具体介绍。学生普遍反映“例题程序老师讲时明白,例题也看得懂,但自己一做题就感觉无从下手”。上机调试运行时一旦出错就束手无策,不知从哪查起,只好等老师帮忙。我认为之所以出现这种普遍现象,是因为学生没有掌握程序设计及上机调试的章法,应在教学过程中加强培养和训练。
一、基本方法
我在教学过程中主要从以下几个方面入手:
1. 明确学习目的、培养学习兴趣告诉学生学好编程不仅可以解决在软件使用中所遇到的问题,改进现有软件,还可以为自己找到一份理想的工作添加重要的砝码,有利于在求职道路上谋得一个好的职位;学习编程还能锻炼思维,使我们的逻辑思维更加严密;能够不断享受到创新的乐趣,将一直有机会走在高科技的前沿,因为程序设计本身就是一种创造性的工作。知识经济时代给我们带来了无限的机会,要想真正掌握计算机技术,有所作为,具有一定的编程能力是一个基本条件和要求。
2. 培养学生的主动探索意识讲完每个例题,引导和鼓励学生进行拓展延伸的思考,例如讲完求“给定100个数中正数的个数”例题后,特别是在上机实验的时候不要只满足于把给定程序运行通过,更要敢于和善于进行局部改动,观察效果,加深理解。例如程序改为“求负数的个数”、“求小于60的数的个数”如何改动?
3. 强调算法的一般性讲授完每个典型算法,都要以类比的形式列出几个同类型的问题。比如C语言课程中讲完自然数1~10的累加算法例题以后,引导学生思考:要实现1~100的累加应该改动哪里?1~10的累乘如何实现?提醒学生不要死记硬背具体的程序,要重视掌握算法思想,学会举一反三。
4. 学会总结归纳积累要求学生在笔记本上进行典型算法的归纳总结,对例题中展示的处理技巧(根据合法性判断、回车的判断、输出格式的控制)收集整理。特别提醒大家要把算法的设计表达和算法用某种语言实现区分开来。提出掌握算法的标准,能用自然语言把处理步骤表达清楚。
5.课程进行到综合例题阶段,在课堂上要拿出专门时间进行编程和调试方法的章法讲解示范,并安排相应的实验内容进行体会和巩固。
本文主要介绍我在最后一个方面所做的尝试,以和大家交流。
二、综合编程训练中的章法训练
课程进行到综合练习题阶段,要向学生强调掌握章法的重要性:“做什么事都要有章法,书法家写字有章法、画家绘画有章法、编写和调试复杂大程序也是有章法的。不会编程的人面对复杂大程序无从下手,而掌握了编程章法的人则能从容应对,有条不紊。”
所谓编写程序和调试程序的章法,其核心就是“逐步”二字。告诫学生,编程和调试千万不可追求一步到位、幻想一气呵成,而是要学会对题目要求的功能进行分解或简化,化整为零、化繁为简,各个击破,逐步完善。综合编程题其实就是简单算法的综合运用:有的是简单算法并列;有的是简单算法嵌套;或者是既包含简单算法的并列、又包含简单算法嵌套。简单算法并列的题目适合采用自下而上、逐步完善的章法,就是把题目中并列的功能分开考虑,从一个功能做起,实现后增加新的功能,最终实现全部功能。简单算法嵌套的题目适合采用自顶向下、逐步细化的章法先忽略细节要求实现整体轮廓,然后补充细节,最终达到题目要求。上机调试,也提醒学生采用与编程相同的思路,分步编程和调试,这比整体调试更便于发现出错的环节和原因,效率更高。
有了以上认识上的重视和统一,就可以结合实例进行编程和调试的讲解示范。可以选择一两个典型习题,为学生演示如何对题目的总体要求进行分解或简化,具体指出第一步先实现什么功能、第二步补充到什么程度、第三步……最终实现全部要求(在这里可以顺便介绍一些有关电子电路、工业流水线的安装调试过程,使学生了解程序设计思路其实也是工程上普遍采用的)。
采用这样的方法以后,学生在一次实验课上(95分钟)基本上都可以完成一个难度较大的综合性练习题,而且普遍反映这样的实验收获很大,不仅知道了复杂大程序是如何逐步完善出来的,同时程序调试能力也有了一个飞跃。总之学生对编程有一种豁然开朗的感觉,同时信心增强、兴趣提高。
三、综合练习题实例
下面以笔者在汇编语言程序设计教学中的一个综合习题说明讲解过程。在学完分支和循环结构之后,同时已经讲解了以下基本例题:
1.把一个百分成绩按五级分,统计在哪级的程序(分支的典型例题);
2.把BL寄存器的内容转换为ASCII码(十六进制数转换为ASCII码);
3.显示一个字符的功能调用(强调回车符和换行符的特殊性);
4.显示字符串的功能调用。
这时给出题目:将我班汇编语言的百分成绩,变成按5分制(优、良、中、及格、不及格)形式并统计每级人数,同时将结果显示为如下表格形式。(其中XX表示该段的人数)
这个题目属于分支统计、数据转换和字符显示等简单算法的并列。讲课时采用先把题目分解为以前讲过的几个简单问题,依次逐个实现每个功能,最终实现题目要求。向学生展示自下而上、逐步完善的过程和思想。可以引导学生思考以下问题:
1.以前我们学过“把一个百分成绩按五级分,统计在哪级的程序”,现在是统计我班(50人)的汇编成绩,如何统计分级?学生立刻意识到只要把统计一个成绩的代码循环50次即可(提示:要预先在数据段中成绩变量中定义50名同学的成绩)
2.要想将每级的人数显示出来,需要调用字符显示功能。提示学生思考:字符显示只能显示什么?学生立刻意识到这首先要把十六进制数转换为ASCII码才能正确显示。(转换方法我们前面介绍过了,是固定的)我们只要依次把统计得到的优、良、中、及格、不及格的人数传给某寄存器(如BL),转换后显示即可。
3.如何实现每级人数单独显示在一行?学生根据前面所讲,大部分知道,应该用显示1个字符的功能调用输出回车符和换行符,实现换行目的。对于每级的提示(如A=),只要在显示优的人数前先显示字符“A”和字符“=”,显示完优的人数后显示字符“H”。
4.对于表格的行线,怎么实现?(提示:可以先用减号构成字符串,通过字符串功能调用实现。)
在以上详细引导和提示之后,进一步说明完善的思路:通过显示空格使数据居中对齐,每级人数前后用“|”作为表格的列线等。
通过对题目的分析,学生已经对该题心中有数,可以进一步说明,程序写出来可能比较长,但都是简单代码的“罗列”,大程序其实都“不过如此”。
最后告诉学生,这个题目是下次实验课的练习内容。要求学生严格按照讲课示范的一个成绩统计――50个成绩统计――显示统计结果――控制显示格式――显示提示字符――显示表格线等步骤进行实验预习及输入调试,教师在实验课上按步骤检查结果。实践表明,90%以上的同学都能在规定的时间内顺利完成题目要求,表示收获很大。
结束语
程序设计方法的训练,应该贯穿程序设计课程的全过程。实践证明,在课程进行到一半左右的时候,专门突出进行一次编程和调试章法的讲解和训练,能够使学生的编程调试能力显著提高,使学生的学习兴趣和自信心显著增强,对整个课程的顺利进行将起到重要作用。
参考文献:
[1]沈美明,温冬婵.IBMPC汇编语言程序设计(第2版).北京:清华大学出版社,2005.
[2]李兰.如何提高学生的编程能力[J].职业教育与研究,2004/08.
[3]朱勇,王桂红.论培养学生综合编程能力的几点思考[J].农业网络信息,2005/09.
转载注明来源:https://www.xzbu.com/9/view-900775.htm