首页 > 范文大全 > 正文

探究式教学方法在C语言教学中应用的一些体会

开篇:润墨网以专业的文秘视角,为您筛选了一篇探究式教学方法在C语言教学中应用的一些体会范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

文章编号:1672-5913(2008)06-0063-02

摘要:本文介绍了笔者根据自己多年来的教学经验,在C语言程序设计教学中应用探究式教学方法一些经验。

关键词:探究式;C语言教学方法

中图分类号:G642

文献标识码:B

“成功的教学依赖于一种和谐安全的气氛。”(罗杰斯)“心理安全”和“心理自由”是两个最重要的条件,教师要充分尊重学生,尊重他们的兴趣爱好、思维方式、思想感情,要真正“蹲”下来,倾听学生的心声,做学生的朋友,构建亲、助、乐的人际环境,呵护学生们的好奇心。有了这种平等、宽松、无责怪的氛围,学生才敢提出问题、思考问题、探究问题,进而找到解决问题的方法。在课堂上我鼓励学生随时提出问题,对敢于提出问题的学生大加赞赏,并允许“插嘴”,因为“插嘴”中往往蕴涵着创造思维的火花,还允许学生大声发笑、实话实说,因为这是情感的真实流露,更允许学生之间有争论,因为争论说明学生在思考、有创见。课堂上敢于提问的学生越来越多,即使有的问题幼稚可笑,我也倍加珍视,向他竖起大拇指。

实例一:在介绍了数组的知识和指针的概念后,开始学习指针的加减法运算。我首先举了一个形象的例子。有一排房子共有20个房间,规定四个家庭每家各占有连续的5个房间,即第一个家庭占有1到5号房间,第二个家庭占有6到10号房间,以此类推。此时,指针的加减运算,就如同计算每个家庭的房间号一样,第二个家庭从6号房间开始,那么第三个家庭就是第二个家庭上加1,此时1的单位是一个家庭,而一个家庭占有5个房间,则第三个家庭开始的房间号就应该是6+1*5=11,而不是6+1=7。

实例二:在学习指针的加减法运算时,我把学生安排在每人一机的计算机教室,提供一组指针运算的练习题,请学生编程、调试、运行、分析结果、得出结论。本次课的前提是学生已学习了数组的知识和指针的概念。

上课前,我发给学生需要在课堂上填写的实验报告。然后,在与计算机相连的屏幕上给出了一个问题:

设int a=3;

则a-1=,a+2=

提问:哪个同学可以告诉我这两个表达式的值是什么?学生们不由得轻声笑了出来:“太简单了”。当学生说出分别是4和5之后,在屏幕上给出第二个问题:

设int *pa,a[30];

pa=&a[1];

若a[1]的地址为3000,则pa-1= ,pa+2=

提问:这两个表达式的值是什么呢?学生们有的立即回答:“2999和3002呗”。有的学生在迟疑:“不对吧”。看到学生的反应后,我指出:“这就是本次上机实践研究的问题――指针的加减法运算”。

在交代了实验报告的填写方法之后,课堂的大部分时间由学生在计算机上动手实践。与传统课堂不同,所有的学生都全神贯注地进行编程、调试、运行、讨论运行结果,填写实践报告。

在学生对运行结果感到困惑时,我会提示:如果pa不是整型指针,a不是整型数组;而是字符型、长整型、单精度类型、双精度类型呢?

所有的学生再一次投入到实践中。经过几次类似问题的解决以及相互的交流,学生们开始运用归纳法对问题的结果进行分析――这正是我所期待的!

在实验的结论一栏,学生们写着:指针加1,不是指针内容加1,而是加上1个它所指那个类型的长度;加2就是加2个那个类型的长度。

教师们对这节课的收获很满意,正准备总结,有一名学生举手:“老师,指针要是指向数组,一旦加1,就把整个数组跳过去了”。“没错!”我知道该进行表扬了。这对下一次的学习是个很好的铺垫。

这节课的突出特点是:学生的学习方式变了,他们通过自己的活动探索获得知识,而不是通过听讲获取“现成”的知识。“问题情境―编程实践―课堂交流―课堂操作与联系”代替了过去的“听讲―笔记―练习”,充分调动了学生学习的积极性,使学生处于学习的主体地位,让学生主动探索、观察,得出结论,取得了较好的教学效果。

实例三:在对for语句的深入学习时,我们把学生安排在每人一机的计算机教室,提供一组简单的for程序段,请学生编程、调试、运行、分析结果、得出结论。本次课的前提是学生已学习了for与while的对应关系和break、continue在循环语句中的功能。

我们给出了一个for程序段:

for (k=1;k

{

scanf (“d”, &d );

printf (“%d”, d );

}

提出要求:编程并调试运行,观察这个程序段的结果。然后将它转换成while语句,观察结果。交待完要求后,指出:本次课的教学目的是探索for与while的对应关系。学生们认真进行了修改,而且很快编写出了不同方式 的while程序段:

Ak=1; Bk=1;

while ( k

{ scanf ( “%d\n”,&d ) ; { scanf ( “%d\n”,&d ) ;

k++; printf ( “d\n”,d ) ;

printf ( “d\n”,d ) ; k++;

} } while ( k

经过对比,结论很快出来了:三个程序段的功能都是将键入的10个整数打印出来。这时,我们给出了第二个程序段:

for ( k= 1 ; k

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

if (d

printf (“%d\n”, d );

}

提出了同样的要求。学生们读完后知道,此for程序段的功能是将键入的10 个整数中的非负整数打印出来。于是又开始对此程序段进行修改,而且很快编写出了不同方式的while程序段:

Ak=1; Bk=1;

while ( k

{ k++; { scanf ( “%d”,&d);

scanf ( “%d”,&d ); if ( d

if ( d

printf ( “%d\n”,d ); printf ( “%d\n”,d);

} }

可这两个程序段的功能却不相同,A段程序的功能与给出的程序功能相同,B段程序却是一共打印出了10个非负整数。

学生们展开了激烈的讨论,经过长时间的讨论、实验,得出结论:有continue的for语句转换成while语句时对应关系要调整,循环变量的位置一定要正确。

最后,我们给出了第三个程序段:

for ( k=1;k

{

scanf (“%d”, &d );

if (d

printf (“%d”, d );

k++;

}

仍然提出同样的要求,学生们又投入了新一轮的实践。按照刚得到的对应关系,两个程序段的功能又不一致了。按照原来的对应关系,两个程序段的功能一致。讨论、实践、痛苦地否定、再肯定。终于找到了问题的关键:continue和第三表达式。在教师的指导下,把for与while的对应问题分成了两类:不含表达式3的for语句的转换规则与包含表达式3并且不含continue的for语句转换规则一致;含表达式3并且含continue的for语句用新的转换规则。下课的时候,教室里一阵欢呼。

以上实例说明:在教师辅导的探究式学习模式下,学生不再处于被动接受的地位,在教师指导下的探索使教学效果大大提高。