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

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

  笔者多年来为从事高级语言程序设计教学与实习,结合国内外优秀编程语言的教学方法和模式,不断地总结和积累经验并运用于教学实践之中,取得了较好的教学效果,有助于学生在有限的教学时间内,以最快最简单易懂的方式,扎实地掌握C语言的内容,并能运用自如。

  下面是笔者在C语言教学中的一点体会,仅供大家参考。

  培养兴趣

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

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

  循序渐进

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

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





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; /*前两个月加起来赋值给第三个月*/
 }
}

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





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]; /*前两个月加起来赋值给第三个月*/
 }
}

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

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

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

#p#副标题#e#

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

  如讲授printf和puts对字符串的处理,我们采用下面的例子进行学习:





#define N 6
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’的处理方式,加深学生的认识。

  作业、实习与考试

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

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

  教学网站的使用

  建立教学网站,包括课程资料,实验指导,网上答疑,知识自测等子系统。通过教学网站的应用,在教与学的过程中,从以教中心走向以学为中心,从以教师为中心走向以学为中心,充分发挥学生的主观能动性和创造性,在体认知生成过程中融入学生自己的创造性见解。

  通过详细规划,在有步骤、分层次、以点带面、保证质量和效果的思想指导下,以教学材料和教学经验相对成熟和覆盖面较大的课程为建设重点,我系于2003年将《C语言程序设计》课程确定为系级重点建设课程。通过近几年来的努力工作,课程建设取得了丰硕的成果,开创了基于层次主线模型的课程建设新模式,详细修订了教学大纲,细化了教学内容;设计编写了课堂教学样本教案、实验教案、课程设计样本和试卷库,使教学过程更加规范;制作了电子教案和辅助教学课件,提高学生学习兴趣和授课效果;提高了任课教师的整体素质;为其它课程起到了示范和积累教学经验的作用;学生的二级C通过率保持在85%以上。