C/C++语言程序设计课程教学方法的实践

2010-09-25 05:21鸿
科学时代·上半月 2010年6期
关键词:面向对象C语言程序设计

张 鸿

[摘要] 根据“C/C++语言程序设计”课程教学实践的经验,结合C/C++课程的特点,关于提高学生对学习程序设计的兴趣,培养和提高学生的分析问题能力、解决问题能力和创新能力等,谈谈在备课和教学方法上的一些研究和感受。

[关键词] C/C++语言程序设计换位思考对比教学法实例教学法启发式教学法

[Abstract] According to the "C/C++ programming language" teaching practice experience, combining the characteristics of the course of C/C + +, this article discusses the personal research and experience of preparing lessons and teaching method on how to enhance the students'interests to learn about the program designing, develop and improve the students' innovational ability when analyzing and solving problems.

[Key words] C/C++ programming language;perspective-taking; comparative method;case teaching method; heuristic teaching method

0 引言

C/C++语言程序设计是计算机专业中非常重要的一门专业基础课程,它是学习程序设计

的入门课程。大多数老师的授课内容都是经过深思熟虑之后提炼出来的精华,而对于初步接触编程的学生来讲,程序设计的概念和逻辑思维都是全新的。如何使得学生自然顺畅地接受新知识,这就需要老师们传达知识的技巧了。

我在学生时代以及工作中听有些老师讲课时,就是云里来雾里去,根本摸不着头脑,不知所云。为了尽可能避免学生听课和学习走弯路,同时为了加强学生对基本概念和理论知识的理解,培养和提高学生的分析问题能力、解决问题能力和创新能力,笔者根据多年来C/C++语言课程教学实践的经验,结合一些教学案例,谈谈在备课和教学方法上的一些研究和感受。

1 采用换位思考方法,提高学生问题意识

老师上课前都要经历备课阶段。我遇到的老师中,有些人备课是随便浏览一下讲稿或课件,认为只要知道所讲内容是什么就可以了。但是我觉得每个知识点的提出以及知识点之间的联系更重要,因此,备课时,我采用换位思考方法:我是学生,希望老师能说明所讲内容的前因、重要用途以及应用。带着这样的问题,我认真准备每堂课。

比如,在讲C语言中的输出函数printf()的用法前,我问学生这样一个问题:你们辛辛苦苦编写完了若干行代码,想不想知道结果如何呀?学生觉得好笑:当然要知道啦,不然费劲干吗。那我的答案也就很自然出来了:执行输出功能。这个问题也正进一步解释了算法的一个很重要的特点:必须至少有一个输出。部分学生当时在学算法特点时,还迷惑为什么必须有输出呢,而我提出的这个问题可起到一箭双雕的作用。

2 采用多种授课方法,提高教学质量

现在有很多学生对程序设计都不感兴趣,甚至感到恐惧。我认真做了调查,原因很简单:难理解,不知如何着手。针对这种情况,我尝试了很多方法,并且屡试不爽。现谈谈其中一些主要的授课方法。

(1)对比教学法

求学时代,听一位名人讲过这样一句话:对比中见真理。我把这句话应用在我的学习和工作中,深深体会了这句话的真理性。

比如,C语言中使用编译预处理命令中的简单的宏(#define)来定义符号常量,而C++中常使用const。仔细比较,原因很简单:虽然C++是C的超集,但由于宏命令是在编译前进行宏展开的,没有任何语法检查,非常不安全,故C++中使用const来取代简单的宏,也正验证了C++是强类型语言的说法。

另外,为了减少因函数调用和函数返回所花费的系统开销,C语言中使用带参数的宏(#define)实现功能简单且不含有复杂结构的过程,而C++中则采用内联函数。内联函数与#define预处理命令很相似。例如,

inlinechar min(char c1,char c2)

{ return c1

#define min(c1,c2) ((c1)<(c2)?(c1):(c2))

二者主要区别:

① 内联函数在扩展时,系统要检查参数类型;而宏展开只作简单的替换,不会进行语法检查。

② 如果将表达式传递给内联函数的形参,则该表达式只求值一次;而将该表达式传递给宏的形参,则对表达式的求值就会引起副作用。例如,

//使用内联函数

#include

inline char min(char c1,char c2){return c1

void main( )

{

charch1='b',ch2='a';

cout<<"min(ch1++,ch2)="<

cout<<"ch1="<

}

运行结果:

min(ch1++,ch2)=a

ch1=c,ch2=a

//使用宏定义

#include

#definemin(c1,c2)((c1)>(c2)?(c1):(c2))

void main( )

{

char ch1='b',ch2='a';

cout<<"min(ch1++,ch2)="<

cout<<"ch1="<

}

運行结果:

min(ch1++,ch2)=c

ch1=d,ch2=a

通过以上主要两个方面的比较,学生就很不难理解为什么C++使用内联函数而不使用带参数的宏。

以上两个问题(简单的宏与const、带参数的宏与内联函数)都与编译预处理命令中的宏定义有关系,因此,在讲完符号常量和内联函数之后,我进行了一个简单且明了的总结:由于编译预处理命令中的宏定义存在安全漏洞,因此,C++中使用const取代简单的宏来定义符号常量,使用内联函数取代带参数的宏来实现功能简单且不含有复杂控制结构的过程。经过总结,两个(const和内联函数)看似毫无联系的知识之间具有一个共同点:取代宏定义。

(2)实例教学法

学生在熟悉且习惯了面向过程的程序设计思想之后,再接触面向对象的程序设计思想,很难区分二者究竟有何不同。在C++课程的讲解中,我必须首先让学生理解面向对象程序设计(OOP)和传统的程序设计有着本质的区别。

比如,现实世界中的某个人,不仅仅具有身高、肤色、体重等静态特性,而且具有吃饭、说话、行走等动态行为,静态特性和动态行为本来就是自成一体的,构成了现实世界中的一个人。现在要把现实世界中类似“某个人”的实体映射到计算机世界中,就用“对象”(静态特性和动态行为封装在一起)来表示它,这就是面向对象的思想。而在传统程序设计思想中,是把静态特性和动态行为分离开的。

再从程序结构上进一步说明,例如,采用不同思想分别定义Time类型:

//面向过程的程序设计思想

struct Time

{ int Hour,Minute,Second; };

void ShuRu(Time *pt) //定义输入过程

{ cout<<"请输入小时、分和秒:";

cin>>pt->Hour>>pt->Minute>>pt->Second;

}

void ShuChu(Time *pt) //定义输出过程

{ cout<Hour<<"小时"<Minute<<"分"<Second<<"秒"<

}

//面向对象的程序设计思想

class Time //定义Time类类型

{

private:

int Hour,Minute,Second; //private成员

public:

void ShuRu() //定义public成员:输入操作

{ cout<<“请输入小时、分和秒:”;

cin>>Hour>>Minute>>Second;

}

void ShuChu() //定义public成员:输出操作

{ cout<

};

借助实例描述和直观的程序结构比较,学生就非常容易接受了,老师的讲解也起到事半功倍的效果。

(3)启发式教学法

教学中,善于且灵活使用启发教学,有助于活跃学生的思维,使学生由被动接受知识状态积极转化为主动获取知识状态,能够充分挖掘他们的学习潜能,激发学习的积极性和主观能动性,从而培养学生的创新思维能力。

比如,在将数组概念之前,出现了下面的我和学生之间的一问一答:

我:如何存放3个学生的C语言成绩?

学生:定义3个变量。

我:10个学生的成绩?

学生:定义10个变量。

我:100个、1000个、10000个学生的成绩?

学生:变量太多啦,不容易表示。

我准备的问题很自然地被学生发现并提出,这个时候我就可以顺理成章地提出数组是解决的最佳办法。了解了数组的应用环境,学生在编程过程中就可以灵活使用。

(4)课堂提问

为了使学生能够很好参与到课堂教学活动中,在必要时,我也经常随机课堂提问,一方面是为了提醒有些走神的学生;另一方面是为了检验学生是否真正理解和掌握前面所学知识,这样我就可以有针对性地进行后面内容的讲解。

课堂教学中的例子还有很多,在此不再一一列举。

3 结束语

灵活结合和使用不同教学方法,提高教学质量,是我们老师的责任和义务。教是为了不教,授学生以鱼,更要授之以渔。

参考文献:

[1]张鸿、冯文新.C++面向对象程序设计教程.武汉大学出版社,2008.

[2]谭浩强.C程序设计(第三版).清华大学出版社,2005.

作者简介:

张鸿(1975-),女,讲师,硕士,主要从事计算机程序理論和数据库技术的研究;毕业院校:郑州大学,专业:计算机软件与理论。

猜你喜欢
面向对象C语言程序设计
基于OBE的Java程序设计个性化教学研究
项目化教学在Python程序设计课程中的应用
C++程序设计课程教学改革研究
医学专业“Python程序设计”课程教学改革总结与思考
“C语言程序设计”课程混合教学探索
基于C语言的计算机软件编程技术探究
中职C语言单片机课堂教学中的趣味性探讨
计算机原理中C语言的应用价值
面向对象的计算机导论课程教学
基于Web的科研项目管理系统的设计与实现