C语言程序设计教学与执行过程的可视化探讨
詹重咏
【摘 要】 本文探讨了C语言教学的特点,研究学生学习面向过程语言的难点所在,给出了化繁为简的方法,达到了让学习者能从多方面龟探面向过程语言程序内部奥妙的目的。
【关键词】 面向过程;程序设计;教学方法;可视化
【中图分类号】 G64.20 【文献标识码】 A 【文章编号】 2095-3089(2017)13-00-01
一、引言
C语言作为面向过程语言中的代表,以其自身的突出特点,几十年来,一直被大多数大学理、工、农科专业列入教学计划中,同时它也是计算机专业作为学习计算机语言的入门和进一步学习的首选语言。但由于C语言数据类型较多、语法结构较复杂、过程处理抽象,学习者多无计算机语言或编程方面的知识或经验,从而使得它成为一门教师难教、学生难学的课程。对C语言的教学探讨从未停止过。如何搞好此门语言的教学,培养学生的学习兴趣,激发学生的学习热情,掌握面向过程语言的精华,一直是广大一线教师孜孜探求的内容。关于此方面的讨论不绝如缕,但绝大多数文章多从课程设置、教学安排、教学重点(难点)的处理等方面着手[1],或从待解决的事情本身的特征入手,进行初步的研究,如断点设置等[2]。少有从可视化的角度引导学生认识问题、分析问题、解决问题的文章。本文试以C语言为例,用过程观察者的角度,就面向过程的计算机语言教学、程序执行过程的可视化问题进行初步的探讨。
二、面向过程的计算机语言程序执行过程可视化的概念
近几年来,可视化的计算机语言之所以倍受人们的青睐,而其最大的特点是学生或程序员在工作过程中的成果是可见的,这样学生在开发的过程中就能感觉到自己工作的部分成果,看到程序执行时的部分界面,从而提高增强学生的成就感,提高学生的学习兴趣。更重要的是以此断续的界面为出发点,人们就可以通过自己的思维加工,将所有的情景贯穿起来,形成一个整体的、完整的事物。
C语言作为面向过程的语言,用它编写的程序,一般情况下提供给人们可见的东西只是程序的执行结果。但其结果为何如此?正确与否?多靠學生对程序规定的过程进行分析、推演才能知晓,整个过程枯涩无趣。如何吸引学生、调动学生兴趣、加深学生应象呢?常言说“百闻不如一见”。如果能够像可视化的计算机语言一样,让学生亲见、亲历程序的执行过程,结果肯定是大不一样的。但是,过程的亲历必须是在过程运作执行的时候,这样就只能在程序运行的时候来观察程序的特征变化情况了。这一点上语言执行过程的可视化与可视化的计算机语言及现在流行的科学计算可视化、数据可视化、信息可视化的概念不完全一致,前者是一个动态的概念,而后者却是一个静态的概念;前者展现的是数据本身,面后者展现的却是抽象数据的图形式还原或表现。相比面向语言执行过程的可视化与视频的概念更接近一些,但前者多是指数据的可见,而后者却是经过图形化处理的连续场景;前者处理的对角有限,而后者处理的是场景中的所有事物。
三、可视化的对象
总结面向C语言程序执行过程,开发者常关心的对象主要有如下几种:变量、数组、指针值、过程或函数。
1、变量、数组、指针值
程序中内存变量的值及其地址、用内存变量及其表达式组成的逻辑表达,这些是初学C程序设计语言的学生感受到困惑、作模不定的地方,将其内容展示在学生面前,对分析程序、理解程序大有裨益。
数组是C语言中常用的一种结构形数据,数组名、数组元素的值是多少,在内存中的位置如何,对它的准确掌握十分必要。
指针是C语言程序中最变幻莫测的一个概念[3],其地址、其值及其值的性质或类型是初学者常常关心的东西,对这些内容的展现将有助于掌握指针的实质。
此外程序中的其它结构形数据也是使用或学习它的人关心的内容。
2、过程或函数
函数或过程是对面向过程的计算机语言程序的划分,划分的结果是使程序的可读性增强,复用性增加,程序的难点得以分解,使用好函数是十分重要的。对函数来说,函数名(函数地址)、函数内定义的临时变量、函数中使用的全局变量、函数的值、函数的退出点等都是学习或使用C语言的人关心的东西,也是可可视化的对象。
四、可视化的方法
针对关心的对象,教师可让学习者采取如下方法将其可视化。
1、输出函数法
用输出函数(如C语言的printf()函数)实现面向过程的计算机语言程序的可视化是一种有效的手段,以下以C语言为例简述之。
首先在程序的头部定义变量DEBUG,如define DEBUG;其次定义好条件编译语句:#ifdef DEBUG 输出信息程序段 #endif,然后将条件编译语句插入到程序中适当的地方,最后在语句块中放置printf()函数及需观察的对象或对象的地址。
2、用Keil μVision 4.0作学习平台
目前C语言的学习多是以Turbo C 4.0或Visual C++作为常用平台,这种平台的使用简单,初学者容易掌握,但不足之处是没有变量窗口,学习或开发者在使用过程中观察不到关注对象的变化。而Keil μVision平台却可以部分解决此类问题。具体方法是将C程序中的关注的对象的值或地址赋给某变量,而将此变量指定为一个寄存器。这样就可以在Keil μVision 4.0平台的寄存器窗口上观察此变量了。
若要观察程序编译后的运行码,在内存中存放的情况,可选取菜单View→Memory windows→Memory1,或按右下方的Memory1,然后点击Addresss栏内输入0x800或0800h,则可在Memory1窗口查看[4]。
3、巧用Microsoft Office Excel
微软公司的办公自动化软件Excel是一项功能强大的实用软件,其工作簿上的每一个单元格对象恰于一个电子细胞,将其组合在一起时其作用为可限量。利用Excel,将其列的单元格(或行的单元格)用作变量,设置好变量的步长,拖动相应区域,完成计算工作(模拟程序),在对应的单元格中即可观察到变量等运行的结果,亦即可以实现单迭代程序的可视化。
计算机语言与其它课程相比,逻辑思维较强,因此比较枯燥。要教好计算机语言,关键在于激发学生的学习兴趣,将准备学生感兴趣的教学素材包括程序作为备课的一个重要内容是激发学生学习兴趣的重要环节,在教学过程中要坚持学生为主体、教师为主导的教学原则,充分利用各种不同的教学法和上机课,强化实践,提高学生的思维和实践能力,培养学生的兴趣,让学生主动、愉快地学习,才能取得良好的教学效果。
五、结语
上述讨论的可视化对象,只是C程序设计和C语言教学中的部分内容,所提供的可视化方法也只是引玉之砖。在课程教学过程中,只有通过不断的分析、探索和研究才能找出更好的解决方案。
参考文献:
[1] 章英. 高等农业院校《C语言语言程序设计》教学探讨[J]. 电脑知识与技术. 2008.5 910~912.
[2] 程霄, 张丽芬. “程序设计实习”课程教学研究与探索[J]. 教育与职业, 2008.5.中 102~103.
[3] 张敏霞. 程序设计语言教学方法改革的探索与实践[J]. 中国高教研究, 2004.2.
[4] 丁向荣, 陈崇辉, 姚永平. 单片机原理与应用[M].北京:清华大学出版社,2015.8