当前位置:首页 期刊杂志

“C语言程序设计”教学方法探讨

时间:2024-05-04

余小燕 李 晶

文章编号:1672-5913(2009)10-0136-03

摘要:“C语言程序设计”是计算机及相关专业的重要的专业基础课,也是一门难学难教的课程,采用什么教学方法使学生能更好地掌握C语言是值得思考、值得研究的问题。本文通过分析目前各个高校“C语言程序设计”课程的三种教学模式,结合实际的教学过程对这三种教学模式中所使用的教学方法进行了探讨。

关键词:C语言;程序设计;教学方法

中图分类号:G642

文献标识码:B

高级程序设计语言是计算机应用专业及相关专业的一门很重要的专业基础课程,C语言是一种典型的结构化程序设计语言,其处理能力和表现能力极强、使用灵活方便、目标程序效率高、可移植性好的特点使其能在各类各型计算机上广泛使用,也因而作为很多高等院校(包括高职院校)开设计算机程序设计语言课的首选语言;但是C语言的概念复杂、规则多、因灵活而易错的特点也给教师和学生在教与学中带来不小的压力。为了提高学生学习程序设计的兴趣和信心,更好地培养学生程序设计的基本思想,教师在把握授课内容的同时也要积极探索教学方法和教学技巧。目前各个高校“C语言程序设计”课一般包括理论课、上机课和课程设计课三种教学模式,本文将对这三种教学模式中所使用的教学方法进行探讨。

1理论课教学方法

传统的理论课教学方法应由以下教学环节组成:

(1) 回顾上一次课主要内容,并预习检查;

(2) 讲解本次课的学习任务和目标;

(4) 讲解知识点1、小结、课堂练习,讲解知识点2、小结、课堂练习……

(5) 总结和布置作业。

笔者认为在理论课教学中可多采用课堂设问和提问教学法、对比归纳教学法、现场编程教学法和课堂陷阱教学法。

1.1课堂设问和提问教学法

高等学校的教学方式和学习过程与中学阶段有较大的不同,高校的专业教育不仅是传授知识,而且是引导学生“进入”到专业领域,教师不是“教书”,学生不是“记忆”,而是“思考”,我们通过课堂设问和提问教学法引导学生去思考。

如讲解例题“求任意自然数n中各位数字之和”,教师可设问“如自然数345,各位数字之和是多少?”,然后提出两个关键性问题“如何求得n中每一位数字?”及“自然数n是任意的,其位数是不确定的,如何控制循环次数?”。教师的问题提出之后,对比较简单的问题,教师可自问自答,也可以和学生一起回答,对于关键性的问题首先引导学生去思考,然后要求学生来回答。

在教师的引导及学生的积极思考下,就很容易解决这两个关键性问题,即用n%10得n的最低位,加入和s;然后n=n/10,即n始终表示由未处理的数字组成的自然数。重复以上过程,直至n等于0时结束。主要程序段如下:

main()

{int sum=0, n;

printf(" input a natural number:");

scanf("%d", &n);

while(n>0)

{ sum+=n%10;

n/=10;

}

printf(" sum=%d", sum);

}

在使用课堂设问和提问教学法时,要注意设问不能太多,千万不能变成“口头禅”而引起学生的反感;在提问时要保证提问的质量,不能是学生不用想就能回答的问题,也不能是学生经过教师启发后也不能回答的问题,也不能是太宽泛的问题,并且不管学生回答是否正确,都要给予适当的语言鼓励。

1.2对比归纳教学法

通过对比的方式对相关的概念或类似的程序代码进行比较,进而明确差异,然后进行归纳总结,更好地方便学生理解。如在讲解continue语句的使用时,可通过break语句利用示例进行对比,如下列两个程序段:

程序1:

main()

{int k,n=0,a=0;float s=0;

printf(“ enter 10 integers:”);

for(k=0;k<10;k++)

{ scanf(“%d”,&a);

if(a<=0) continue;

s+=a;n++;

}

printf((“aver:%f”,s/n);

}

程序2:

main()

{int k,n=0,a=0;float s=0;

printf(“ enter 10 integers:”);

for(k=0;k<10;k++)

{ scanf(“%d”,&a);

if(a<=0) break;

s+=a;n++;

}

printf((“aver:%f”,s/n);

}

程序1的输出结果是“输入的10个整数中正数的平均值”,程序2输出的结果是“至多10个正数的平均值”,也就是说不一定有10个整数,因为一旦输入的是非正数程序循环就终止。通过这两个程序段的对比,可归纳总结出break语句和continue语句的区别,即如果条件a<=0成立,遇到continue语句则跳过本次循环体中其余尚未执行的语句(s+=a和n++),而去执行k++语句,接着再进行下一次循环条件(k<10)的判定;而如果条件a<=0成立,遇到break语句则结束循环,不执行k++语句,也不再进行下一次循环条件(k<10)的判定。通过这样的对比,不仅方便学生理解,而且也加深了学生对该知识点的理解和把握。

1.3现场编程教学法

在一个技能知识点讲解完毕进行小结时,要求所有学生拿出纸和笔,对一个简单的有代表性的编码题进行现场编程,并且在3-5分钟内完成。通过现场编程不仅方便教师了解学生对该知识点的掌握程度,而且克服学生怕动手畏难的习惯,提高学生动手意识和编程能力。在学生进行现场编程时,教师应走下讲台巡视学生,督促全部学生动手,了解学生在编程时出现的错误;在刚开始学习编程时,教师可选两位学生在黑板上书写自己的程序代码,然后请学生自愿前来改正代码中的错误,这样不仅可提高学生的编程能力,还可提高学生调试程序的能力,同时也活跃了课堂气氛,提高了教学效果。

在使用现场编程教学法时,要注意要求学生现场编程的题目不能太复杂,否则学生都解答不出来;安排学生现场编程的时间也不能太长,否则课堂讲解时间不够;安排学生在黑板上书写或修改程序代码也不宜太频繁,可在课程前期、在学生对C语言的程序结构印象还不深刻的时候安排。

1.4课堂陷阱教学法

在讲解或演示程序代码的时候,通过故意地把典型的、容易出错的代码写错来设置陷阱,使程序调试不能通过,进而吸引学生的注意力,然后学生在教师的启发引导下找出错误、改正错误,得到正确的程序代码。通过“调试程序→发现错误→改正错误→调试程序”的一系列过程不仅可以提高学生对程序代码、概念的理解和认识,而且可以提高学生编写程序代码的经验,提高调试程序的能力。

如讲解循环结构语句,当循环体由多条语句组成时,必须用{ }将这些语句括起来组成一个复合语句,教师可故意去掉这个花括号(设置陷阱),则程序不能得到正确结果或者是死循环。

再如指针问题,要求用指针实现“交换两个变量a和b的值”,程序段如下:

main()

{int a=10,b=20;

int *p1=&a,*p2=&b,*t;/*使p1指向a, 使 p2指向b*/

t=p1;p1=p2;p2=t; /* 交换后p1指向 b,p2指向a */

printf((“a=%d,b=%d ”,a,b);

}

很显然,指针变量p1和p2的值虽然发生了交换,但指针变量p1和p2所指向的变量的值没有交换即变量a和b的值没有交换。其执行过程如下图(a)(b)所示:

如要实现上述功能只需在最后一句前加:

a=p2; b=p1;

使用课堂陷阱教学法要求教师不仅有丰富的教学经验,对知识点的易错性有较好的把握,而且对学生的知识点的掌握情况有较深入的了解,同时备课要充分,避免程序代码出错了自己也找不出错误。

2上机课教学方法

一堂典型的上机课应当由以下教学环节组成:

(1) 教师讲解本次上机目标和训练技能点;

(2) 教师讲解本次上机需完成任务一,学生编写程序代码、同时教师巡视并指导学生编码、教师对出错率大于30%的问题进行集中讲解;

(3) 教师讲解本次上机需完成任务二、学生编码的同时教师巡视指导……

(4) 总结和布置作业。

笔者认为在上机课教学中可采用任务分解教学法、任务贯穿教学法、课堂陷阱教学法和对比归纳教学法等。

2.1任务分解教学法

通过对一个比较大的任务或比较复杂的问题进行分解,分解成若干小的问题,然后逐步解决这些小的问题。如编程实现“输入30个学生4门课程的成绩,要求计算出每位学生和每门课程的平均成绩”,对于这个问题我们首先把它分解成如下三个小问题:

(1) 输入30个学生4门课程的成绩;

(2) 计算每位学生的平均成绩;

(3) 计算每门课程的平均成绩。

然后在教师的指导下学生分别编程实现这三个问题,学生编程实现这三个问题的时间分别控制在5-10分钟。由于对上机任务进行了分解,不仅教师可以控制学生完成每个任务的情况,学生也可以按时完成任务,上机的效率和完成率都高,学生也就有成就感,进而增强学生学习程序设计的兴趣。

使用任务分解教学法要求教师不能急于求成,在理论课后不能立即布置一个复杂的上机任务,要因材施教,根据学生的实际掌握程度布置一个大多数学生都能完成的任务。

2.2任务贯穿教学法

对于比较复杂的问题且在2个课时内不能完成,需要2-3次上机完成的上机任务可采用任务贯穿教学法,该教学方法通常应用在“C语言程序设计”课程教学后期,其实质仍然是任务分解。

3课程设计课教学方法

“C语言程序设计”的课程设计课通常是要求学生根据现有的C语言知识或技能(也许还要用到其他课程的知识或技能),完成一个或两个规模和完整性都远远大于上机课的项目,如比较贴近学生生活的“学生成绩管理系统”、“图书管理系统”等项目,在真实的编程情景中做学生感兴趣的项目,不仅可以巩固和提高已经学过的知识和技能,还可将编程的技巧渗透其中。通常课程设计课由以下几个教学环节组成:教师讲解(包括问题描述、问题分析、难点分析、阶段划分)、教师演示上机的成果、学生分阶段进行编码、教师分阶段进行检查、教师分阶段对共性问题集中讲解、学生总结。在课程设计课中可采用任务分解教学法、任务贯穿教学法及课堂陷阱教学法,这里就不再赘述。

4结束语

上述三种教学模式中使用的教学方法是根据实际教学过程提出的,并已经在“C语言程序设计”课程教学实践中运用,取得了良好的教学效果。当然,在使用和设计某种教学方法时,务必做到因材施教。

参考文献:

[1] 刘燕.C语言程序设计[M].北京:中国铁道出版社,2008.

[2] 张春燕.面向能力培养的C语言程序设计教学方法研究[J].时代教育,2007(07Z).

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

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!