C语言程序设计实验教学探索

时间:2022-04-26 02:42:56

C语言程序设计实验教学探索

摘要:分析C语言程序设计课程的特点;探讨如何在C语言程序设计实验教学中采用科学的实验教学手段,培养学生的学习兴趣,提高学生用C语言解决实际问题的综合能力;对C语言程序设计实验教学提出一些可行的探索方法。

关键词:C语言;实验教学;实践能力

C语言程序设计课程是计算机和软件专业学生接触的第一门专业基础课,也是许多高等院校非计算机专业学生的一门必修公共基础课,是高等院校的重点课程之一。它的应用领域非常广泛,既可以编写系统软件,又可以根据用户需要编写应用软件。C语言具有较强的逻辑性,处理问题周密、严谨。学生一旦掌握了C语言,就可以较为轻松地学习其他任何一种程序设计语言。因此,C语言成为学生学习程序设计的入门课程,而C语言程序设计是一门实践性很强的课程,实验教学是该课程不可缺少的重要组成部分。

C语言的数据类型较多、表达式丰富、语法结构复杂,它也是教师难教、学生难学的课程之一。由于种种原因,传统的实验教学多是学生按实验教材和教师指导的程序一步一步完成,学生虽然有一定收获,但是也束缚了手脚。学生完全是被动的接受者,没有充分发挥主体作用[1]。因此,我们需要更新理念,在实验教学环节中不断探索,用实验教学拓广课堂教学,使学生真正领会并掌握程序设计的基本思想和基本要领。实践教学是大学本科教学的重要组成部分,应不断探索其新的教学模式和教学方法,以提高大学生的综合素质和创新能力[2]。

1加大实验教学管理力度

为了培养学生应用所学知识解决实际问题的能力,树立学生的团队合作精神,锻炼学生的逻辑思维能力和创新思维能力,我们加大了实验教学的管理力度,组建了一支由6名教师和2名博士生组成的结构完整的实验指导梯队,由4名主讲过C语言程序设计课程的老师主要负责解答专业方面的问题,并对学生加以引导,重点培养学生的自主学习能力和创新意识;两名实验室的指导教师在开发环境的应用方面给学生提供强有力的支撑;两名博士生发挥其编程能力强、掌握新技术等特长,在算法的程序实现上,给予学生更多的指导。

实验教师的水平与修养对学生的影响是巨大的,所以实验教师应不断提高自身理论与实践水平,钻研业务。在每次实验课开始前,我院担任实验指导的老师们都集中到一起,从实验内容的具体安排到实验中学生会遇到的问题等,都会进行讨论。在管理上,我们更加强调了分工责任制,每个老师负责哪个班的哪些同学,都做了明确规定,从答疑到验收,都由这个老师主要负责。有了这样一支实验指导梯队和相应的管理策略,就为完成实验教学任务、达到良好的实验效果提供了必要的保证。

2探索实验教学方法

C语言程序设计实践性非常强,学生只有通过实践才能真正理解其含义,真正掌握其本质并学会编程。尽管学生学习C语言有不少困难,但兴趣是最好的老师,要最大限度地激发学生的学习兴趣。有了兴趣,学生就能积极地思考,大胆地探索,变被动接受为主动思考。因此,实验教学总的思路就是要以激发学生兴趣为主线,充分发挥学生的积极性和创造性。

2.1抓好实验预习工作,培养学生良好的学习习惯

每次上机实验之前,就要布置好上机任务,要求每位同学做好预习,写出上机实验的内容、编好程序、准备好调试所需的数据,并进行初步的结果分析,对每个题目做到心中有数,避免学生上机实验时现看教材、现编程序的现象。长期如此,便可养成良好的学习习惯,学习效果自然就有很大的提高。

例如,在选择结构编程练习实验前,我们给学生布置了这样一个实验题目,编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:

操作数1运算符op操作数2

来计算表达式的值。指定的运算符为加(+)、减(-)、乘(*)、除(/)[3]。这道题学生拿过来一看非常简单,只是简单的输入与输出与条件判断。

有的同学定义了两个float型变量a、b来分别代表两个操作数,两个char型变量c、answer来分别代表运算符和答案。用scanf函数读入数据:

scanf("%f%c%f",&a,&c,&b);

学生在程序编译通过后发现并没有得到预想的结果,程序好象“提前”结束了,而且编译没有问题,错误不易被检查出来。学生这时就会产生好奇,得不到正确结果的原因是什么?为什么有的同学的程序看起来与自己的完全相同却能得到正确结果?

经过启发研究,通过跟踪变量发现,发现是scanf函数读取缓冲区中数据的问题。学生在输入运算符时为了与两个操作数相隔,两侧都用了空格。所有的scanf语句都执行了,并没有提前结束。只不过有的scanf读取到了空格符而已。学生恍然大悟:原来看似简单的问题实际上并不一定那么简单。这样在实验课中,学生带着问题去修改自己所编写的程序,观察修改后的结果,实际上就是了解改动部分在整个程序中所起的作用,这种作用的认识和理解不是通过说教得来的,而是他们亲身体验的,学生对它的理解、记忆就要深刻得多,同时还体会到实验预习的重要性。

2.2锻炼学生发现问题、解决问题的能力

在每次实验课开始时,实验教师对上一次主讲教师讲课的内容作简要回顾,对本次实验的重点、难点以及一些基本算法、编程思路、解题技巧进行必要的分析和讲解,让学生对本次实验的大致思路和目的心中有数。教师主要起引导的作用,实验前的讲解以重点、难点和注意事项为主,不应面面俱到,可以先给出一些问题,让学生带着问题去做、去观察、去思考。实验中,应以学生为主体,使学生成为真正的主人。

有些问题看似简单,实则包含着很多内容,再简单的程序都要结合语言的自身特点,以一种最优化的结构去表达,不能忽视任何小问题。比如有这样一个程序:用近似公式

e=1+1/1!+1/2!+1/3!+……+1/n!

求自然对数的底e的值,取n为10(n的值越大越接近e的真值)[4]。

#include

main()

{

int n;

float e,p;

for (n=1;n

{

p=p*n;

e=e+1.0/p;

}

printf ("e=%10.7f\n",e);

}

对于初学者来说,写出这样的程序还是不错的,无论从语法上还是语义上都没有错,可是上机运行时就会发现结果为2.919978×1039!很明显这是错误的,大家都知道e的近似值是2.718。

通过上机调试,学生会发现:只是因为变量未初始化,就会给结果带来这么大的偏差,从而深刻体会到使用未初始化的变量有多么危险。这类细节问题还有很多,只看书是体会不到的,只有通过自己动手动脑,才能积累实践经验,真正提高。因为编译通过,不等于程序正确;一种输入正确,不等于所有的输入都正确;一次运行正确,不等于次次运行都正确。程序总会出一些莫名其妙的错误,想解决这些错误,唯一的手段就是动手调试(Debug)[5]。同学们多动手,不仅可以发现程序中存在的问题,同时也可以充分地感受到自己分析问题、解决问题的乐趣。

2.3培养学生创新精神,向研究型、个性化方向发展

在具体指导实验的时候,教师要由以往扮演的主导者、支配者转向指导者、欣赏者,由台前退向幕后,由显性的中心地位退向一个隐性的指导地位,实现指导方式的转变,培养学生的创新精神、研究能力。对大部分学生,应避免直接回答他们提出的问题,而是作出必要的提示,引导他们去查阅教材和笔记,认真思考与分析,找出错误的原因,自己解决问题。提倡创新、个性化,同一问题可让学生寻找不同的解决方案。如在讲到循环时的猴子吃桃问题,猴子第一天摘下若干只桃子,当即吃了一半零一个,第二天又吃了剩余桃子的一半零一个,以后每天都吃前一天剩余桃子的一半零一个,到第十天想吃时,发现只剩下一个桃子了,求第一天猴子共摘了多少桃子[6]。有的同学用循环来解决此问题,而有的同学用递归的方法解决,让学生比较各个方案的优劣,好的解决方案向更多的学生推广,从而使每位同学的创新思维大大加强。

创新人才的培养,重在创新能力的培养。这种实验教学方式,给了同学更大的创造空间。

3改革课程考核方式

网络的应用给我们的实验教学提供了很好的平台。比如我院有课程网站,包含全校的计算机类教学。以C语言程序设计网站为例,其中包含讲义、实验指导书、教学课件,还包含自学需要的素材库、试题库以及考试系统等丰富的教学资源和软件[7-8],学生还可以在上面提交作业、讨论问题。它们自成体系又相互关联,学生对课程的高层次需求在课程网站上得到极大的补充,满足了各专业不同层次学生的需求。

目前很多高等院校C语言程序设计课程学习成绩的评定,仅以期末一张考试卷的好坏而定,这使得很多学生不重视实验课,认为实验课上的好与不好对成绩影响不大,很多学生重理论、轻实验。我院对考试进行大胆的改革,采用自主研发的“机考系统”来考核学生,所有的考试都在计算机上进行,学生答完试卷,马上能看到自己的考试成绩,并能看到细节部分:即在哪个位置丢分了。教师从最初上课时就明确告诉学生这种考核方式,使学生从思想上重视实验;每次上机实验也让学生在机考系统的环境下提交程序,作为平时实验的成绩,训练学生的编程速度,锻炼学生在指定时间内完成实验题的能力,培养、提高学生学习的自觉性、实践意识及编程能力。

4结语

几年来,为上好C语言上机实验课,很多教师不断探索,想方设法让学生从枯燥的语言学习中解放出来。学生通过实验进一步理解了知识,更加直接简便地掌握了课程的重点、难点,实验教学质量得到很大提高。

参考文献:

[1] 周国安. 改革实验教学 加强科学实验能力培养[J]. 实验室科学,2006(1):28-29.

[2] 叶枫. 深化实验教学改革,不断培养创新人才[J]. 实验室研究与探索,2008,27(10):103-105.

[3] 苏晓红,孙志岗. C语言大学实用教程学习指导[M]. 北京:电子工业出版社,2007:168-168.

[4] 段兴. C语言实用程序设计100例[M]. 北京:人民邮电出版社,2002:267-268.

[5] 苏晓红,陈惠鹏,孙志岗,等. C语言大学实用教程[M]. 北京:电子工业出版社,2004:174-174.

[6] 谭浩强. C程序设计[M]. 2版. 北京:清华大学出版社,2002:120-120.

[7]国家级精品课程,教育部-微软精品课程,黑龙江省精品课程,国家教育部双语教学示范课程网站[EB/OL]. [2010-06-12] //elite/.

[8] 乐学网C语言程序设计[EB/OL]. [2010-06-12]. /course/view.php?id=8.

C Programming Language Experimental Teaching and Practice

HAO Hui-xin, LI Xiu-kun, XIA Qing-quan

(School of Computer Science and Technology, Harbin Institute of Technology, Harbin 150090, China)

Abstract: This article analyzes the characteristics of C Programming Language, discusses how to use scientific teaching means and methods in C Programming Language experiments to develop students interest in learning, to improve students ability of solving practical problems with C language, made some possible ways on C Programming Language experiment teaching.

Key words: C Programming Language; experimental teaching; practice ability

上一篇:“人工智能与游戏编程”课程设计 下一篇:从计算机专业就业难谈高校教育改革