《C语言程序设计》教学内容和方法之探索
2016-11-02朱瑛
朱瑛
摘要:开设C语言程序设计课程的指导思想是:通过掌握一门计算机语言,学会与计算机沟通交流,了解计算机解决问题的方式方法, 就类似我们掌握了自然语言,可以完整的表达自己的思想。
关键词:C语言程序设计;编程;方式方法;要素
中图分类号:G424 文献标识码:A 文章编号:1009-3044(2016)18-0097-02
近年来C语言作为计算机语言在国内外得到迅速推广应用,在程序语言使用中排名第二,只和排行第一的JAVA语言相差甚微。其功能丰富,表达力强,使用灵活方便,目标代码运行效率高,兼有高级语言与低级语言的许多特点,几乎所有操作系统都支持C语言开发。“C语言程序设计”在高校相关专业往往是编程的入门课,从“门外汉”变成“门内汉”的过程不仅需要学习基础概念、编程知识、编程方法,还需将自己的智慧转换成计算机能够识别的代码,这个转换过程需要我们学会用计算机的思维方式方法解决问题。所以,学习C语言、设计算法、编写程序的教学,就是对学生进行思维方式引导和培养的过程。
1 教学现状
C语言程序设计课程一般在大学低年级开设,该阶段的学生大多数没有编程基础,甚至于一些计算机的基础知识也似是而非,仅停留在计算机的使用上,对于计算机能够实现各种操作的原因不了解。刚开始许多学生认为学习编程和学习应用软件的使用一样,在不长的时间内就能够成为编程“高手”。而C语言程序设计作为编程的入门课,首先必须讲授编程的一些基本概念,比如常量、变量、数据类型、运算符、表达式等。这些内容相对显得枯燥,部分性急的学生要耐心学习。因为这些内容是编程的基础,需要学生深入掌握,由此对学生的心理就要有所把握。
随着教学内容的推进,有些学生慢慢跟不上进度,课上听得懂,但自己编程就不知从何入手,究其原因,其一是对算法没有掌握,其二是对这门语言了解不够。算法是编程的思路,有了算法,才可能写出程序,如果学生对算法不理解或者掌握不够,则直接影响编程。除此之外,如何将现成的算法用C语言描述出来,许多学生仍然不很熟悉。
2 教学内容与目的
C语言的教学是从常量、变量、运算符、表达式等基本概念开始,逐步引导学生进入与计算机沟通交流的初级阶段。这不仅要使学生掌握这些基本概念,还需要让学生理解这些就是编程的素材。C语言解决的所有问题最终都需要用语句来描述,而语句是由这些语言要素所构成,怎样把常量、变量、运算符、表达式灵活地组合成解决问题的语句,是编程的关键。类似我们把汉语的一个个单词组合成表达特定含义的语句,C语言的常量、变量、运算符、表达式相当于词汇,将它们组合成完成特定要求的语句。在结构化编程中,学生只能从总体到具体,逐步细化、逐步分解,只有知道计算机能够执行什么后,才能写出算法乃至程序。
学习编程语言很难像学习汉语一样,时时都有一个环境,只在课堂的时间接触C语言,熟悉的进程必然缓慢。课堂的作用仅在于接触、理解,而真正掌握则需要自己尽可能多的应用所学知识。也就是我们常说的“C语言的编程能力不是看出来的 ,不是听出来的,而是自己动手练出来的”。一个人知道很多汉语词汇,但不能将它们连成通顺的句子表达自己的思想,说明这个人表达能力不行。学习编程的过程中,如果只知道基本概念和知识,而不能灵活的用来解决问题,就没有意义了,因为掌握基础知识的目的是为了利用它们编写程序,让计算机完成我们交付的任务。
3 教学方法和策略
计算机只执行程序,不能告诉我们如何解决问题。我们编写程序,就需要考虑解决问题的思路和方法,并且让这些思路和方法能够在计算机上实现,这就是设计算法、编程。教学过程中可以使学生理解这些思路和方法,逐步接受计算机的思维方式,熟悉编程语言。
3.1目标定位
根据C语言的特点,将教学划分为三个阶段:第一阶段是基本语言要素,包括常量与变量、数据类型与操作符、程序的基本结构、数组与指针、函数;第二阶段是高级程序设计要素,包括结构体、变量的作用域、模块化程序设计、文件;第三阶段是课程设计,要求学生解决一些实用的问题。
第一阶段的教学可以为每章列出一个提纲,指出重点和难点。例如,讲授“操作符与表达式”时,重点强调C语言的许多语句都是通过表达式来描述,运输符的优先级和结合律是表达式的核心,如果牢记了运输符的优先级和结合律,在读懂程序的过程中就可以做到事半功倍,而数据类型、变量、常量则一带而过。这样既可以提高课堂效率,又避免学生因过于繁杂的内容失去耐心。又如,讲解数组与指针时,区分数组名与指针变量的相同与不同,许多学生还会纠结引入指针的必要性,但通过解释类似邮件快递的具体地址与惯常用名在收件速度上的不同,则增强学生对指针变量的理解。总之,难易结合,通过简单易懂的例子解释复杂问题,需要死记硬背的基本概念则通过读程序、改写程序得以加强,由此为自己编写程序打下良好的基础。
第二阶段的教学是在学生已经掌握基本语言要素的基础上展开。这时可以延续前面的教学模式,用少量的时间对知识要点大致讲述,不过多涉及细节问题,布置较大的案例程序进行分析和练习,总结所学知识。本阶段要遵循循序渐进的原则,先要求学生读懂程序,再修改部分程序、观察程序的运行结果,然后要求学生对解决类似的问题尝试着编写程序,最后摆脱开熟悉的命题,提出完全陌生的问题让学生解决。
第三阶段是课程设计,教师提出的选题要能调动学生的兴趣和参与热情,既实用又不至于让学生产生畏难情绪。例如,编写学生学籍管理、输出企业的人事管理等。该阶段是对前期学习的总结。
3.2设立案例库
案例库的质量将影响教学效果。因此案例必须:
1)典型性,能够覆盖课程的相关知识点。
2)实用性、趣味性,便于调动学生的兴趣。
3)针对性,要考虑到学生的接受能力。
4)系统性,案例间要相互联系。
例如,讲解数组与指针的时,列举了一个例子,给出利用下标法编写的程序,要求学生修改为利用指针编程。另外,提醒学生如何正确使用一维数组和二维数组。
例题:已知5个学生3门课程的成绩。求:(1) 每个学生平均成绩;(2) 每门课程的平成绩;(3) 总平均成绩。
思路:
1) 定义二维数组score[5][3]存储成绩;
2) 定义一维数组st_aver[5]存学生平均成绩;
3) 定义一维数组cu_aver[3]存课程平均成绩;
4) 定义变量aver存储总平均成绩。
源程序:
#include
int main()
{ float score[5][3];
float st_aver[5],cu_aver[3];
float sum,aver;
int i,j,t;
for(i=0;i<5;i++)
{ printf(“input a shudent score:”);
for(j=0;j<3;j++)
scanf(“%f”,&score[i][j]); }
for(i=0;i<5;i++)
{ sum=0;
for(j=0;j<3;j++)
sum=sum+score[i][j];
st_aver[i]=sum/3;}
for(j=0;j<3;j++)
{ sum=0;
for(i=0;i<5;i++)
sum=sum+score[i][j];
cu_aver[j]=sum/5;}
sum=0;
for(i=1;i<3;i++)
sum=sum+cu_aver[i];
aver=sum/3;
for(i=0;i<5;i++)
printf("%6.1f",st_aver[i]);
printf("\n");
for(i=0;i<3;i++)
printf("%6.1f",cu_aver[i]);
printf("\n");
printf("aver=%f\n",aver);
return 0;}
需要注意的是让学生自己编程,除了布置课后作业,课堂上的练习也非常必要。因为教师很难控制课后学生到底用了多长时间去编程或思考编程,但是让他们在课堂上的练习又要占用大量时间,这和紧张的课时有冲突,作者认为比较折中的办法是编程时教师多用板书,由此在板书过程中带动学生跟着思考,部分代码教师可以特意空出来,告知学生这部分代码要做什么事,然后可以由学生补充完整。
3.3项目教学策略
“大任务”与“小事件”是教学改革的核心。所谓“大任务”是指能够结合大部分知识点,并具有实用性,它是学生在经过C语言程序设计第一、二阶段的学习后,必须完成的项目。所谓“小事件”是某个具体知识点,可以是语言要素,也可以是一小段典型案例(例如,选择排序)。在整个教学过程中,“小事件”是“大任务”必要的准备,是实现“大任务”的基础;“大任务”是“小事件”的延伸和拓展,是“小事件”的综合运用,两者相辅相成。
例如,在完成第一阶段语言要素的讲授后,就布置课程的综合设计题目——学生成绩管理系统。将“大任务”分解成若干“小事件”,并标注出每个“小事件”涉及的知识点、解决问题的思路和着重点,让学生带着任务去学习,使学生有目的的吸取知识,提供学习效率,然后通过这个项目,将所学知识整合起来,完成一个实用系统。由此让学生认识到所学知识的意义,并更加激发其学习兴趣。
案例教学的目的就是要调动学生学习的主观能动性,让学生带着问题去学习、探索,在寻找解决问题方案的过程中掌握知识。
4 结论
学生掌握了C语言的基本要素后,通过将“大任务”分解成若干“小事件”,以“小事件”讲解为中心,对案例分析——分解——模拟设计——模块整合等几个环节组织教学的案例驱动教学方法,有助于提高学生的学习兴趣,有利于培养学生发散思维的能力。
“C语言程序设计”案例驱动教学模式是一种学生变被动学习为主动学习的有效方法,由于能够理论联系实际,让学生带着问题进入课程的学习,让学生改变以往混学分的思想,对这门课的认同度有了明显提高。另外,大大加强了师生间的互动交流,教学相长得以充分体现,部分学生还结合自己的专业和爱好,积极参与教师的科研工作,其探究能力和创新意识得到了较好的培养。
参考文献:
[1] 谭浩强. C程序设计[M].3版.清华大学出版社 2005.
[2] 谭浩强. C程序设计题解与上机指导[M].3版.清华大学出版社,2005.
[3] 吕忠宝. 项目教学法与传统教学法的比较[J].科技信息,2007(9).