石光华
如何解决工程环境下的结构化编程问题,是高职计算机类专业“面向结构程序设计”课程改革的基本任务。四年来,作者一直在教学第一线进行课程改革,深刻认识到高职教材在指导思想、教学内容、实训设计等诸多方面必须进行大胆的改革与创新。本文具体论述了教材改革创新的思路与实践。
创新的指导思想
高职计算机专业学制短,技能要求高,而大部分学生的抽象思维能力较差,要达到“因材施教,提高技能”的目标,《面向结构程序设计》教材必须在如何裁剪知识点,构建结构化编程的工程应用框架方面进行创新。经过四年的探索,我们确立了与传统的《C语言程序设计》完全不同的定位,明确了高职教材的“四个特点”:
(1)高职的C语言不是“C语言语法大全”
传统的C语言教材把C语言本身当成研究的对象,总是试图面面俱到地讲解C语言的方方面面,不适合高职使用。我们本着一切以工程实用为原则,围绕构建结构化编程的工程应用程序框架的目标,通过建立函数框架、主程序框架到应用程序框架,以案例驱动的方式,具体讲解了工程应用程序的编写过程。
(2)高职的C语言不是“数据结构基础”
传统的C语言教材,把C语言的学习和“数据结构”的内容结合起来,这样的结果是把C语言的学习引向解决抽象的数据结构问题,对高职的学生来说,老师教得辛苦,学生学得痛苦,因此,我们去掉了排序、链表等比较抽象算法的讲解,增加了使用“状态变量”控制程序功能、用户身份识别、动态数组使用、文件读写错误处理等实用内容。
(3)高职的C语言不是“程序设计基础”
传统的C语言教材承担了讲解“程序设计基础”的任务,这样的结果是没有时间讲解C语言中比较深入的技能。因此直接从建立函数框架开讲,强化用函数实现结构化编程的方法,可以让学生学到工程应用的技能。
(4)工程化的编写风格
对全书所有的案例和例题必须进行通盘的考虑,在循环、数组、指针、函数和结构化设计等单元,所有的例子都有前后的联系,强调内容的前后衔接,特别注意工程规范的引入,在变量的命名、程序格式方面,均按工程要求进行。
适用的技能与内容
根据在企业工作的实际经验,把要求学生掌握的C语言的基本技能,归纳为“八个掌握”:掌握C语言程序的基本结构;掌握编写并使用自定义函数的方法,能够使用系统函数;掌握一维数组在字符处理中的应用;掌握对一维、二维数组进行遍历的方法;掌握使用指针进行一维数组遍历的方法;掌握使用动态结构数组的方法;掌握使用文件保存数组数据的方法;掌握主程序中使用函数建立功能模块的方法,能用流程图描述简单问题的算法,能够根据流程图和算法,编制出相应的C语言程序。
“八个掌握”构建了学生使用C语言的基本技能,这些技能不是孤立的讲解,而是贯彻到案例设计的“三结构”、“四循环”中。
“三结构”是指学生要学习三个成绩管理软件的编程,分别是基于一维数组、二维数组和动态结构数组。选择数组作为基本的数据结构,一方面是贴近学生的认知水平,二是可以保持适当的连贯性。
“四循环”是指编写基于“三结构”的每一个成绩管理软件过程中,教材中提供四个以上的程序版本,引导学生改写、增加函数,并采用工具软件Beyond Compare,比较不同的程序版本之间的差异,让学生直观地看到软件的功能是如何一步一步构建起来的。通过不断反复的比较,学生就可以掌握结构化程序设计的过程和方法。
为了帮助学生掌握C程序的基本结构,在教材中还提出了两个创新:
(1)通过定义预处理区、变量声明区、执行语句区“三大区域”为特色的C程序的基本框架,让学生树立正确的程序格式与规范。
我们提出把一个基本的C程序从上到下分成三个区域。预处理区域:用于书写程序相关的预处理文件;变量声明区域:用于书写变量的声明;执行语句区域:用于书写执行语句。
这三个区域的顺序不能交换,只能是按规定的顺序书写,而程序也是按这个顺序执行。
“三大区域”概念的提出,明确规定了程序的基本框架,让学生从一开始就按固定的格式进行编程,养成良好的编程习惯。
【例1】程序的基本框架,如图1所示。
通过在变量声明区域定义要用的变量,在执行语句区域书写计算方法,程序就可以完成不同的功能,程序的基本结构并没有变化。事实上,我们要求学生以后写程序,都要在这个基本框架上进行改写。
(2)提出了使用函数的“三大步九要素”的基本方法,让学生掌握函数完整清晰的概念。
结构化程序设计的核心是函数的使用,正确使用函数,特别是使用自定义函数涉及的知识要点很多,在C语言中函数的书写又很灵活,这种灵活性对初学者来说并不是好事,往往让人找不到规律。我们提出的使用函数的“三大步九要素”的基本方法,在教学中取得了很好的效果。
【例2】程序使用函数的基本框架,如图2所示。
所谓“三大步”,是指我们在使用自定义的函数时,应该按【例2】所示的框架,对函数进行声明、定义和调用。三大步的顺序不要搞错。
所谓“九要素”,是指函数声明的三要素:返回值的类型、函数的名字、参数的类型和参数的个数。函数定义的三要素:参数、功能、返回值。函数调用的三要素:名字、参数、返回值。通过对“九要素”的理解掌握,学生能够建立起使用函数的清晰框架。
在案例选择上,全部采用工程实际和实际生活中的案例。例如,选择执行语句,在讲解了条件的表达方式后,我们只讲三种情况的处理:1)单项选择语句 if (条件)语句;2) 双项选择语句if (条件)-else语句; 3) 多项选择语句switch-case语句。讲解条件的表达时,则强调把生活中的要求转化为程序中的语句,不再是传统的 if(a > b)。
例如:如果晚上6点(包括6点)以后或者气温低于18度,我就加衣服。
如果我们用time来表示时间,用temperature来表示气温,那我们可以这样来写:
if((time >= 18)||( temperature < 18))printf(“adding dresses!”);
经过这样的训练,引导学生用程序来表述和解决生活中的问题。在教材的编写中,始终抓住这一点:以教育心理学中的联结学习理论为指导思想,采用不断改写程序的办法,总是从实际问题入手,通过提出问题、讨论解决方法、实际动手解决、分析不同的解决方案来总结提高,各个环节环环相扣,通过反复练习与强化,让学生在旧知的基础上探索新知,在新知的不断探索中获得学习的快乐。
工程化的实训设计
结构化程序设计的教学中,如何让学生建立起结构化程序的框架,理解主函数和功能函数的不同作用是很困难的。一个简单的成绩管理软件,代码就超过300行。对初学者来说,看懂超过100行的程序就需要很长时间,又如何在短短的课堂时间里,让学生通过增加/改写函数来增加功能?这也就是很多学生学完了C语言程序设计,依然不能编写一个简单的应用程序的主要原因。
我们按照案例设计的“三结构”、“四循环”原则,设计了12个实训项目,每个项目发布一个程序版本,并在教材附送的光盘里,提供了全部程序的电子版本和相应的工具软件Beyond Compare,学生可以方便地比较不同的程序版本之间的差异,直观地看到软件的功能是如何一步一步构建起来的。程序的第一个版本,就是一个主函数,不超过10行,只显示程序的几项功能菜单,学生很容易理解。然后通过发布第二个、第三个版本,每一个版本实现或改进一个菜单的功能,直到最后版本。
对高职学生的技能培养,实训是很重要的环节。我们采用了项目驱动的思想来设计实训项目,每一单元的实训,都是构成最终程序的不同版本,在教材中共发布程序版本12个,构成了实用的软件框架。学生相当于参与了一个中等复杂程度的软件开发,积累了经验。在今后的实际工作中,完全可以以此为模板,进行结构化程序的开发。
在《C语言程序案例教程》的课程设计中,学生对主函数与模块函数的理解更加深入,可以看懂超过300行的C语言源程序,理解基于动态结构数组的成绩管理系统,掌握主函数的设计方法,并按照工程规范的格式写出自己的函数。回想在三年前没有进行改革的时候,只要是超过10行的程序,学生就普遍反映看不懂,学生编程能力的提高十分明显。