APP下载

任务驱动教学法在C语言教学中的应用

2012-12-03李社蕾

中国教育技术装备 2012年33期
关键词:数组C语言编程

李社蕾

三亚学院理工学院 海南三亚 572022

C语言是一门非常重要的计算机基础课程,它既具有低级语言的特点,又具有高级语言的优点。而且C语言程序设计也是C++语言程序设计、数据结构等计算机专业课程的前导课程。现在许多高等院校将C语言作为理工科学生的第一门程序设计语言课程开设。C语言教学大都侧重于语法学习,教学的组织形式多是讲解语法,通过例题验证语法,最终的目的是掌握语法知识点。这样培养出来的学生只会读程序,不会写程序。

任何一种语言,都有一套定义语言的规则,这套规则称为该语言的语法。学习语言时,学习语法是其中较简单的内容,而学习怎样最充分地使用语言才是真正的任务。C语言教学的重点,就应该是培养学生的编程思想和运用计算机解决实际问题的能力。

任务驱动式教学法,是德国职业教育在20世纪80年代大力推行的一种“行为引导式的教学形式”。这种以任务为主体、以职业行为为引导的教学方法,学生在教师的帮助下,紧紧围绕一个共同的任务活动中心,在强烈的问题动机的驱动下,通过对学习资源的积极主动应用,进行自主探索和互动写作的学习,并在完成既定任务的同时,自觉产生一种学习实践活动,带着真实的任务在探索中学习。运用任务驱动教学法教学,任务的设计尤其重要,是任务驱动教学法研究的重要内容。本文研究任务驱动教学法在C语言中的应用,重点就是研究其中的任务设计。

C语言作为入门语言,对于首次接触计算机语言的学生来说,一切都是陌生的。大部分学生会感觉到C语言这门课和以前学习的内容脱节了,所有的概念都是新的,找不到一点儿自己熟悉的东西,感觉什么都不懂,对学好这门课没有信心。为此,本文设计任务的出发点在于设计的任务尽量接近学生,甚至是学生熟悉的内容,对不同的章节内容设计不同的任务。

计算机有两大功能:高速运算和海量存储。C语言的教学目的,就应该是培养学生运用计算机的这两大优势,通过C语言编程来解决实际问题的能力。

首先介绍计算机的工作过程。学生通过了解计算机的工作工程,可以帮助他们思考如何根据计算机的工作方式来控制计算机,如何通过计算机语言控制计算机解决实际生活中的问题。“冯·诺依曼”结构的计算机工作过程如图1所示。

在了解计算机的工作过程的基础上,提出具体的问题,寻求用C语言解决问题的方法和过程。根据解决问题类型的不同,将C语言内容分为七大部分,对每一部分分别设计相应的任务,循序渐进,逐步培养学生的编程思想和编程能力。

图1 “冯·诺依曼”结构的工作原理图

第一部分设计任务

任务:设计一个最简单的任务来用C语言解决,如求表达式“3×4+9÷3”的值。

学生一看这个表达式,很兴奋,这太简单了,小学生都会算,答案脱口而出;但当数值变大时,运算起来就有些麻烦了。用C语言来解决这个问题,学生的兴趣就被提起来了。首先介绍C语言的框架(声明部分、函数定义部分),然后引入常量、变量、运算符、表达式、数据类型、输入输出函数及顺序程序结构等相关语法内容的讲解,同时通过设计大量例题,利用这些语法知识点来编写程序,分析解决问题的思路。

第二部分设计任务

任务1:已知下面分段函数,输入任意x的值,求y的值。用C语言编程实现。

看到这样一个分段函数,首先分析解决这类问题的思路,发现用前面的知识无法解决问题;然后引入选择结构,引入if语句和关系运算符、关系表达式、逻辑运算符和逻辑表达式的讲解;最后通过设计例子(比如:判断一个三位数是不是水仙花数,求三个数中的最大数或最小数等)进行训练。

任务2:任意从键盘上输入一个百分制成绩score,按下列原则输出其等级:score≥90,等级为A;80≤score<90,等级为B;70≤score<80,等级为C;60≤score<70,等级为D;score<60,等级为E。

这个问题完全可以使用if…else…语句的嵌套来实现,但显然实现起来很罗嗦。为解决这样的问题,引出switch语句的讲解,然后列举生活中能够应用switch结构的实例进行训练。

第三部分设计任务

任务1:求解“1+2+3+4+…+100”,“1*2*3*4+…*100”。

这样的问题用前面学过的内容解决,要写两个很长的表达式,在这个问题的基础上引出for、while和do…while的讲解。通过设计大量的例子,如兔子问题、猴子吃桃问题等,反复训练。

任务2:求“1到100之间的素数”。

编写程序,并分析程序的执行效率,分析编写程序应考虑的两个重要因素:时间复杂度和空间复杂度。引出break和continue的使用。

第四部分设计任务

任务:根据一个学生N门课的成绩,计算他的平均成绩;一个班50名学生,每位学生有N门课成绩,计算本班级某一门课的平均成绩;对学生成绩从大到小排序。

用前面学过的内容解决该问题,需要分别定义N个变量和50*N个变量,显然不是解决问题的好方法。分析问题的特点,引出对数组这一构造数据类型的学习。引入解决排序问题的方法,通过冒泡排序和选择排序等排序方法的介绍,掌握解决排序问题的方法。

图2 C程序的结构框架

第五部分设计任务

任务1:编程求解表达式“1!+2!+……+100!”的值。

任务2:设计程序求一个班学生的各科成绩的平均分、最高分和最低分的差。

用前面学习的方法解决此问题,出现大量的重复代码。为了精简程序,减小编程工作量,引出函数的概念,其中包括函数的定义、组成部分、函数的声明、函数的调用、嵌套调用和递归调用等内容,进而引入模块化设计的思想。

引出C程序的结构框架,如图2所示。学习C程序的结构框架对于学习C语言非常重要,它使得学生对C语言有一个整体的认识。C程序的结构框架指出C语言是如何构成的,以及怎样围绕问题构成C程序。

第六部分设计任务

任务:在程序里表示一个学生(学号、姓名、年龄、性别……),怎么表示?

char number[10];

char name[12];

unsigned int age;

char sex;

想表示多个人呢?定义多个数组?例如:一个班的学生,每个学生(学号、姓名、年龄和数学成绩、英语成绩)打印指定学号或姓名的同学的各科成绩。

分析这一问题,考虑用数组来解决,但数组中的数据有一个重要特点,就是类型相同;现在学生的各项信息,类型不同,考虑定义多个数组;这样各数组相互独立,一个学生的信息被分散在多个数组中,使用起来非常不方便,从而引出结构体和共用体来解决,同时引入顺序查找和折半查找等方法。分析存储方式,可以采用数组;利用数组存储遇到一个问题,如果这个信息需要不断更新,不断地插入和删除学生的情况下,就遇到问题,这样就引入动态存储,引入指针数据类型。分别使用顺序存储和链式存储编写出程序,体会两种存储方式各自的优缺点,根据具体问题的需要选择存储结构。

第七部分设计任务

任务:考虑一个分院或者一个学校的学生信息的存储和处理问题。

这种情况下,因为信息量太大,内存的容量有限,从而引出与文件操作相关内容的讲解,将信息存储在硬盘上。

总之,C语言课程各部分的教学过程应从任务设计入手,提出问题,分析怎么解决问题,进而引出语法知识点。一方面通过合理的任务设计,将C语言的语法知识点紧密联系在一起,用贴近实践的方式让学生学会C语言理论知识;另一方面,针对特定任务分析问题、提出思路、编程实现的过程,也正是培养学生的编程思想的过程。教学观念和教学思想不断改革,才能符合教学发展的要求,这样培养的学生才能满足社会的需要。在C语言的教学中虽存在很多问题,但也不断涌现出更多更好的解决办法,要用不断创新的眼光去发现。

[1]卢素魁,唐文彦.从学习C语言看学习程序设计的方法[J].河北大学成人教育学院学报,2000(6):53-54.

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

[3]陈奋.提高C语言教学质量初探[J].厦门教育学院学报,2005,8(2):71-72.

[4]项响琴.浅谈程序设计语言C的教学改革[J].电脑知识与技术,2008(11):1166-1168.

[5]纳普尔.高等教育与终身学习[M].上海:华东师范大学出版社,2003.

猜你喜欢

数组C语言编程
JAVA稀疏矩阵算法
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
基于Visual Studio Code的C语言程序设计实践教学探索
JAVA玩转数学之二维数组排序
纺织机上诞生的编程
基于C语言的计算机软件编程
Excel数组公式在林业多条件求和中的应用
高职高专院校C语言程序设计教学改革探索