《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]; /*前两个月加起来赋值给第三个月*/
}
}
这样,通过对两种解法的比较和分析,帮助学生更好地掌握循环语句和数组的概念。
改进授课方法,实现教学相长
我们要求学生事先预习,实际上就是要求他们课前自学,讲课时以学生预习过为起点,只讲难点、重点、有变化之处,这样既给了学生思维分析的余地,又节省课 时。这就要求必须精选教学内容,注意详略安排的合理性。在章节间的授课安排也注意了详略得当。如在讲到“选择分支结构”,“循环结构”这些关键性章节时就 讲的特别精,使学生做到非常熟练、透彻掌握的程度,而讲到“字符处理”章节时,让学生做到一般了解即可。课上经常找一些设计技巧比较好、解题思路比较精的 例题让学生自己“读程序”,找出精妙之处或不理解之处,对普遍性的问题共同讲解,个别问题课后解答。
我们有意地设置一些不同深浅的笔误 或口误,马上让学生肯定对与错,以考查学生注意力集中的程度,提高他们的敏锐性和判别能力。对有些问题,给出一种程序设计方法后,让学生讨论,还有没有其 它的程序设计方法和思路,让他们发表意见,提出自己的解题思路编程方法,给学生以表达已见、陈述思路、交流观点的机会。这就要求老师既有引导又能放开,既 有事先的精心备课,又有课堂上的因势利导,同时也可以从学生讨论中提出的问题来丰富教材内容,受到较好的教学相长的效果。
如讲授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%以上