基于专业培养目标的C语言教学研究与实践

2012-01-28 17:59宁禄乔王新昊康振华
中国教育信息化 2012年5期
关键词:指针C语言培养目标

宁禄乔,王新昊,康振华

(山东工商学院 管理科学与工程学院,山东 烟台 264005)

基于专业培养目标的C语言教学研究与实践

宁禄乔,王新昊,康振华

(山东工商学院 管理科学与工程学院,山东 烟台 264005)

本文首先从语法、语义和认知境界分析了C语言教学本质,然后根据信息管理与信息系统专业培养目标,结合学生实际具有的基础知识和基本技能,将C语言在教学实践中进行了结构调整;并参照工程考核要求,实行了新的课程考核形式。

C语言;结构调整;培养目标;工程考核

一、C语言在程序设计语言中的地位

C语言自从1978年被贝尔实验室正式发布以来,30多年历久弥新。另外从语法角度来说,C++、JAVA、C#均直接继承于C语言语法。因此,C语言作为程序设计语言的基础地位仍然无可替代。

二、C语言教学本质分析

C语言是一种属于机器的语言,所以对人来说,C语言就是一门新的外语。因此学习C语言与学习外语一样,都是易学难精。相比外语学习,C语言学习也是一个持续不断的过程,可以粗略分为三个境界:[1]

1.语法境界

在这个过程中,将主要学习变量定义方法、程序设计的三种基本结构(顺序、选择和循环)、函数定义及调用方法以及良好的编码规范等。对于语法问题,无论是谁,都只能去适应这门语言的规则,所以学生在学习C语言语法时普遍感到枯燥是可以理解的。

2.语义境界

在这个过程中,学习使用C语言完成某个特定的任务,比如“百钱买百鸡”、求素数、求最大公约数、求最小公倍数等经典编程问题。在此阶段主要解决使用C语言解决实际问题的能力。

对于这些C语言应用,学生普遍认为这些算法问题具有挑战性。这些题目经常成为C语言的考试内容,也是被很多学生认为能够从本门课程中学到的有用知识。

3.认知境界

在这个过程中,学习语言背后的计算机硬件、操作系统原理,学习与语言无关的算法设计 (包括数据结构知识),学习软件工程知识(比如分层体系结构等)等。在此主要解决如何按照工程要求(比如正确性、可靠性、可维护性、性能等)解决实际问题的能力。

对于这些知识,学生在结课时认识仍然是模糊的。当然,这也不可能仅仅通过C语言一门课程就能够让学生达到改变认知的地步,但这是四年信息管理与信息系统专业本科学习的目标之一。

三、C语言教学实践改革

因为课堂教学在本质上是不可分割的一个整体,例如在讲授“百钱买百鸡”例子时完全可以同时涉及语法、算法和认知这三种境界。基于C语言教学本质的分析,根据信息管理与信息系统专业培养目标,结合学生实际具有的基础知识和基本技能,将C语言在教学实践中从结构方面进行如下调整:[2]

1.淡化位运算讲授

作为计算机专业学生,应该掌握位运算。因为位运算不仅是一种基本运算,而且往往可以为工程提供一种高性能解决方案。但是作为信息管理与信息系统专业的学生,一方面位运算与计算机硬件高度相关,另一方面完全可以用其他方法来代替位运算解决方案,只是损失些性能而已。

2.弱化输入输出函数语法教学

虽然C语言的scanf和printf函数功能强大,但是能够正确运用却不是一件容易的事情,因为这里面涉及数据类型、数组、指针等众多内容。在输入输出基本通过GUI界面、数据存储大多经由DBMS的今天,熟练掌握scanf和printf函数已经不再是一种必需。

3.补充适当硬件知识

C语言提供的丰富数据类型让初学者有时难以理解:有必要如此区分整数和小数吗?不都是可以做四则运算吗?在不同数据类型统一运算时,因为自动类型转换得到的异常结果经常让初学者困惑不已。这个问题在编程语言层次上很难解释清楚,但是从硬件层次上却容易说明,因为其背后的硬件机理不同。

4.示范良好编码规范

在教学和上机实践中,始终贯穿并示范良好的编码规范。比如无论在循环中还是在分支中,坚持为程序块加上完整的块标志。在运算符的优先级讲述中,强调小括号可以改变并明晰计算的优先级,如此讲授不仅可以减少语法的讲授时间,同时也可以提高程序设计质量。在教学中有意识地示范如何在关键位置处加上调试输出语句,部分代替单步跟踪,提高程序调试效率。

5.强化程序设计方法教学

函数作为一个基础的程序设计工具,在实践中的地位非常重要,是软件工程、各种软件设计方法的实现基础。另外,在函数层次编程,可以锻炼一个人的问题抽象能力和模块划分意识。在教学中,有意识强化函数应用,比如要求以函数方式对问题进行设计,并且在上机实验中安排大作业,要求两个人协作完成,从而培养学生模块化问题解决意识和编程习惯。

6.侧重符合机器思维的算法讲授

在讲授如何求解最大公约数例子时,虽然辗转相除法效率很高,但是穷举法更容易理解和实现,而且也更加符合算法设计思维。辗转相除法对于专业软件来说意味着效率,但是对于初学者来说则意味着很高的门槛。对于常见的“数组越界”问题,采用的对策是让学生适应计算机从0开始的编址方案,尽管在初期学习中可能带来一些困难,但是如此坚持可以保证学生对计算机原理的理解上具有完整性和一致性。这样,采用一套理论就可以很好解决指针与多维数组的地址计算关系。

7.调整指针教学侧重点

为方便与后续课程的衔接(包括数据结构、数据库原理),重点讲授与一维、二维数组、结构体、链表相关的指针应用。而对于其他的指针应用(如函数指针、双重指针等),则概括性提及,让学生了解C语言指针的强大和灵活,从而更全面理解C语言指针的本质,以及由此带来的程序调试挑战。

四、C语言教学考核

在课程考核中,参照工程要求,抛弃以往的那种单纯考核语法的题目(尤其是那些不常用的语法),代之以符合良好工程编程规范的程序阅读题和程序设计题,分别通过笔试和机试进行。经过两年实践,发现此种考核方法更有利于反映出学生的真实水平,但是由此产生的问题是经常无法满足对考核成绩的正态分布要求,呈明显的阶梯状分布。☉

[1]孔垂柳,田地.基于程序设计思想的C语言教学方案[J].吉林大学学报(信息科学版),2005,8(23):5-6.

[2]叶幼林.对计算机C语言教学的探讨与研究[J].中南民族大学学报(人文社会科学版),2004,4(24):189-190.

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

(编辑:杨馥红)

G434

B

1673-8454(2012)05-0059-02

猜你喜欢
指针C语言培养目标
素质培养目标下经管“专业课程链”构建研究
垂悬指针检测与防御方法*
基于Visual Studio Code的C语言程序设计实践教学探索
论博物馆学教育的名实关系与培养目标
51单片机C语言入门方法
基于C语言的计算机软件编程
为什么表的指针都按照顺时针方向转动
高职高专院校C语言程序设计教学改革探索
小学美术教学中如何培养学生的动手能力
老年服务与管理专业高端技能型人才培养体系研究