姚建峰 李柏樵
[摘要]C语言程序设计是计算机专业学习中的一门基础课程,是培训学生对计算机程序设计学习兴趣的关键课程。分析C语言教学过程中存在的一些问题,并从方法论的观点出发,针对不同的学习阶段,运用不同的教学方法来提高教学质量。
[关键词]C语言程序设计方法论教学方法
[中图分类号]G642[文献标识码]A[文章编号]2095-3437(2014)10-0056-02本文主要从学习C语言的5个阶段来阐述如何把方法论运用于C语言教学中。
一、理解计算机程序设计语言的特点
计算机的实质是一种在指令的控制下运行的一种电子设备。计算机只能识别二进制编码的机器指令。因为机器语言难学,难记忆,所以在计算机技术的发展过程中,逐步出现了汇编语言,高级语言和面向对象的语言。所有这些计算机编程语言出现的目的都是想以尽量“接近”人类的语言来编写计算机程序。所有的计算机程序设计语言最终都要“翻译”成计算机可执行的机器语言,因此计算机程序设计语言即具有人类自然语言的特点,也具有“计算机”语言的独特之处。一方面,在学习计算机程序设计语言中,可以借鉴学习自然语言的方法来学习计算机编程语言,让学生容易理解、接受。如自然语言有字符集,那么各类程序设计语言也有他们各自的字符集。自然语言有语法法则,那么计算机语言也有语法法则,只有符合语言法则,计算机才能识别并翻译成机器语言。另一方面,计算机程序设计语言,最终要“翻译”成机器语言,由于CPU只能执行特定的某些指令,计算机程序设计语言的语法规则是由计算机语言设计者所设计,都是规定“死”了的法则,因此计算机程序设计语言不能像自然语言那样能够灵活使用。
二、透彻理解标识符、常量、变量、运算符和表达式
老师讲课时,应尽可能多运用各种教学方法讲课,如类别法,对比法等,把一些基础知识讲透彻,让学生容易理解、接受。如讲字符集时,可以用汉字字库来类别;讲标识符时,可以用“名字”来类别;讲常量时,一定要调动学生思维,让学生领悟到计算机是如何识别常量的,并运用对比法,理解各种常量之间的区别,如字符‘A与字符串“A”的区别,字符‘1与数字1的区别等等;讲变量时,讲清楚变量的数据类型、存储格式和可进行的运算操作。讲运算符时,这种强调运算符的优先级和结合性,并用数学中的优先级和结合性的实例进行类比。
三、理解C语言语句
语句是程序设计语言的重要组成部分,如果不把语句理解清楚,学生没办法编程。C语言语句包括:控制语句、函数调用语句、表达式语句、空语句和复合语句。学生极易在空语句和复合语句这两个知识点上犯错误。讲课时,不仅要讲清楚空语句和复合语句的概念,而且要结合控制语句一起,演示空语句和复合语句对程序结构的影响。现在用2个实例来分别说明空语句和复合语句对程序结构的影响。
例 1假设变量均已定义,执行下列语句的结果是()
for(i=1;i<=5;i++);
printf(“*”);
A *****B *C 有语法错误
本题好多学生一看马上选A,正确的答案是B,因为for语句括号后有1个分号,所以循环体是空语句,当for循环执行结束后,顺序执行后面的printf(“*”);语句,输出1个“*”。
例 2编一个程序,满足下面函数的功能:输入一个x值,输出y值。请判断下面程序是否正确。
y=-1(x<0)0(x=0)1(x>0)
main()
{ int x,y;
scanf(“%d”,&x);
y=0;
if(x>=0)
if(x>0)
y=1;
else
y=-1;
printf(“x=%d,y=%d ”,x,y);}
本例大部分学生都认为是正确的,认为else与if(x>=0)的那个if匹配,实际上else应与if(x>0)的那个if匹配,因为else总是与上面最近没有匹配的if向匹配。要使else与if(x>=0)的那个if匹配,可以再用一对花括号把if(x>0) y=1;这条语句括起来,由于复合语句里面的结构不能与花括号外面有联系,所以按以上方法加花括号后,就改变了程序的流程,使else与if(x>=0)的那个if匹配。修改结果如下:
main()
{ int x,y;
scanf(“%d”,&x);
y=0;
if(x>=0)
{if(x>0)
y=1;}
else
y=-1;
printf(“x=%d,y=%d ”,x,y);}
在讲完语句这部分内容之后,要及时给学生做总结,让学生深刻理解控制语句结构中语句可以是哪些语句。如 if(表达式) 语句,这里的“语句”可以是以下3种:
1.一条简单的语句;
2.由1对花括号括起来的1条复合语句;
3.只有1个“;”构成的空语句;
四、提高学生算法分析的能力
在教书过程中,好多学生总说老师讲的内容都懂,照着老师编程都会,就是当自己编程时遍不出来。这部分学生其实是算法分析能力较差,并不是C语句基础知识不好。在讲课时,首先让学生先把C语言抛在一边,理解题意,分析算法,并用流程图把算法描述出来,然后根据流程图编写程序。例如:从键盘上输入一个年份,判断改年是平年还是闰年。
1.让学生理解闰年的判断方法:(1)不能被4整除的肯定不是闰年,能被4整除的不能确定;(2)能被4整除但不能被100整除的是闰年,能被4整除且能被100整除的不能确定;(3)能被4整除又能被100整除同时也能被400整除的是闰年,能被4整除又能被100整除但不能被400整除的不是闰年。
2.画N-S流程图。
■
3.根据N-S流程图编程。
main()
{intyear,leap;
scanf(“%d”,&year);
if(year%4==0)
if(year%100==0)
if(year%400==0)
leap=1;
else
leap=0;
else
leap=1;
else
leap=0;
if(leap)
printf(“%d is a leap year. ”,year);
else
printf(“%d is not a leap year. ”,year);
}
一般题目经过这3步后,学生比较容易理解、接受。训练一段时间后,算法分析能力逐步提高,编程就不在困难了。
五、提高调试程序的能力。
学生编程出错在所难免,关键是如何让学生快速地找到错误并快速更改过来,确实是一件不容易的事。程序错误可以分为语法错误和语义错误。对于语法错误,编译器可以查出来,并可以定位错误,一般错误就是在指定的那行,如果那行没有错误,就向上找,如果再找不出来,就看程序的整体结构。对于语义错误,让学生自己把程序“执行”一遍,分析错误的结果是怎么执行出来的,然后通过对比,就可以发现语义错误。
[参考文献]
[1]谭浩强.C程序设计第三版[M].北京:清华大学出版社,2005,.
[2]化志章,揭安全,钟林辉.Java程序设计—从方法学角度描述[M].北京:机械工业出版社,2012.
[3]卢照,南丽丽,杨秀荣.C语言程序设计教学中问题和改进方法的探讨[J].现代计算机,2012,(1).
[责任编辑:左芸]