田丽华(吉林省长春市长春理工大学光电信息学院)
摘要:本文是针对C语言教学中教师难教、学生难学的状况。结合多年教学经验,依托校级教研课题项目,经过大量调研与课堂实践,以数据类型为线索进行展开,对该门课程的各个主要知识点进行深入剖析,使学生对所学的每一部分知识都具有较强针对性和目的性,做到“知其然也知所以然”,增强了学习兴趣,减轻了学习压力,提高了学习质量。
关键词:数据类型为线索知识有目的性
0引言
C语言作为一门计算机程序语言,不仅是高等院校计算机专业学生的必修课,也是非计算机理工类专业学生必修的一门专业基础课。由于C语言丰富的语法规则和灵活多变的程序结构,学生学习起来普遍感到难以理解,给教学过程带来了一定的难度。结合多年的实践教学工作,笔者也不断思考好的教学方法和合理安排教学内容,最后总结出经验:时刻把计算机工作原理灌输给学生,结合不同的数据类型,使学生明白所要操作的量必须有内存空间,空间的大小就取决于该变量的数据类型。这样,所用的量再结合合适的算法,就可从深层次上理解所解决的实际问题。
1计算机工作原理
计算机硬件系统的结构沿用美籍著名数学家冯?诺依曼提出的模型,它由运算器、控制器。存储器、输入设备、输出设备五大功能部件组成。
计算机的工作原理:各种各样的信息,通过输入设备,进入计算机的存储器(主要指内存储器),然后送到CPU的运算器运算完毕把结果送到存储器存储,最后通过输出设备显示出来。整个过程由CPU的控制器进行控制。
2以数据类型为主线讲授各部分内容
在深入理解计算机工作原理的基础上,我们知道CPU主要与内存进行数据交换,不能与外存交换数据。那么数据到底占用多大的内存空间?这取决于占用该内存空间的量的数据类型,进而引出数据类型的概念,这样使学生学习数据类型变得不再抽象、有强烈的目的性。学习了基本数据类型,会定义某种类型的变量,理解变量在内存中的存储形式,然后利用结构化程序设计的三种基本控制,实现简单变量的操作。
例如:定义一个整型变量ainta;
该变量定义的目的是在内存中申请一个内存地址空间,假设申请到的内存空间地址是2000,如图2所示变量a和地址的关系。
程序员对变量a进行控制,计算机CPU对相应变量的内存空间地址2000进行操作,这样就真正达到了人机共同操作一个变量,进而完成简单的算法。
有了对简单程序的应用能力,接下来讲解作为一个功能模块的函数。在发生函数调用时,“传值(值传递)”是数据的单向传递。“传址(址传递)”可以实现数据的双向传递。学生开始接受起来思路不清晰。但当发生函数调用时就把各参数的存储空间变化演示出来,学生很容易就接受了。
例如:有函数voidswap(inta,intb)实现两个数的交换,当发生“值传递”时,实参与行参分别占用不同的内存单元,如图3所示。假设发生函数调用swap(x,y)时,实参变量x,y的地址分别是3000和3004,而形参a,b的地址分别是4000和4004。
这样,在被调函数中对形参值的改变,也就是内存地址4000和4004里的内容进行交换,不会影响到实参的内存地址3000和3004里的数值,很确切的说明了值的单向传递。
而当函数调用发生“传址”时,例如:有函数voidswap(int*a,int*b)实现两个数的交换,当发生“地址传递”时,实参与行参共用相同的内存单元。假设发生函数调用swap(&x,&y)时,实参变量x,y的地址分别是3000和3004
此时,在被调函数中对形参a、b的操作实际上就是对实参x、y的操作,因为实参、形参操作的是相同的内存空间。因此,形参值的改变也就是相对应实参值的改变。达到了值的双向传递。
接下来,在简单变量的基础上引入数组,数组是具有相同数据类型的变量的集合。数组在数据结构上是顺序存储,数组里的每一个元素与具有相同数据类型的简单变量具有相同的操作功能,只是关心数组元素的下标即可。
例如:定义一个整型数组inta[10];
实际上就是给该数组申请一块连续的内存空间,数组的起始地址一旦确定下来,其他元素的地址根据下标即可确定,每个相应地址空间的数组元素与相同类型的变量具有相同的操作功能。
利用所学的函数基本理论,将数组元素和数组名作为函数的参数,发生函数调用时的情形进行扩展。
至于指针变量是C语言的一大特点,增强了程序的灵活性,但给学习和应用带来方便的同时也带来了危险,这时更加要求编程者对内存的管理比较了解。根据指针变量里保存的地址值是什么量的地址说明该指针是“指向什么”的指针。
例如:int*p;假设指针变量p的地址是3000:
则p变量内存空间里的值是谁的地址就说p是指向谁的指针变量。
有了对数组的操作经验,那么当一个集合里的成员是由不同数据类型的量组成的怎么办?这就引出了结构体。结构体变量可以表达许多与生活息息相关的数据结构,把不同数据类型的集合称作结构体类型(用户自定义类型),与简单变量的定义、引用类似。可以定义结构体类型的变量、数组和指针变量,并通过“.”和“→”访问结构体成员变量,像具有相同类型的简单变量一样操作成员变量,使解决问题的能力增强。通过带指针成员变量的结构体可以引出在数据结构上的链式存储数据结构——链表。
3总结
抓住数据类型这条主线讲授C语言程序设计乃至其他程序设计语言,数据类型由简到繁的讲解,学生学习起来只是觉得在学一些常用的算法,学习内容只是在不断的扩充,减少了知识点的难度,收到明显的教学效果。大多数学生学习起来要比其他教学方法思路更加清晰,而且学习兴趣比较浓,学习C程序设计变得不再是死记硬背语法规则,避免了“只知其然而不知所以然”的状况。
参考文献:
[1]王敬华等编著.C语言程序设计教程[M].清华大学出版社.2007年12月.
[2]谭浩强.C语言程序设计(第三版)[M].清华大学出版社.2006年6月.