C语言程序设计案例教学模式的探讨*

2011-08-15 00:54:59丁海燕
云南开放大学学报 2011年3期
关键词:数组程序设计编程

丁海燕

(云南大学信息学院,云南昆明650091)

C语言不仅具有丰富的运算符和数据类型,便于实现各种复杂的数据结构,而且通过位运算和指针还可以直接访问内存的物理地址,既可以开发应用软件也可以开发系统软件,由于其强大的功能和优点,成为计算机及相关专业首选的高级程序设计语言之一,然而,由于C语言涉及的概念和规则繁多,指针使用灵活,初学者普遍反映概念抽象、学习困难,期末考试不及格率高,实际掌握的情况并不理想。因此如何改进教学方法,以激发学生的学习兴趣和自主性,增强动手能力和编程能力,是计算机教育工作者值得思索的问题。

一、案例教学法的真正含义

传统的程序设计教学过程中也通过使用各种例题来讲解和说明语法和知识点,但教学方法还存在诸多不足,例如“老师讲、学生学“的单向式教学模式,以及重语法、轻程序设计能力,或者把案例教学等同于教学案例,没有掌握案例教学的本质,学生学完该课程以后知识点零散,缺乏系统性,不具备良好的软件开发能力。因此我们必须转变教学观念,进一步研究面向研讨型课程的案例教学模式。

案例教学是目前国内外比较流行的一种教学方法,被普遍应用于医学、法学和管理学等学科的教学。[1]所谓案例教学模式是一种互动式的教学方法,以对案例的分析解决为主线,教学内容围绕案例的讨论、分析逐步展开,通过对案例中的问题进行分析,激发学生的求知欲,调动学生的积极性,使学生主动地思考,掌握其原理和方法,教师适时引导和评判,让学生充分讨论并发表各自的见解,最后推导出结论。[2]通过案例教学法在C语言教学中的应用可以实现启发式教学,更好地激发学生的学习兴趣和参与的积极性,同时,有利于学生掌握理论知识,并运用知识解决软件开发中的实际问题,提高编程水平和能力。

二、设计C语言案例是案例教学的基础

在传统的C语言的教学方法中,教师通常是先讲解语法规则,再举例说明。而案例教学法则要求先设计案例,然后教师和学生一起分析讨论,由案例引出新的知识点,教师再根据案例的情景要求讲解新的知识点。[2]因此教学案例是实现案例教学法的前提和基础,教学案例并不是简单的举例,要求案例所涉及的知识点要能涵盖该课程的绝大部分知识,并且具有目的性、系统性、针对性、可实践性和启发性。以下从三方面介绍如何选择案例进行教学。

(一)选择小型经典案例,掌握算法思想。

程序设计的关键是算法设计,C语言课程的真正目的在于使学生掌握程序设计的基本方法,因此,教师要培养学生以算法为中心的思维方式。很多C语言教材大多注重于语法规则、语句的介绍,缺乏生动、实用的例题。我们知道,兴趣是最好的老师,为了使学生能尽快地掌握C语言的语法,进入计算机编程领域,在教学过程中,应当选用具有趣味性、实用性的例题,如“鸡兔同笼问题”、“求水仙花数”,吸引学生的兴趣,使学生体会到编程的成就感。教学内容的进度安排应当采用循序渐进的方式,围绕数据类型、运算符、表达式、输入和输出函数、常用库函数、选择和循环控制语句、数组、函数、指针、结构体、共用体、文件这条主线来开展教学,通过案例来阐述理论和常见算法。在C语言中常见算法有:

1.连加与连乘。对于连加/连乘的问题,常采用循环实现,可能用1+2+……100或n!的例子进行说明。

2.数的算法。如素数、同构数、水仙花数、最大公约数等。

3.排序。排序是一维数组很重要的应用之一。常见的有冒泡排序和选择排序,通过双重循环分别控制比较的趟数和每趟比较的次数。找出一维或二维数组的最大值、最小值及其下标,也是通过循环来实现的。

4.与字符串有关的算法。例如:从字符串中删除某指定的字符,字符串的合并,比较字符串的大小,计算字符串的长度,将字符串中的内容逆置等。通过这些案例,使学生熟练掌握各种常见问题的解题方法和步骤,即掌握编程的核心——算法,增加学习信心、提高学习兴趣,并为以后软件开发奠定基础。

(二)选择常见出错案例,提高上机编程能力。

任何一门编程语言的学习,都离不开上机实践操作,上机实践是培养程序设计能力和程序调试能力的重要途径,只有通过大量的编程实践才能逐步提高编程能力。C语言的教学目标就是使学生掌握C语言的语法,掌握结构化程序设计方法,能够编写、调试和运行规范、可读性好的 C程序。[3]离开了上机调试,程序设计将成为“纸上谈兵”。只有在调试程序,不断地改正程序错误的过程中才能充分掌握语法知识,领悟算法思想,培养出结构化编程的思维方法。因此,加强上机实践,提高学生的实践能力是改善教学效果的主要途径之一。

然而初学者由于对C语言的语法以及编程的逻辑思维方式还不熟悉,往往检查不出程序中的错误。一个源程序中的错误分为语法错误、逻辑错误、算法错误、和运行错误。通过编译可以排除语法错误,其他三类错误,可以借助C语言的调试工具来查找。为了提高学生调试程序的能力,可以选择一些上机经常遇到的错误案例,让学生自己调试程序并改正错误,然后分析和总结错误类型和原因,从而不断提高学生的算法设计能力。例如:求数组中的最大值及最大值的下标。

main()

{int a[4],max,i,m;

for(i=0;i<4;i++)scanf(“%d”,&a[i]);

max=a[0];

for(i=1;i<4;i++)if(a[i]> max){max=a[i];m=i;}

printf(“%d%d”,max,m);}

这个程序仅当最大值为第一个数运行结果不对,让学生分析出错原因,若第一个数就是最大值的话,则if语句的条件从未成立,因此m=i;没有被执行过。而下标变量m没有赋初值,系统随机赋了初值,导致结果错误。因此应当在循环外首先给m赋初值0。再例如:

int a=5;printf(“%f”,a);会出现运行时错误。因为a是整形变量但输出格式说明符%f却是实型数据,正确的写法是int a=2;printf(“%d”,a);通过让学生调试运行这个错误案例,分析出错原因,学生可以总结出:在输入/输出函数中,输入/输出参数的个数与类型必须要与格式说明符一致。

通过分析、调试错误案例,有利于学生在问题的切磋、琢磨中明辨是非,加深对知识的理解,从而使学生的程序设计能力螺旋式上升。由此可见,案例教学正是从实践中的问题出发,启发和引导学生去积极思考,经过分析讨论,最后又重新归结到问题的解决之上,这种主动获得知识的方式完全不同于“填鸭式”的被动学习。

(三)选择综合性案例,将知识转化为能力。

在教学案例的选择上还要注重系统性,要能够体现知识点之间的联系。例如要处理多个相同类型的变量,就引入了数组的概念,可以通过计算班上某一门课程10位同学的平均分的程序引入一维数组的知识点,再用实现10位同学3门课程计算每个人的平均成绩来引入二维数组的知识点;若每个学生都有学号、姓名、性别和多门课程的成绩,要处理这些类型不相同的数据项,就需要引入结构体,逐渐增加问题的难度,编写函数,实现成绩查询、成绩统计、求平均值、利用结构体链表实现学生记录的添加、删除、插入、查询等操作;学习文件时,通过将学生的信息保存到磁盘文件中的程序或者从磁盘文件中读入学生信息进行处理的程序,使学生掌握有关文件打开与关闭、读写等函数的使用。[4]通过这样循序渐进设计教学案例,最终设计出一个简单的学生信息管理系统程序设计,使学生很容易地掌握案例所涉及的知识点。

在案例教学过程中,通过提出:“怎样才能使程序更完善”的问题,不断引出新的知识点,激发学习的求知欲和进一步深入学习的兴趣。并且通过案例教学,使学生体会到各章知识的连贯性,深刻认识到后续章节的内容是前面章节知识点的深化与扩充,达到学以致用的目的,才能有效地将知识有效地转变为能力。

三、C语言程序设计案例教学法的实施

案例教学法就是根据教学目标,设计有代表性的典型案例,通过学生和教师一起参与案例的分析、讨论,从中找出解决问题的方法和途径,因此案例教学本质上是研讨型教学。在实际教学过程中,案例教学法的执行步骤大致可以分为以下三个步骤,下面用一个例子来说明案例教学法的实施过程。[5]

(一)精心设计教学案例。

为说明数组的用法,设计一个案例:求10位学生的某门课程的平均分,最高分和最低分,供学生讨论。

程序一:

main()

{int x,i=0,max,min,sum=0;float ave;

scanf("%d",&x);

max=min=x;

for(i=1;i<=10;i++)

{ sum+=x;

if(x>max)max=x;

if(x<min)min=x;

scanf("%d",&x);}

ave=(float)sum/10;

printf("最大值为:%d,最小值为%d,平均值为%f ",max,min,ave);

}

程序二:

main()

{int x[10],i=0,max,min,sum=0;float ave;

for(i=0;i<10;i++)

scanf("%d",&x[i]);

max=min=x[0];

for(i=0;i<10;i++)

{ sum+=x[i];

if(x[i]> max)max=x[i];

if(x[i]< min)min=x[i];}

ave=(float)sum/10;

printf(“最大值为:%d,最小值为%d,平均值为%f/n”,max,min,ave);}

(二)组织分析与讨论案例。

案例教学过程中一个重要环节是学生参与问题的讨论。通过案例分析使学生主动提出问题,思考问题,与老师交流。在这一教学环节中,教师既是案例讨论的组织者,又是引导者、讲授者,要控制课堂讨论的进度和氛围。经过讨论,程序一是用一个变量x来保存10个分数,因此要通过10次循环反复输入变量x的值,并且每次输入值以后就要进行最大最小值的比较和累加的运算;而程序二由于使用了数组,可以用10个数组元素来分别保存10个人的成绩,然后再通过循环累加和比较最大最小值。数组的优势很明显,可以将多个相同类型的数据保存在同一个数组中,通过下标引用数组元素,这样在处理大量数据时更加方便。

(三)总结案例所涉及的知识点。

在学完循环以后,学生已经会用循环来处理多个输入数据,通过程序一的分析、讨论与总结,学生掌握了循环语句的用法,以及求平均值、最大值和最小值的方法。但是我们发现在程序一当中,数据一旦输入完毕就不能再处理这些数据了,因为这些数据只保存在一个变量中,除非使用多个变量,而要处理多个相同类型的数据,最方便的方法就是引入数组这种构造型数据结构,数组其实就是相同类型的一组变量的集合,并用通过循环控制数组下标变量就可以达到引用数组元素的目的。通过这样的案例分析,学生不仅掌握了求最值的算法、循环语句和数组的用法,而且由基本数据类型引申出了一种重要的构造数据类型——数组,在深度和广度上拓展了知识面。最后通过上机实践来实现案例,有利于学生把要求掌握的知识点理解透彻,理论联系实际。

四、小结

计算机程序设计课程的关键是培养学生编程的思维方式,采用案例教学,将抽象的概念、枯燥的语法、繁多的算法,化为一个个具体生动的实例,因此案例教学模式在程序设计教学中的应用,能够充分地调动学生学习的兴趣和积极性,而且案例教学在培养发现问题、分析问题和解决实际问题的能力等方面具有独特的作用。教学实践证明,在计算机教学中合理地使用案例教学,能够使学生变被动学习为主动学习,使学生能够轻松掌握计算机语言的编程技能,同时增强了学生的自信心,教学质量得到显著提高,取得了良好的教学效果。

[1]苗冬霞.浅析《C语言程序设计》课程的案例教学[J].武汉工程职业技术学院学报.2006,(2):90-92.

[2]雷海艳.浅谈现代案例教学模式[J].长春理工大学学报社会科学版)2007,(1):2830.

[3]董卫红.《C语言程序设计》的教学改革与实践[J].常州轻工职业技术学院学报.2007,(1):53-56.

[4]邱力,郭小平.《C语言程序设计》案例教学探讨[J].江西教育学院学报(综合).2006,(6):50-52.

[5]李玲.C语言程序设计[M].2008年.北京:人民邮电出版社.

猜你喜欢
数组程序设计编程
JAVA稀疏矩阵算法
电脑报(2022年13期)2022-04-12 00:32:38
编程,是一种态度
少先队活动(2021年2期)2021-03-29 05:41:04
元征X-431实测:奔驰发动机编程
编程小能手
学生天地(2020年17期)2020-08-25 09:28:48
基于Visual Studio Code的C语言程序设计实践教学探索
计算机教育(2020年5期)2020-07-24 08:52:56
JAVA玩转数学之二维数组排序
电脑报(2020年24期)2020-07-15 06:12:41
纺织机上诞生的编程
从细节入手,谈PLC程序设计技巧
电子制作(2019年9期)2019-05-30 09:42:04
高职高专院校C语言程序设计教学改革探索
寻找勾股数组的历程