浅议C语言程序设计教学

时间:2022-10-25 02:53:42

浅议C语言程序设计教学

摘 要 C语言是一门计算机常用语言,兼具高级语言与低级语言的优点,非常适合系统软件的编写。在信息时代的今天,C语言应该是每一位大学生所必须掌握的。在4年的C语言教学中,经过不断的理论探讨和实践摸索,总结了C语言的学习和教学的经验和方法。

关键词 C语言;

中图分类号:G652 文献标识码:B

文章编号:1671-489X(2013)24-0073-03

1 概述

C语言是一门常用的计算机语言,它的功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,兼具高级语言与低级语言的优点,因而特别适用于编写系统软件[1]。对于计算机专业学生以及想要在计算机行业工作的学生来说,C语言是必须要掌握的语言之一。笔者在本科院校和大专高职院校教授C语言4年,结合学习以及教授C语言的实践,谈一些经验和想法。

2 C语言教学中存在的问题

大学生的抽象思维几乎全部形成,同时也有着丰富的数学、物理、英语、语文等其他学科知识,在讲授新课的时候会相对轻松。但同时C语言对于大学生来说也是一门全新的课程,在讲授过程中也存在很多的问题。

2.1 学生缺乏学习的兴趣

笔者通过与学生的交流发现,很多学生在学习C语言课程时,目的仅仅是为了能够拿到计算机二级等级证书,对于C语言的学习没有浓厚的兴趣。由于一开始学习动机并不是很强烈,大部分学生不能够做到上课前预习、下课后复习,因此,教师在讲课的时候要注意学生学习兴趣的培养,并且注重课后作业的布置以及课前的巩固复习。

2.2 C语言知识点多,概念容易混淆

C语言语法知识点较多,规则繁杂,相对抽象,相关概念与知识点容易混淆。如:1)位运算符‘&’‘|’与逻辑运算符‘&&’‘||’容易混淆;2)赋值运算符‘=’和‘==’不好区别;3)字符串和字符变量容易混淆;4)i++和++i等;5)字符串和字符的区别;6)getchar()、gets()、fgets()和putchar()、puts()、fputs()。如果一开始学习的时候,学生没有弄清这些知识点,往往会在C语言后续学习过程中(如编程、运算时)出现问题。因此,教师在讲到这些知识点的时候,要注意区分。

2.3 学生没有利用好上机操作课

受传统教学模式的影响,教师在授课的时候往往会把课堂完全变成讲授型的课堂,采用“填鸭式”的教学模式,学生被动接受知识。同时,教师在讲课时过分关注理论知识的传授,而很少关注学生的实践练习,即使是在仅有的几节实践课上,学生想干什么就干什么,没有明确的实践目的和实践要求。因此,很多学生在做题目的时候还能得心应手,但是涉及相关实践操作时,就会缺乏思路,无从下手。

3 C语言教学相关建议与思考

3.1 采用例子激发学生的兴趣

在教学中,教师可以举一些生活中的例子来帮助教学,通过一个个比较形象的例子,帮助学生理解一些难懂的知识点。如在对变量进行赋值时,学生很难理解变量定义后一定要先赋值才能使用。在教学过程中,笔者参照王曙霞老师的方法,向一个空的粉笔盒里放一支粉笔,问学生:“盒子里面有几只粉笔?”学生都说有一支(0+1)。然后把粉笔盒放在身后增加几支粉笔,再拿到学生面前,往里面放了一支,问他们:“现在有几支粉笔?”学生都说不知道,因为不知道一开始有几支粉笔。同样,如果变量一开始没有给其赋初值,在对变量进行相关操作后,变量的值依然不能确定。采用这个简单的例子,学生就理解了为什么变量一定要赋初值。

再如在学习指针的时候,学生不明白什么是间接存取,笔者认为可以举如下例子:如果想要打开一扇门,我们可以直接把钥匙带在身上,然后直接用钥匙打开门;也可以为了安全,不把钥匙放在身上,而把它放在其他柜子里面,当要打开那扇门的时候,我们不是直接去找钥匙,而是去找柜子,然后把柜子打开取出钥匙,再用钥匙打开门,而C语言中的指针就是采用这种间接存取的方式。

3.2 利用学生原有的知识帮助学生掌握新的知识点

奥苏贝尔在其最有影响力的著作《教育心理学:一种认识观》的扉页上写道:“假如让我把全部教育心理学归结为一条原理的话,我会说:影响学习的最重要的因素,就是学习者已经知道了什么。要探明这一点,并据此进行教学。”[2]因此,教师在上课的时候应该充分利用学生已有的知识来帮助他们掌握新的知识。例如,编写“判断一个数是否为素数”的C语言程序时,教师可以先提问学生:在数学上什么是素数?(素数又称质数,指一个大于1的,除了1和它本身外,不能被其他自然数整除的自然数。换句话说,只有两个正因数——1和本身——的自然数即为素数。)具体怎么操作?根据数学上的计算,就是用1到该数之间的所有自然数(1和该数除外)去除这个数,如果其中出现一个数字能够除后没有余数,说明这个数字不是质数;但是如果所有的数字除后都没有余数,则说明这个数字是素数。这样,在与学生原有的数学知识相结合之后,这个程序就变得容易理解了。

3.3 充分利用上机时间来帮助学生巩固新知识

在教学过程中,教师应将理论讲解与实践操作联系在一起,可采用“两节理论课+两节上机课”的方式安排课程。每讲完一章知识点,布置通过不同方法实现相关程序的实践练习,让学生在实践课上完成。有了一定的任务,学生在实践操作课中就会变得积极,而不再是无所事事。例如,可以在上完第一章中“求两个数中较大者”的程序之后,布置学生编写一个程序来完成求三者之间的最大者的程序。再如,可以在完成“求两个数的最大公约数”的基础上,让学生思考如何编写完成“求两个或者三个数的最小公倍数”的程序。这样,学生通过自己的主动积极的思考,不仅可以加深对教师所讲程序的理解,还可以促进知识的正向迁移,养成学生积极编程的良好习惯。再者,教师在讲完一些习题之后,可以鼓励学生在上机课上通过计算机来检验答案的正确性,培养学生的信息素养。笔者发现,通过自己动手编程后,学生发现编程并没有想象中那么难,而是很有趣,从而达到培养学生编程兴趣的目的。

3.4 强调知识点间的联系与区别帮助学生学习

C语言是一种计算机编程语言,一般院校的学生在学习C语言这门课程之前可能已经有VB语言的基础,或者计算机的其他简单的知识。因此,教学时可以利用新旧知识之间的关系来帮助他们理解,利用VB中的原有知识的可辨别性加以区别新旧知识。例如,在C语言中学习选择语句、循环语句的时候,学生已经有了VB基础,这个时候可以采用比较组织者,把VB中的if语句和while,for循环语句的格式列在黑板旁边,通过与C语言中对应语句的相互区别,让学生知道两种语言中的语句在格式上存在很大的区别。再如,学习数组的时候,可以让学生重点区别VB中的数组格式是a(3,4),而C中的数组格式是a[3][4]。并且告诉学生,C语言不能像VB语言那样定义动态数组。

C语言入门较为简单,但随着知识的增加,层次会逐渐深入,内容也会更加难懂。因此,学习的时候适当采用前面所学的知识作为后面知识的一个框架,这样既利于巩固前面所学内容,又利于掌握新学的知识。例如,学生很容易掌握字符的内容,但当后面讲到字符串时,就会与字符混淆,导致字符知识记不牢,字符串又不理解的情况。这时可以在学习字符串之前,提供一个比较性组织者,采用提问的方式,让学生先来回顾字符的相关知识,然后在教师提示和个别学生的小声回答之下,把字符的大体内容在黑板的左上角板书:

1)字符的定义:字符是由单引号括起来的单个字符;

2)字符变量定义的关键字:char;

3)字符所需的内存空间的大小:在VC++下所占字节为一个字节;

4)输入和输出字符的函数格式:scanf(“%c”,&c)和 printf(“%c”,c),以及getchar()和putchar()。

利用这个比较性的组织者,可以让学生巩固字符的相关知识,使其不会与即将学习的字符串混淆。在这个基础上,再引入字符串内容,学生才不会混淆。在讲授字符串的时候,可以时时和字符进行对比。如讲授字符串输出的时候,引出gets、puts时,回到黑板的左边让学生看看字符是采用了什么函数,在这种情况下,利用比较性组织者,对学生掌握知识有很大帮助。

在教授文件知识时,相对于其他课程,大家对文件的概念比较熟悉,但是在C语言中却没有涉及过。讲授之前可以让学生想想,平时在计算机上编程时候,一般数据是如何输入,而数据输出又是输出到什么地方?这样,学生了解平时输入通常是从键盘上输入,而输出则是输出到屏幕上,就不难理解从文件中输入和输出到文件里是什么意思了。

3.5 通过总结来帮助学生疏通C语言知识点

概念图是一种以图的形式来组织和表征知识的工具,是用带箭头的线段对概念进行连接,以示概念间的联系。在学习中出示一张概念图,其主要目的是把要学习的概念通过图示进行组织,这样可以让学生预先有一个总括性的框架,从而起到“先行组织者”的作用。C语言的知识点比较多,内容相对来说比较紧凑,因此在教授的时候可以画出整体的大纲[3]。如在讲授课程语法知识的时候,教师可以呈现C语言的知识结构表(图1),让学生能够对整个C语言的知识有一个大体的掌握。

3.6 鼓励学生主动进行总结归纳

C语言的学习是需要学生自己主动思考和总结的,教师在课堂上应多鼓励学生对学习的知识点进行精细加工,培养学生自己多加总结的习惯。例如,计算机等级考试的C语言中关键字是常考知识点,但是书中只是进行了简单的罗列,不方便学生记忆。教师可以鼓励学生采用分类的方式进行记忆:数据类型关键字、控制语句关键字、存储类别关键字、其他的一些关键字四大类来进行归纳总结。

3.7 引导学生多读程序增加语感

对于程序,教师应该带领学生多读程序。讲解程序的时候,教师应该把程序编写的思路解释清楚,还要告诉学生拿到一个程序应该如何进行阅读。对于一些平时经常用到的程序,可以让学生在读懂的情况下进行记忆。如“判断素数的算法”“判断是否为闰年”“水仙花”“字符与数字之间的相互转换”“将数字进行倒序排列”“对二维数组进行赋值”“从字符串中删除不需要的元素”“大写字母如何转换成小写字母”“各进制数之间的相互转换”等比较简单且易懂的程序,应该鼓励学生进行简单记忆,为以后编程起到一个铺垫作用。

鼓励学生熟练掌握冒泡法、选择法、插入法以及折半查找法等不同的算法。对于一些比较难的程序,要帮助学生理清思路,知道程序编程的一个提纲,理清学生读复杂程序时候的思路。

3.8 课堂上应该多提问学生来促进学生的思考

教师在课堂上讲授知识点或者例子的时候应该多提问学生,促进学生积极思考,引起学生的认知不平衡,促进学生去接受新的知识。同时鼓励学生主动记笔记,保证学生上课思想集中,同时在抄写的过程中加深对程序的理解以及记忆。

4 结束语

教师应培养学生学习C语言的兴趣,引导学生多读程序,鼓励学生进行实践上机练习,采用多种方法编写程序。同时也要鼓励学生进行思考、比较,总结C语言中的知识点,提高学生解决问题的能力。虽然学生的学习状况有所改善,但是随着教材的深入,知识点的复杂,学生的学习效果仍然不能保证,仍需要教师进一步的探索和改善。

参考文献

[1]谭浩强.C程序设计[M].3版.北京:清华大学出版社,2005.

[2]奥苏泊尔.教育心理学[M].余星南,宋钧,译.北京:人民教育出版社,1994.

[3]吴良根.化学教学中“先行组织者”呈现方式及其应用[J].教育实践研究,2010(9):54-56.

[4]范印哲.教材设计导论[M].北京:高等教育出版社,2003.

上一篇:多媒体运用于幼儿教学研究 下一篇:发挥录播系统功能 实现优质资源共享