张红 王小军
摘要:针对高校《C 语言程序设计》在教学过程中存在诸如学生抽象思维能力欠缺等若干问题,提出较为形象的类比的教学模式来帮助学生树立基本的编程思维的教学模式。重点讲解了计算机运行程序时与内存变量之间的相互联系,并借助类比的方法讲述学生编程能力培养的方法——学生编程思维模式化练习,从而达到使学生能够通过使用计算机解决一些较为基础的应用问题的能力。
关键词:C语言;程序设计;编程思维;编程模式; 类比
中图分类号:TP312 文献标识码:A
文章编号:1009-3044(2019)16-0114-03
开放科学(资源服务)标识码(OSID):
Abstract: During the study of C Language Programming students are lack of the abilities of thinking abstractly. A vivid teaching method with analogy to help students in the C programming is proposed. It focuses on two aspects: one is the relationship between the variables in the memory during the processing, and the second is the practice in the thinking of the program schema. With the two practices mentioned above, students can achieve some important abilities in solving practical problems.
Key words: C language; program design; programming thinking; program schema; analogy
1 引言
随着社会各个行业对计算机人才需求的迅猛增加,高校计算机学科的相关专业也成为广大考生填报志愿的热门[1]。同时,在众多的计算机专业基础课程中由于C语言具有程序运行效率高、功能强大、可移植性强及应用广泛等众多特点而成为广大学生选课的首选[2,3]。但在多年的教学实践过程中发现学生在不同程度上存在着对C语言这门课程理论知识的理解不深入、实际应用能力不强等诸多问题。造成这些情况的原因是多方面的,其一,C语言基础内容所涉及的知识点较多,使用起来更加灵活多变,从而使得学生不易掌握其核心要点;其二,学生对程序设计语言的理论知识掌握不扎实,这直接影响到学生的动手操作能力;最后,在教学过程中存在着一些未能遵循学生思维特点进行授课的若干问题。以上几点将导致学生对《C语言程序设计》核心思想的精确掌握,从而极大地影响学生学习该门课程的积极性。
《C语言程序设计》的教学目标偏重于让学生加强对概念和语法规则的掌握,这一指导思想在促使学生对基础知识的掌握中起到了非常重要的作用,但同时也导致了学生在解决具体问题时出现无法灵活运用所学内容的情形。针对出现的这种状况,授课教师在教学过程中应该积极转变教学思路,力求将较为抽象的知识进行形象化地转换,同时要有针对性地培养学生动手练习,切实提高实践操作能力[4-5]。
2 人脑向电脑思维的转换
经过多年的教学实践,笔者发现学生在初次接触程序设计语言時往往需要较长一段时间来进行思维模式的转换。针对这一情况,笔者认为在教学过程中需要解决以下几个方面:
2.1 深刻理解程序的运行方式
目前大多数C 语言教材大致都是按照“输入输出—数据类型—基本语法—函数—数组—指针—结构体—文件”的顺序进行内容编排的,这种内容编排方式是按照逻辑思维形式进行的,但是并不符合学生的认知方式,学生理解起来存在一定的困惑。同时,由于C语言知识点较多的特点以及学生在编程思维方面基础较为薄弱,导致授课教师在课堂上只能以讲授为主,引导学生理解程序的运行方式并动手进行实践的时间较少,结果出现学生只能片面地识记某些知识点,而当面对具体编程问题时显得手足无措,无法将所学知识加以正确地运用,并且这种授课方式与实践操作环节相分离的现象会随着课程的深入推进而显得日益明显。具体而言,学生在编写程序时的思维习惯如图1所示:
举例来说,如果要求两个数的和,给定的两个数分别为a和b(输入),通过求和a+b(处理),得到结果(输出),这是学生的编程思维模式;而针对这样的操作,计算机的处理方式则是如图2所示:
在计算机里所谓的存储就是将需要用到的数值和输出的数值先放到内存相应的“盒子”里。例如如果要求梯形的面积,由数学知识可知梯形的面积公式是s=(a+b)*h/2,所以要进行相关的梯形面积计算只需给出梯形的上底a、下底b和高h即可。而计算机在进行运算时不同于人脑的地方就在于它需要把a、b和h的数值首先存放在计算机内存里(即上文所说的“盒子”),然后再从三个“盒子”里拿出数据放到处理器里面,再根据梯形的面积公式进行计算并得到最终结果,随后将此结果放回到存放面积的“盒子”s里,最后从“盒子”s里读取面积的数值并输出到显示器屏幕上以供用户进行后续处理。上面叙述的面积计算过程可以用以下程序代码来实现:
以上代码简洁清晰,它所体现出的是计算机运行程序的思想,即“输入—存储—-处理—存储—输出结果”的过程。
2.2 存储概念贯穿于C语言学习始终
现实世界中存在着各种不同类型的数据,体现在C语言中,也存在着各种不同的数据类型与之对应。例如较为基本的标准整数类型、实数浮点类型,除此以外还有枚举类型、派生类型、联合类型以及函数类型等。正确的理解与熟练地掌握数据类型是学习C语言的基本功,而函数的编写与调用则能够在较深层面对C语言进行深入地理解与应用。在函数的编写与调用过程中,存储的概念具有重要的地位。从上面的例子中也可以看到存储的概念在计算机程序执行过程中也发挥着重要作用。
我们采用较为形象的类比的方法讲述存储的内容[6-7]。在讲解存储的概念时,如前面所述,可以将存储形象的类比为“盒子”,便于学生在头脑中有个较为清晰的轮廓。涉及“盒子”,在课堂上会讲解“盒子”的申请与使用(“盒子”名称、数据类型)、”盒子”的类型大小(整型int、浮点型float、双精度型double、字符型char)、“盒子”的作用(保存不同数据类型的值)等方面内容。下面图3中列举了《C语言程序设计》中所涉及的数据类型“盒子”。例如一个整型“盒子”一次只能存放一个整数,同理,其他“盒子”也只能存放具有相应数据类型的数据。在这里需要指出的是,指针“盒子”用来保存其他“盒子”的地址,因此指针“盒子”要有相对应的“盒子”的数据类型才可以进行使用,通常情况下,指针“盒子”的大小是4个字节,多个数据类型相同的“盒子”(数组),以及不同数据类型的“盒子”组合(结构体)也在图3中得到了体现。
2.3 以变量为基础深刻理解函数的本质
函数和指针是C语言的精华所在,而这恰恰又是学生在学习C语言编程时所遇到的困难之一,究其原因除了课时与学生投入时间不足之外,还和C语言自身的特点有关[8]。
在对函数的讲解过程中,主要涉及函数的参数传递问题。函数参数传递机制在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。下面首先介绍这两个概念,通过对它们的认识加深对函数参数传递的理解。
值传递:将函数A的“盒子”里的数值存储到函数B的“盒子”里,函数B则只能对自己“盒子”里的数值进行操作,而两个函数之间是不能互相读取对方“盒子”里数值的,如图4所示:
引用传递:将函数A的“盒子”的地址(指针)传递给函数B,函数B则根据指针里的地址对“盒子”里的数值进行操作,实质是函数A和函数B都是对同一个“盒子”里的数据进行操作,如图4所示:
通过以上对函数参数传递的形象化讲解,可以使学生在较短时间内建立起对函数参数传递机制的清晰理解,这也极大地带动了学生继续学习后继相关知识的浓厚兴趣。
3 学生编程思维模式化练习
通过以上对学生在学习C语言过程中所遇到若干困惑的讲述,可以看出有必要对学生的编程思维进行有针对性的训练,以期在较深层面提升学生的编程思维能力。从整体上来看,有意训练学生编程思维能力的编程思维模式主要包括以下两个方面:
3.1 固定思维模式的形成
固定思维模式要求学生在编写程序之前必须构建基本的编程框架,学生要在头脑中对此编程框架具有一个清晰的认识,并以此框架为指导进行相关的编程练习。例如程序主函数框架的模式通常是这样的:
通过以上简单实例的讲述可以看出,固定思维模式的训练对学生培养良好的编程能力具有重要作用,可以使学生在动手操作之前思维轮廓明晰,真正做到成竹在胸。
3.2 重视基础训练、去除捷径操作
学生初期进行C语言程序编程训练时,应当将一些不利于形成编程思维的语法和技巧去除,仅保留一些相对较为简单和重要的语句语法。当学生熟练掌握基础的语法之后再进行语法技巧方面的讲授和练习。
拿C语言中的循环语句来进行相关说明。C语言循环语句主要是用来描述重复执行的相关算法的,它可以用来减少在程序编写过程中重复性代码的输入,提高程序编写的效率。C语言提供了三种基本的循环语句,即while循环、do while循环和for循环。虽然这三种循环结构在格式与语句的执行顺序上存在一定的区别,但是在通常情况下这三种循环是可以相互替换的。这三种循环语句作為C语言的基本循环语句应该引导学生进行深入地理解并切实掌握各自的用法,注意分析循环开始及终止的条件,循环体执行的主体是什么,在循环进行时主要完成的操作是什么等问题,将这些情况理解清楚可以加深学生对循环语句使用方法的理解,否则可能会出现程序执行结果不正确,抑或使程序进入到死循环等与预期不符的情况。正是由于这三种循环语句在编写程序时需要注意的地方较多,可能会导致一些学生为图编程方便而频繁使用GOTO语句。GOTO语句使程序的静态结构和动态结构不一致,从而使程序难以理解,更不便于查错纠错。鉴于此,教师在授课过程中一定要重视基础内容的训练,并且在学生进行程序编写的过程中,要向学生灌输一种思想,那就是在编程过程中基本功的训练是必须的,是需要下大力气、付出一定练习时间才能掌握的,不可抱有投机取巧、走捷径的幻想。否则只能事倍功半,无法达到应有的学习预期。
4 总结
本文力图从计算机执行程序过程的内在特征来改变学生固有的思维习惯,为此提出了编程思维模式化训练的方法。根据现有《C语言程序设计》课程的教学目标与要求,该方法可以让学生更加快速地形成计算机编程思维,建立起以存储为基础并结合算法的模式来解决现实问题的能力。该教学方法已经成功运用于教学实践环节,并取得了良好的教学效果。
参考文献:
[1] 杜召彬, 刘志远. 高职院校计算机专业教学现状与改进措施[J]. 管理工程师, 2014,19(1):67-69.
[2] 台海江,郑光. C语言程序设计课程教学方法探讨[J]. 电脑知识与技术, 2018,14(32):179-181
[3]王燕,周恺,潘雷.《C 语言程序设计》课程教学改革探讨[J].电脑知识与技术,2018,14(9):150-153.
[4] 陈洪涛, 顾沈明, 刘军. 非计算机专业 C 语言程序设计的课堂教学实践与改进[J]. 计算机教育, 2009(2):125-126.
[5] 戴成秋.数据结构课程混合式教学实践与评估[J].计算机教育,2019(1):80-83.
[6] 吴以义. 类比方法:科学知识的扩展[J]. 世界科学, 2019(1): 56-57.
[7] 马喜丽. 基于分类的类比过程分析[J]. 现代教育技术,2008(13):32-34.
[8] 陈子怡. 基于C语言的计算机编程技术研究[J]. 电脑编程技巧与维护, 2018(11):63-64.
【通联编辑:王力】