浅谈比较教学法在《C语言》教学中的运用

2010-10-27 02:45唐小健
职业教育研究 2010年5期
关键词:比较法C语言程序设计

唐小健

(韶关市中等职业技术学校 广东 韶关 512028)

浅谈比较教学法在《C语言》教学中的运用

唐小健

(韶关市中等职业技术学校 广东 韶关 512028)

C语言是系统描述语言,是一种通用的程序设计语言,具有许多突出的优点,因而在许多方面都得到了广泛应用。越来越多的程序员将C语言作为主要的编程工具;同时,越来越多的人开始学习C语言。但由于C语言灵活,功能强大,也给初学者带来了一定的学习难度。文章从教学法出发,认为教师在《C语言》授课过程中,应根据不同的教学目的,针对不同的教学内容,采用比较教学法,以获得良好的教学效果。

比较教学法;C语言;程序设计

C语言使用起来方便灵活,具有现代化的数据结构、结构化的控制语句、程序设计自由度大等特点。但是,C语言中诸多的符号难以驾驭,尤其是函数、指针和结构体等,学生学习起来相当吃力。近几年来,笔者不断对C语言教学进行探索和总结,认为在《C语言》课程教学中运用比较教学法能有效提高教学质量。

典型例题“接龙”比较法

学生学习程序设计语言,只有在掌握这门高级语言自身特点的基础上,才能进一步学习编程。教师在进行教学设计时,编排例题的顺序很重要,应依据知识的连贯性,由简单到复杂,逐层深入。例如,for循环语句这一节内容,由于介绍完单层循环,还要进一步介绍循环的嵌套,笔者选择了下面这道编程题为“龙头”,然后分别横向深入和纵向深入进行“接龙”,将这一节的所有知识点都概括其中,使它们彼此联系,相互挂钩。

例题一(累加):求1+3+5+7+…+n(n是奇数)。

(一)横向深入

在程序设计语言的教学过程中,教师应适时让学生进行编程训练。这不仅对学生理解和熟悉知识点有帮助,而且还能循序渐进地培养学生树立程序设计思想,提高分析问题和解决问题的能力。

讲完例题一,将题目稍加改动为例题二(求和):s=1+1/3+1/ 5+1/7+…+1/n(n是奇数)。这道题的源程序,除了将例题一源程序的“s+=i;”语句改为“s+=1.0/n;”语句,还要注意将“int s;”语句改为“float s;”语句。另外,在输出语句printf中参数s的格式控制符也应作相应的改动,由“%d”改为“%f”。

此后,再将例题一稍加改动为例题三(求积):1*3*5*7*…*n(即求n的阶层:n!,n是奇数)。这道题,除了将例题一源程序的“s+=i;”语句改为“s*=i;”语句外,还要注意将“s=0;”语句改为“s=1;”语句。

(二)纵向深入

将例题一和例题二结合,就成为了例题四:求1!+3!+5!+7!+…+n!(n是奇数)。这道题具有承上启下的作用,使教学内容由单层循环引入循环嵌套。累乘由内层循环来实现,累加由外层循环来实现。

例题四源程序:main(){

借助本题的讲解,可将有关循环嵌套的知识点着重介绍给学生。然后再将该题进行横向深入:求1!+1/3!+1/5!+1/7!+…+1/n! (n是奇数)。让学生自己动手练习。

途径比较法

在程序设计语言的授课过程中,任何一个问题的解决,都应该尽量通过多种途径来实现。途径比较法,就是通过比较各种途径(即解决问题的办法),引导学生发散思维。哪种途径效率最高,各种途径分别适用于什么情况,引导学生养成周密考虑这些问题的习惯。

例如,在求解例题一时,除了用以上方法之外,还可以有另外的解题方法。1到n(n是奇数)之间的项数(即奇数个数)可以用简单的算法求得。假设1到n之间的项数为m,实际上这是一个公差为2的等差数列,利用公差的通项公式,则有n=1+(m-1)*2,求得m=(n-1)/2+1,利用单层循环语句for就可以马上求得结果。源程序如下:

显然,这个源程序的执行效率比较高。在讲完用这种方法求解例题一后,笔者要求学生采用这种方法写出例题二、三、四的源程序。绝大多数学生很快就正确地写出来了,真正达到了学以致用、触类旁通的教学目的。这样的启发引导,让学生在了解常规解法的基础上又找到另一种行之有效的解题方法,使学生懂得应该学会用不同的角度和方法来解题,并在解题过程中摸索出最简单有效的方法,从而加深对《C语言》相关知识的理解,进一步增强学习《C语言》的兴趣。

又如,在程序设计中经常会遇到排序问题,而学生在编程时往往不能正确地完成,或是不能根据实际情况选择最合理的途径完成。针对这种情况,笔者将冒泡法排序、选择法排序、插入法排序几种解决排序问题的方法安排在一起介绍。对于排序的几种方法,用具体的例子帮助学生理解:学校下周要举行运动会,要求每个班级的学生按照从高到矮的次序排成一列进场,班主任要事先将每个学生的身高写在一张纸条上,排好后按照这个次序进场。

若用冒泡法排序,就得将相邻两个学生的身高逐一进行比较。这样不断地反复比较、交换,才能将身高按从高到矮排好序。若用选择法排序,就必须从第一张纸条开始查,找出身高最高的纸条与第一张纸条互换位置,然后继续从第二张纸条开始查找次身高的纸条,并与第二张纸条互换位置。若用插入法排序,就得先从排序前的那堆纸条(后面称无序组)中拿第一张纸条摆在另一处 (后称有序组),接着从无序组中拿第一张纸条(即原第二张纸条)和有序组中这张纸条比较,若原第二张纸条上的身高更高,则插放其前,否则,就插放其后。然后,再从无序组中拿原第三张纸条和这边的两张纸条上的身高进行比较,若身高较高则插放其前,否则,就插放其后。

对这三种途径进行比较总结得出:插入法排序是一种简单、常用的排序方法,不适用于大量数据的排序;选择法排序虽然比较直观、简单,但要进行很多比较,因而速度比较慢;冒泡法排序是通过不断比较、交换,适用于简单数据的排序。

结果比较法

教学实践表明,学生在编写程序时往往会出现许多不同类型的错误,特别是一些容易混淆的知识点和概念。如混淆使用各类循环语句,搞不清各类循环语句之间的区别与联系;混淆使用单目运算符++、--的前置运算和后置运算;混淆各种运算符的优先运算顺序;混淆break语句与continue语句的功能等。对于那些容易混淆的概念和容易用错的功能,可以使用结果比较法,即将正确的源程序和学生典型的错误程序一起展示给学生,让他们自己去比较异同,认清是非,达到正确使用概念的目的。

“诱导”比较法

学生在编程求解一些应用题时,大多得不到正确结果,但并不能以此认为学生不会编程或学生写出的源程序一无是处。这些程序从整体框架来看是正确的,所使用的《C语言》语句和算法是正确的,只是在一些细节方面没有处理好。如果因此而责备学生,很可能会产生一些负面影响,如使学生丧失自信心,兴趣降低,产生自卑感等。这时,可以采用“诱导”比较法,教师一步步引导学生自己发现错误并改正,直至得到正确结果。这样,学生会有一种成就感,对学好《C语言》的信心大增,学习的兴趣和热情也随之高涨,可以达到事半功倍的效果。下面通过一道典型例题进一步说明“诱导”比较法在《C语言》中的运用。

例题五:求100到1000之间的各位数字之和为5的数有多少个?输出这些满足条件的数字(每行5个)并对这些数字求和输出。

笔者要求学生自己在上机前编写好源程序,上机时输入源程序,进行编译和调试,然后运行可执行程序,看是否能得到预期的结果。有的学生没有得到正确的结果,一是程序运行后没有任何数据输出,二是每行输出按照默认的格式输出10个满足条件的数字而不是题目所要求的5个数字,三是输出满足条件的数字个数和数字之和与实际不符。通过检查他们的源程序,发现存在一些问题,归纳起来主要错误有:循环语句for使用不当,不会灵活应用算术运算符号,输出函数printf使用不当。既然已经找到问题,笔者就“诱导”学生对错误逐个进行排查,最后得到正确的结果,其中一个学生的源程序是这样的:

循序渐进比较法

在学习《C语言》时,关键要熟练掌握并灵活运用好32个关键字。一次课记住这32个看似没有任何规律的符号比较难,尤其是英语比较差的学生。可以根据内容的先后顺序和功能给关键字分类,进行比较。例如,short,long,和signed用于说明整数类型数据;float和double用于说明实数类型;if和else可构成选择结构的控制语句;在循环结构控制语句中可用for,while和do关键字。每节课之前,教师可以先板书已学习过的关键字和本节课要讲的新关键字。新关键字,要写出其全名并注上对应的汉语意思,帮助学生加深理解。久而久之,单调的关键字就变得容易接受并能被学生熟练掌握了。

总之,在《C语言》的授课过程中,根据不同的教学目的,针对不同的教学内容,采用不同的方法进行比较,可以收到良好的教学效果。

[1]于春凡.C语言及其高级编程技术[M].天津:南开大学出版社,1995.

[2]谭浩强.C程序设计[M].北京:清华大学出版社,1991.

[3]徐维祥.C语言程序设计教程[M].北京:高等教育出版社, 1998.

[4]严蔚敏,吴伟民.数据结构[M].北京:清华大学出版社,1992.

G712

A

1672-5727(2010)05-0138-02

唐小健(1972—),男,江西安远人,韶关市中等职业技术学校教师,中学一级教师,主要从事计算机教学。

猜你喜欢
比较法C语言程序设计
基于Visual Studio Code的C语言程序设计实践教学探索
51单片机C语言入门方法
从细节入手,谈PLC程序设计技巧
基于C语言的计算机软件编程
比较法学习Co和Co2
高职高专院校C语言程序设计教学改革探索
基于滞环比较法的光伏最大功率点跟踪控制研究
PLC梯形图程序设计技巧及应用
管窥“浮沉比较法”在脉诊中的应用
比较法在教学中的运用