当前C语言教学中存在的问题及对策

2019-01-08 03:16巨同升
电脑知识与技术 2019年33期
关键词:教学目标

巨同升

摘要:本文列举了在当前C语言教学中存在的课程教学目标不够明晰、知识布局不够合理、过于注重语法知识的系统性、程序讲解方法有待改进以及程序案例选题范围不够广泛等问题,并针对这些问题提出了相应的对策。

关键词:教学目标;知识布局;真实情境法;推导构造

中图分类号:G642 文献标识码:A

文章编号:1009-3044(2019)33-0081-02

C语言程序设计这门课程在我国高校中广泛开设已有二十多年,对于普及程序设计知识、推广计算思维的思想起到了不可或缺的作用。不过在C语言程序设计的教学过程中,还存在一些不足之处,尚有一定的改进空间,主要体现在以下几个方面。

1课程教学目标不够明晰

一门课程应该有明确的教学目标,不仅包括知识目标,更要包括能力目标。而在当前的大多数C语言教学大纲中,往往侧重于对知识目标的描述,对每一单元的知识点都有详尽的要求说明。而对于能力目标的要求,则比较笼统。往往只有针对课程整体的能力目标要求,而缺乏具体到每一单元的能力目标要求。

由于强调课程的知识目标而不是能力目标,因而过于看重知识的系统性与完整性,追求大而全。比如,在一般编程中极少使用的指针访问二维数组、指向函数的指针和链表等内容,在教学大纲中往往也要求掌握。

导致在教学中过于看重概念知识点的传授,而淡化了对能力培养的要求。其后果是只见树木、不见森林,尽管学习者对于各个知识点的掌握比较牢固,但是对于知识点之间的有机联系以及如何运用知识解决现实问题却缺乏深入的理解,影响了学习者编程能力的提高。

针对上述问题,必须首先明确知识目标与能力目标之间的关系。在这两种目标中,能力目标才是居于支配地位的根本目标,知识目标只是对能力目标的补充,是为能力目标服务的,但是并不能取代能力目标。

因此,在教学中应该以培养学习者综合运用知识解决现实问题的能力作为根本目标,而不再强调对知识点的牢固掌握以及知识覆盖的广度。

2课程知识布局不够合理

合理地选择知识点呈现的时机,合理地设计知识布局,对于帮助学习者更好地理解和掌握知识具有至关重要的作用。

在C语言知识点布局方面存在的问题,主要体现在如下几个方面:

(1)在多数C语言教材中,往往基于语法知识的系统性与连贯性,将C语言中常见的运算符与表达式集中到一章中讲解。对于一般的程序设计语言来说,这种布局方式或许没有什么不妥;但对于C语言来说并不适合。这是因为C语言的运算符与表达式异常丰富,用法特别灵活,本来就是C语言语法中的难点。

由于这种布局方式无法体现语法知识与程序设计之间的联系,从而导致学习者对知识点在程序设计中的作用难以有深入的理解,进而会感觉枯燥乏味。

解决这个问题的方法,就是根据知识点对编程能力目标的支撑作用,重新设计知识的布局。在顺序结构程序设计之前,只讲解加、减、乘、除、求余数和赋值这几种最基本的运算符;在选择结构程序设计部分,讲解关系、逻辑、条件和类型转换运算符;在循环结构程序设计部分,讲解自增、自减、复合赋值和逗号运算符。这种布局能够更好地体现知识点与程序设计之间的有机联系,同时由于是“即学即用”,因而更加有利于学习者对知识点的理解掌握。

(2)字符串处理是C语言程序设计的重要功能。在多数C语言教材中,往往将有关字符串处理的内容分散到数组和指针两章中讲解。既容易造成重复,也难免存在不协调之处。例如,在字符数组部分将难以解释为什么不能给字符数组名赋值。这种布局方式的实质,是只注重知识的外在表现形式,而忽视了知识的内在功能性联系。

解决上述问题的方法,是将字符数组和字符指针部分分别从数组和指针部分移出来,构成单独的一章,专门讲解字符串处理方面的内容。从而避免相似内容的重复,使得知识布局更加协调和自然顺畅。

(3)指针是C语言中的一大特色功能,同时也是一大难点。在大多数C语言教材和教学大纲中,通常将有关指针的大部分内容集中到一章中讲解。表面上看起来似乎合理,实际上会造成“难点堆积”的效果,从而不利于学习者的理解掌握。

针对上述问题所采取的对策,就是根据知识点在程序设计中的作用重新布局知识点。将有关指针的内容,分解为指针与数组、指针与字符串、指针与函数等三章。

这种布局能够更好地体现知识的内在功能性联系,同时也分解了难点,因而更有利于学习者对于知识的理解与运用。

3过于注重语法知识的系统性

有些人认为编程离不开语法,语法是编程的基础,要想学好C语言编程,必须系统完整地掌握C语言的语法。由于将C语言语法看作学习编程的“预备知识”,因此在讲授编程之前,总是要对相关的语法知识进行深入细致地讲解。因为涉及的语法知识点比较多,因此通常采用堆砌罗列的方式逐一讲解。

这种教学方式虽然花费了大量的课堂时间和精力,但是教学效果却并不理想。一方面学习者对于语法的理解不够深入,另一方面对于编程的促进作用也不明显。

究其原因,采用“预备知识法”讲解C语言语法,会造成语法与编程一定程度的脱节,不利于学习者对语法的理解。

另一方面,根据与程序设计联系的紧密程度,实际上可以将C语言的语法分为两类。一类是在编程中经常使用、同时也比较容易理解的常规语法。另一类是在编程中极少使用、同时也比较难懂的非常规语法,比如“逻辑运算的短路”“for语句的变形”;还有一些在实际编程中几乎不可能出现的语法,比如仁i++ + i++ +i++和a+=a-=a+a这样的表达式以及typedefint(*POINTER)O;这样的语句。

显而易见,非常规语法对于编程的促进作用是非常有限的,反过来还会由于讲解这部分语法挤占了讲解编程方法的时间,影响了学习者编程能力的提高。

上述问题的解决方案,是本着语法服务于编程的原则,在教学中着重讲解编程中频繁使用的常规语法,避免过多地讨论非常规语法。

在讲授语法知识时,尽量用“真实情境法”取代堆砌罗列方式的“预备知识法”。所谓“真实情境法”,就是将语法知识点在真实的程序案例中展现出来,让学习者在学习编程的过程中自主地“发现”并逐步地积累语法知识。例如,在讲解计算球体体积的程序时,先用v=4/3*PI*pow(r,3)进行计算,然后通过运行程序发现结果错误,接着返回分析程序,再说明4/3实际上是整除,正确的写法是v=4.0/3*PI*pow(r,3)。

由于将语法知识点与真实的程序“情境”相联系,因而更加有利于学习者对语法的理解,更容易给学习者留下深刻的印象。

4程序讲解方法有待改进

在C语言程序设计教学中,培养学习者基本的编程能力和初步的计算思维能力是教学的重点和难点。这两种能力的培养,归根到底需要借助于一个个编程实例实现。因此,如何设计更加有效的教学方法,更好地体现计算思维的思想,是问题的关键所在。

在现有的C语言教学实践中,普遍采用“问题分析一一写出程序——解释说明”的步骤讲解程序。即首先针对问题进行分析,得出基本的编程思路,然后写出完整的程序,最后再对程序中的语句逐条进行解释说明。

不过这种方式的教学效果并不理想,学习者通常能够读懂案例程序,并能理解其编程思路。但是当需要学习者自己编写程序时,却又往往感觉无从下手。其原因在于从编程思路到完整程序之间缺乏必要的推导过渡环节。学习者找不到编写各类程序结构的一般性规律,从而感觉无章可循。

那么,能不能像求解数学问题那样,将程序一步步地推导出来呢?其实,编程的过程也是有规律可循的,完全可以通过归纳、演绎等逻辑推理方法,将程序一步步地推导构造出来。这种方法能够帮助学习者发现编程的内在规律,增强他们学好C语言的自信心。下面通过一个例子进行说明。

例1.编程序计算1+2+3+…+100之和。

该问题实质上是求等差数列之和,完全可以利用等差数列的求和公式来求。不过在这里采用一种累加的方法来求此数列之和,因为这种方法具有更好的通用性。

算法設计如下:

猜你喜欢
教学目标
隧道工程教学体系改革方法探索
初中英语诗歌教学教学目标的有效性
新媒体环境下数学教育方法的优化
小学英语故事教学法新说
新理念下小学英语课堂教学有效性分析
提高小学语文阅读教学实效性的策略
透过高考把握《生活中的圆周运动》 教学