APP下载

基于数据类型结构观点的C语言中赋值运算教学方法

2018-04-08马吉权金英郭兴凯

黑龙江教育·理论与实践 2018年2期
关键词:数据类型C语言结构

马吉权 金英 郭兴凯

摘要:C语言一直是高校信息技术专业最重要的课程之一。C语言教学方法的探讨一直以来也是教研领域中的一个热点。针对C语言中赋值运算学生理解、运用能力相对偏弱的问题,本文引入了基于数据类型结构的C语言赋值运算的教学观点,强调计算机底层的处理机制的分析。在此基础上,利用数据类型的一级结构化处理,实现了二级数据类型结构的直接赋值。

关键词:C语言;数据类型;结构

1 引言

C是软件开发中最流行的语言之一。相比于Java,C语言在嵌入式软件、系统软件、对实时性要求较高的软件开发中,具有明显的优势。计算机科学与技术专业、软件工程专业、物联网工程专业等信息技术相关专业中,C语言通常都是基础专业必修课。C语言对构建学生的计算思维能力、培养学生的软件设计与开发能力至关重要。作为第一门程序设计语言类课程,C语言对后续专业课的学习影响很大。如何讲好C语言是每一位任课教师必须认真思考的问题。

C语言的语法规则严谨、运算丰富。常见的运算符包括算数运算符、关系运算符、逻辑运算符、赋值运算符等。C语言对参与运算的变量和操作數的要求是非常严格的,如果不能很好地理解每种运算符的运算机制,则容易在程序开发过程中发生错误,有些错误在编译阶段还无法发现,会造成严重的隐患。其中,赋值运算是C语言中使用最多的运算符,共分3大类11种:简单赋值运算符(=),复合算数赋值运算符(+=,-=,*=,/=,%=),复合位运算赋值运算符(&=,|=,^=,>>=,<<=)。这些赋值运算均已简单赋值运算为基础。

C语言中赋值运算看似简单,但是当它与复杂的数据类型遇到一起的时候,也会对学习造成一定的困扰。哪些数据类型允许赋值,哪些数据类型不允许直接赋值是C语言学习中的一个难点。很多的教材里面对赋值的问题也进行了一些讨论,但是更多的是让学生记住一些赋值的规则,并没有给出更加深入的解释,所以造成学生对这部分知识掌握的并不扎实,经常在做题和实际程序开发过程中发生错误。

本文探讨基于结构观点的C语言赋值运算的教学方法,试图讲清楚为什么赋值运算在某些复杂数据类型(如数组)中无法直接使用,而在另外一些复杂数据类型(如结构体)又可以直接使用的原因。让学生更好地理解赋值运算计算机的分析和处理过程,从而进一步加深学生对赋值运算的理解。

2 赋值运算的本质

为了深入理解赋值运算,首先分析一下赋值运算在计算机内部完成的实际操作是什么样的。赋值运算是针对变量而言的,而变量实质上是操作系统分配给用户使用的一块指定的内存空间。变量类型代表了分配的内存空间的大小以及使用规则,变量名代表了该变量所分配的内存空间,利用取地址运算符&可以获得具体的变量在内存中的分配空间的第一个字节的址值。变量的赋值,就是将赋值运算 = 右侧表达表达式的结果存入指定的内存空间中。如果两侧的数据类型一致,则将结果直接写入内存即可;如果类型不一致,则编译器会按照预先制定的转换规则首先将结果处理成满足变量类型的要求,然后在存入指定的内存空间。

这里,不难发现:无论是相同数据类型变量赋值,还是可兼容的不同类型的变量赋值,赋值的基础都是变量的类型,可以说赋值是以类型为基本单位进行的。

3 C语言数据类型的结构观点

通过以上的分析,不难发现,赋值运算与数据类型是密切相关的。那么我们就先来总结一下C语言中的数据类型:

C语言中一共包含6种基本的数据类型,4种构造数据类型,指针数据类型和空类型,共计12种数据类型。在所有的这些数据类型中,除数组和枚举类型外,其余的所有数据类型编译器给分配的存储空间都是确定大小的唯独数组的空间大小是不确定的。这里的不确定不是对用户而言的,而是指作为系统无法知道一个数组到底占用多大的内存空间。

这里,我们不妨赋予数据类型一种结构的概念,即具有一级结构的数据类型和具有二级结构的数据类型。所谓具有一级结构的数据类型是指系统能够根据其数据类型计算得到实际需要的内存空间;所谓具有二级结构的数据类型是指该数据类型是在编译器已知的数据类型的基础之上建立的复合数据类型,如基本数据类型数组、结构体数组,指针数组等。通过以上数据类型的结构定义,不难发现,数据类型的结构观点还是与系统密切相关的,其本质还是反应了系统对数据类型的处理机制。虽然数组与结构体、共用体和枚举类型都属于C语言中的构造数据类型,但是结构体和共用体为具有一级结构的数据类型,而数组和枚举类型为具有二级结构的数据类型。

4 C语言中赋值运算的教学方法

一般在C语言赋值运算的时候,教师总是将更多的精力放在介绍赋值运算操作本身,而对数据类型对赋值运算的影响介绍的相对较少,所以造成学生早后期的学习中经常犯如下的错误:

上面的代码在逻辑上似乎是很合理的,但是如果用数据类型的结构观点来进行分析的话,就可以发现:数组a[5]系统并不知道它占用了多大的内存空间;与此同时,对于数组b[5],系统也不清楚它占用多大的内存空间,所以这样的赋值是无法实现的。当然,也可以进一步解释,a与b所保存的均为数组a[5]和数组b[5]的首地址,而这个地址是个常量值,是不允许修改的。

对于结构体数据类型,学生往往会因为认为数组无法直接赋值,而结构体比数组的结构更复杂,所以也无法直接赋值。

这里,教师可以根据数据类型的结构观点,进一步给出解释:在定义a、b两个结构体变量的时候,系统给a、b分配了确定大小的一样的内存空间,而且根据结构体的定义可知,两个变量内存单元的使用规则是一样的,所以可以直接赋值。

接下来,还可以给学生提出一个这样的问题:如果数组想要直接赋值,有什么办法吗?这样去引起学生对数据类型,内存管理,赋值运算等等进一步的思考,并积极地鼓励学生大胆地到计算机上尝试。再讲解了利用循环的方式(包括函数实现)进行两个数组之间的赋值之后,可以给出如下的示例:

5 结论

C语言的赋值运算非常灵活,学生一般掌握得不够深入。本文通过引入数据类型的结构观点,将数据类型划分为一级结构和二级结构,使学生深刻理解赋值运算的基础条件和处理机制。以此为基础,利用这种数据类型结构观点还可以实现程序的优化。本文也说明在实际的教学过程中,教师需要对课本知识进一步升华和总结,才能让学生更好的理解、运用。

参考文献:

[1] 陈浩. C语言教学方法探讨[J]. 电脑知识与技术, 2015, 11: 58-59.

[2] 王军英, 马红梅. C语言程序设计教学存在的问题与对策[J]. 教育理论与实践, 2015.

[3] 黄智勇, 陈建军, 张丽丽. C语言教学的思考及教学优化[J]. 当代教育实践与教学研究:电子刊, 2016.

[4] 梁科辉, 范华. C语言中数据类型转换及其应用探究[J]. 山东广播电视大学学报, 2016: 87-88.

[5] 田原. C语言运算符的结合性等3个语法问题探究[J]. 荆楚理工学院学报, 2016, 31: 91-95.

编辑/岳凤

猜你喜欢

数据类型C语言结构
《形而上学》△卷的结构和位置
详谈Java中的基本数据类型与引用数据类型
基于Visual Studio Code的C语言程序设计实践教学探索
如何理解数据结构中的抽象数据类型
基于C语言的计算机软件编程
高职高专院校C语言程序设计教学改革探索
论《日出》的结构
论子函数在C语言数据格式输出中的应用
范畴数据类型上的子类型*