C语言程序设计》教学的几点体会

作者:谢斌红(计算机科学与技术学院) 文章来源:原创 



 

摘要:C语言程序设计》是我院各专业的必修课程,也是我校非计算机专业开设的程序设计课程之一。针对目前程序教学的现状,围绕教学目标,结合国内外优秀编程语言的教学方法和模式,总结和积累教学实践经验,提出几点建议。

关键词: 教学改革;实验教学

C语言程序设计》是我院各专业的必修课程,也是我校非计算机专业开设的程序设计课程之一。作为计算机类的专业基础课,目的是使学生掌握程序设计的基本方法并逐步形成正确的程序设计思想,能够熟练地使用C语言进行程序设计并具备调试程序的能力,为后继课程及其他程序设计课程的学习和应用打下基础。对于非计算机专业来说,该课程有实际应用价值,为用计算机解决实际问题提供了方法,是后续理论和实践教学的基础和重要工具,同时也是计算机二级考试所统一要求的课程之一。

笔者多年从事《C语言程序设计》的教学工作,不断地总结和积累经验。在本文中,提出几点有助于学生在有限的教学时间内,以最快最简单易懂的方式,扎实地掌握C语言的内容,并能运用自如的建议,仅供大家参考。

一、 培养兴趣

恩格斯说兴趣与爱好是最好的老师。为了使初学者能尽快地掌握计算机知识,进入计算机的应用领域,在课程讲授过程中,要特别注意培养学生的学习兴趣。初接触计算机时,很多学生感到新奇、好玩,这不能说是兴趣,只是一种好奇。随着课程的不断深入,大量的规则、定义、要求和机械的格式出现,很容易使一部分 (甚至是大部分)学生产生枯燥无味的感觉。为了把学生的好奇转化为学习兴趣,授课时我改变过去先给出定义和规则的讲授办法,而是从具体问题入手,努力把枯燥无味的语言讲的生动、活泼。

在第一节课上,我就给学生找一些《高等数学》、《线性代数》等已学课程的问题,用算法语言来求解, 使学生体会程序设计的用途和一种全新的解决问题的方法。在课程的进行中,引导学生学一种算法,就尝试在同行课程中应用。我还经常介绍一些趣味性算例, : “菲波纳契兔子问题水仙花数竞赛记分,培养学生的学习兴趣,让大家积极主动、自觉独立地获取知识,打好学习程序设计语言的基础。整个教学过程中把解题思路、方法和步骤当作授课的重点,从而让学生明白如何分析并解决实际问题,逐渐培养学生进行程序设计的正确思维模式。

二、 循序渐进

绝大部分学生是第一次接受计算机语言,“通俗性、可接受性的教学原则同样适合于这门课的教学。在课程讲授过程中,不把重点放在语法规则的叙述上,而是放在算法和程序设计方法上,通常由几个例题引出一种语法规则,通过一些求解具体问题的程序来分析算法,介绍程序设计的基本方法和技巧,既注重教材的系统性、科学性,又注意易读性和启发性。从最简单的问题入手,一开始就介绍程序,要求学生编写程序,通过反复编写、运行程序来掌握语言的规定和程序设计的方法。同一个语法规则、同一种算法,在选择例题时也是由简到难,逐步呈现给学生。在学习上不要求学生死记语法规则,而是要求学生能把各个孤立的语句组织成一个有机的、好的程序。注意培养学生良好的编程风格,让学生在编制程序过程中不断总结、巩固,达到学会方法、记住语法规则,提高设计技巧的目的。

菲波纳契兔子问题为例,在基本程序设计部分,可以启发学生使用循环语句,利用变量的交替赋值实现。

int main( )

{

long f1,f2;

int i;

f1=f2=1;

for(i=1;i<=20;i++)

 { printf("%12ld %12ld",f1,f2);

if(i%2==0) printf("/n");/*控制输出,每行四个*/

   f1=f1+f2; /*前两个月加起来赋值给第三个月*/

   f2=f1+f2; /*前两个月加起来赋值给第三个月*/

 }

}

  而在数组部分,可以启发学生采用直接的数组元素赋值来解决。

int main( )

{

long fib[20];

fib[1]=1;fib[2]=1;

for(i=1;i<=20;i++)

 { printf("%12ld",fib[i]);

if(i%4==0) printf("/n");/*控制输出,每行四个*/

   fib[i+2]=fib[i]+fib[i+1]; /*前两个月加起来赋值给第三个月*/

 }

}

这样,通过对两种解法的比较和分析,帮助学生更好地掌握循环语句和数组的概念。

三、改进授课方法,实现教学相长

要求学生事先预习,实际上就是要求他们课前自学,讲课时以学生预习过为起点,只讲难点、重点、有变化之处,这样既给了学生思维分析的余地,又节省课时。这就要求必须精选教学内容,注意详略安排的合理性。在章节间的授课安排也注意了详略得当。如在讲到选择分支结构”,“循环结构这些关键性章节时就讲的特别精,使学生做到非常熟练、透彻掌握的程度,而讲到字符处理章节时,让学生做到一般了解即可。课上经常找一些设计技巧比较好、解题思路比较精的例题让学生自己读程序”,找出精妙之处或不理解之处,对普遍性的问题共同讲解,个别问题课后解答。

在教学过程中,我还有意地设置一些不同深浅的笔误或口误,马上让学生肯定对与错,以考查学生注意力集中的程度,提高他们的敏锐性和判别能力。对有些问题,给出一种程序设计方法后,让学生讨论,还有没有其它的程序设计方法和思路,让他们发表意见,提出自己的解题思路编程方法,给学生以表达已见、陈述思路、交流观点的机会。这样既有引导又能放开,既有事先的精心备课,又有课堂上的因势利导,同时也可以从学生讨论中提出的问题来丰富教材内容,受到较好的教学相长的效果。

如讲授printfputs对字符串的处理,我采用下面的例子进行教学:

int main()

{char ch[3][4]={"123","456","78"};

int i;

for(i=0;i<3;i++)

{printf("%s",ch[i]);puts(ch[i]);}

}

结果是什么?

这个时候学生就会提出不同的看法,我们可以通过演示得出正确的答案是:

123123

456456

7878

这时我们进行分析,引导学生理解读取字符串和输出字符串时对字符串输出时‘\0’的处理方式,加深学生的认识。

四、作业、实习与考试

做作业是复习、练习的过程,也是继续和深入学习的过程。每次课后,我都给学生布置一些有代表性、恰当的习题,以巩固课堂上所学的内容。也通过学生所做作业的好坏来了解学生对课程内容的掌握程度以及教学效果。对作业中比较普遍出现的错误,我都要在下节课上当堂讲解,因为那是在上节课没讲清楚所致。作业中表现出与众不同的、新颖的程序设计方法和思路,也要当堂宣讲或作业批注,以鼓励这种另辟新径的有创意的学风。

每次上机前,都根据教学计划,有系统地布置上机实习作业,让学生明确上机任务,编写好上机调试的程序,使学生在每次上机实习中有收获。让学生按照自己的姓名、题号来编写程序文件名,调试成功后存入磁盘,课程结束后按调试完成程序的多少、优劣来评定实习成绩。在实习过程中,对一些操作难点,分组集中演示,也能起到事半功倍的效果。课程结束前我坚持进行课程总结,把所学的内容作一个分析,前后联系起来,使学生对课程内容能够融汇贯通。

   目前我院已将《C语言程序设计》课程确定为重点建设课程,通过详细规划,在有步骤、分层次、以点带面、保证质量和效果的思想指导下,通过几年来的努力,详细修订了教学大纲,细化了教学内容,设计编写了课堂教学样本教案、实验教案、课程设计样本和试卷库,使教学过程更加规范,制作了电子教案和辅助教学课件,提高学生学习兴趣和授课效果,课程建设取得了较大的成果。