C语言教学内容改革

一、引言

随着信息时代的到来及飞速发展,熟练使用计算机已成为当代大学生的必备技能。同其他高校类似,我校也将程序设计课作为学生的一门基础必修课。通过编程,大学生可以了解用计算机解决问题的过程和方法,训练逻辑思维能力,提升信息素质。一方面C语言以其简单的数据类型、清晰的语言结构、较强的逻辑性以及结构化程序设计思想等优点,非常适合作为入门语言。另一方面,C语言集抽象性、逻辑性、实践性于一身,是一门理论性和实践性都很强的课程,如不能把握C语言的本质,理解程序设计的精髓,初学者往往学习兴趣不浓,学习效果不佳,进而普遍觉得C语言难学。尽管作为工具,计算机被广泛的使用,但“计算机究竟是什么样的工具以及它是如何工作的”这些关键问题C语言的学习者并不清楚。程序员通过C语言命令使用计算机解决实际问题,连计算机如何工作都不知道,又怎能理解和接受“计算机思维”进而学好编程呢?现行的C语言教材基本上全是“填鸭式”教育理念指导下的产物,只让学生记结论,不启发引导学生思考。

每年我校学习C语言的学生有二三千人,如能在C语言教学改革中取得突破,将对我校的学风和教风产生质的影响。近五六年来,本人一直就C语言“教什么和怎样教”进行研究,虽先后也出版了两本C语言专著,但总觉得还有提高和改进的地方。又经过艰苦的尝试,终于有了让自己比较满意的版本。试用效果显著。

二、目前C语言教学改革的现状及存在的问题

目前大家对C语言教学内容的改革多集中在实践教学环节,以练促学,辅以“课堂上采用多种教学手段,充分调动学生学习积极性”,“课外采用开放式网络教学平台支持教学”,“建立科学合理的考核方式,注重过程监督”等等。教学模式的改革多基于CDIO。CDIO工程教育模式是近年来国际工程教育改革的最新成果。由麻省理工学院和瑞典皇家工学院等四所大学经过四年的探索研究,创立了 CDIO 工程教育理念。CDIO代表构思(Conceive)、设计(Design)、实现(Implement)和运作(Operate) ,它以产品研发到产品运行的生命周期为载体 ,让学生以主动的、 实践的、 课程之间有机联系的方式学习工程。CDIO工程教育模式本质上还是基于实践。

强调实践教学,培养学生的实际动手能力,让学生从实践中获得知识确实可以提高学生的学习兴趣,教学效果也不错。尽管不是“满堂灌”,但片面强调以练促学本身也有“填鸭式”教学的嫌疑。理论来源于实践,但理论可指导实践,理论指导下的实践才是最有效的实践。教学中,理论(讲)与实践(练)的关系需辩证地理解和把握。学生只有掌握了一定的背景知识,才会更主动地参与到实践中,实践的价值和意义才更大。现有的C语言教学改革中普遍忽视了理论对实践的指导意义。下面举个简单的例子。

几乎人人都知道计算机采用二进制,但这究竟意味着什么,现行的C语言教材基本不提。计算机中只能模拟0和1,现实世界的数据只有编码成01串后,计算机才能处理。整数和小数在编码时采用了不同的编码规则,这就使得一个整数和一个小数可能对应同一个01串,因此,计算机中的一串01只有知道了其类型(是整数还是小数),才能确定它的实际值,也就是说,计算机中的数据必须分类型。小数编码时,0.1的编码结果是长度无限的二进制串,这就意味着无论采用什么样的存储单元,计算机中也不可能存储十进制的0.1,即计算机中没有精确的0.1,只有其近似值。这也造成了计算机中十个0.1相加的结果可能不是1!计算机是一个“整数认不全,小数算不准”的机器。

有了“理论”的指导,学生在学习C语言的过程中不仅不再迷茫,而且兴趣激增,学生在动手实践时也更有目的性和效率。

三、C语言教学内容的改革

(一)选择教什么和不教什么

C语言有什么用?怎样编程呢?初次接触C语言的学生可能会有许许多多的疑问。

C语言用于控制计算机,C语言命令需由计算机执行,计算机的特性直接地体现在C语言中,因此,在了解计算机的基础上学习C语言事半功倍。

C语言教学内容的改革从C语言的第一节课开始。首先介绍计算机由五大部件组成——输入设备、存储器、运算器、输出设备和控制器。计算机处理数据,工厂制造产品,计算机的工作流程与工厂的类似。制造产品时需为工厂设计详细的加工流程,计算机只是一台机器,让计算机处理数据时,程序员同样也需要设计详细的工作步骤即算法。编程就是为由五大部件组成的计算机设计详细的处理数据的步骤。

计算机的组成非常简单,熟悉了其工作流程后,学生就应该知道如何指挥计算机工作了,即可以编写一些简单的程序了,当然此时的程序是以汉语的形式描述。编程就是给计算机设计加工步骤,这些步骤以汉语的形式还是C语言的形式存在并没有太大的区别,因为很容易把汉语描述的步骤翻译成C语言语句。以让计算机求用户输入的两个整数的和为例,怎样为计算机设计工作步骤呢?根据计算机的组成,参照工厂的生产模式,可以尝试让学生设计算法。

第一步:在显示器上提示用户输入两个整数;第二步:获得用户的输入,并把输入数据存储到内存中;第三步:运算器求和,并把计算结果转存到内存中;第四步:在显示器上输出计算结果。也许可以顺利地为计算机设计出工作步骤,也许会遇到这样或那样的困难。只要主动地参与到问题的解决过程中,即使没能设计出算法,也会有较大的收获。这样的尝试和参与不仅能加深对知识和计算机的理解,而且还能培养分析解决问题的能力。

计算机的五大组成部件对应着C语言的特定部分。输入设备对应于scanf函数,输出设备对应于printf函数,内存对应于变量,运算器对应于表达式,控制器对应于语句的顺序。程序员借助C语言的命令可以方便地指挥计算机工作,因此,把算法中的步骤翻译成C语言语句非常容易。第一步控制计算机在显示器上输出信息时,只需用printf函数。第二步获得用户输入时,只需用scanf函数。第三步求和时,只需用+号。第四步输出计算结果时,再次用printf函数即可。

C语言的教学实践中,通过上面的引导,大部分学生在第一节课上就能理解该课程的核心问题——什么是编程,并能初步掌握C语言和计算机的对应关系。由于教学内容和教学过程具有极强的直观性和逻辑性,因此,不仅能吸引大部分学生的注意力,而且可以使他们主动地参与教学过程,积极发挥主观能动性——讨论、争论、质疑,大学的课堂真正呈现出师生良性互动深入沟通的大好局面。

教师的主导作用主要体现在教学内容的选择上,“教什么和不教什么”是关键,教是为了不教。背景知识需要教,但如何用这些知识解决问题就需要学生自主分析,发挥他们的主体作用讨论解决了。

(二)启发学生思考为什么

现有的大多数C语言教材不仅没能在先进的教学理念指导下组织内容,而且一些知识点的分析描述不准确,导致学生只能以死记硬背的方式学习相关内容。表达式的求值规则最为典型。C语言表达式求值时先考虑序列点,再考虑优先级,最后考虑结合性。但C语言教材中大多不提及序列点,遇到有序列点的表达式时只是让学生记忆求值规则,如强调逗号表达式的求值顺序是自左向右依次求值。逗号表达式i=j,++j中自增操作符的优先级最高,为何不根据优先级先执行自增操作呢?难免会有学生提出这样的疑问。不完整的表达式求值规则,使得学生对C语言知识的认知残缺不全,也影响了学生自主学习的积极性,更不利于创新型人才的培养。

含有序列点的表达式求值时要保证有序列点的操作符左边的由子表达式构成的操作数先于其右边的操作数求值。在表达式2*5+3中加法操作符右边的操作数为3,但其左边的操作数不是5而是子表达式2*5,因为进行加法操作时不可能把35相加。由于逗号操作符的优先级最低,故逗号表达式i=j,++j中逗号操作符左边的操作数为子表达式i=j,右边操作数为子表达式++j。又因为逗号操作符有序列点,所以其左操作数i=j会先于右操作数++j求值。可见序列点可以让低优先级的操作符先于高优先级的求值。

逗号操作符为何有序列点呢?

逗号操作符常用于把多条C语言语句改写成一条C语言语句。i=j;++j;是两条语句,而i=j,++j;是一条语句。为保证改写后“语句”的执行顺序与改写前相同,逗号操作符不仅需有序列点,而且还需优先级最低。

不仅仅是序列点,指针变量、数组变量、递归函数以及文件甚至数据类型,在教学过程中几乎C语言的每个知识点都进行了准确而精辟的分析,为学生自主学习、参与讨论奠定了坚实的基础。在分析的基础上还提出了一些独到的观点。如计算机是一台“整数认不全,小数算不准,只会重复的”机器。如多上机编程是学好C语言的必由之路,只有实践才能出真知,但理论指导下的实践才是最有效的实践,一定要养成人工执行源程序的习惯。

(三)引导学生归纳知识点

在教学过程中还总结了许多知识点的用法,直观明了极具操作性,非常适合初学者。如用假设用户输入求预期输出的方法理解题意;用画表法分析循环结构的执行过程等等。以指针变量的用法为例。指针变量的使用通常需两步:第一步,对指针变量赋值,即让它指向某存储单元;第二步,以间接引用的形式使用指针变量所指向的存储单元。有int i = 5*pi;,可以这样使用整型指针变量pi:先对指针变量赋值pi = &i;,让它指向整型变量i;然后在程序中以*pi的形式使用指针变量pi指向的存储单元,即*pi和变量i标识了同一个存储单元,*pi和变量i通常可在程序中互换使用。pi是一个整型指针变量;*pi是一个整型变量,但它标识了pi指向的整型存储单元。

四、总结

在学校人才培养模式改革的活动中,以先进的教学理念为指导,以全新的角度深刻地分析讨论了C语言的教学内容,就C语言“教什么和怎样教”进行了积极的探索。及时把教学成果固化为教材,出版了两本C语言专著。为便于学生自学和复习,录制了全套的教学视频上传到网上(zeq126.56.com),目前已有超过11万人次观看。

教学效果明显,作为教练带队参加河南省大学生程序设计大赛中,连续几年学生每次都至少获得一个银奖,比赛成绩在我省同类院校中名列前茅,主力队员均读研深造。


你可能感兴趣的:(C语言研究)