论文部分内容阅读
摘要:教师通常需要根据课时要求和学生专业背景等实际情况对c语言的授课内容进行灵活安排,问题是如何取舍。通过分析C语言的知识点,提出以函数、变量、流程控制三个概念为核心的层次化知识点结构图,突出了C语言的核心概念及它们之间的相互联系,为教师对讲授内容的选择和安排提供参考。
关键词:C语言;核心概念;函数;变量;流程控制
中图分类号:G642 文献标识码:A 文章编号:1009-3044(2017)17-0078-02
目前,很多学校仍然把C语言作为计算机专业或相关专业的程序设计人门课程。要在限定的课时内帮助不同专业的学生掌握基本的程序设计方法,学会使用计算思维方法去分析和解决问题,教师需要对实际使用的C语言教材的内容进行灵活取舍以突出重点。本文通过分析c语言核心概念及它们之间的联系,建立了层次化的C语言知识点结构图,以突出核心概念及以内在联系为基础的层次化结构,从而为教师抓住重点、构建知识体系提供帮助。
1 C语言的核心概念
通过对C语言教材所包含的全部知识点的梳理和c语言教学实践的总结,发现所有的知识点都直接或间接联系到既独立又相互联系的三个概念:函数、变量、流程控制。依据教材中涉及的主要知识点,分类整理后如图1所示(横向来看)。文献[2]中已提出C 语言中也包含这三个核心概念。进一步讲,基于电子计算机的硬件组成和命令式编程的特点,我们推测大部分的命令式编程语言都包含这三个概念。
对于这三个概念,我们可以根据经验分别给出其描述性定义,但要做到准确理解,需要从具体到抽象,即先掌握概念包含的具体知识点,再试图去理解概念的内涵及相互之间的联系。
函数是对一段代码的封装,可以通过函数名和参数被调用,是程序的基本组成单位。函数概念包含的知识点主要包括主函数、输入输出函数的使用、自定义函数的定义和调用、函数的参数和返回值、递归函数等。
变量提供了程序可以操作的有名字的存储区。变量概念包含的知识点包括变量的四要素(类型、名称、值、地址)、基本类型、变量的定义和引用、变量的作用域、变量的生存期、变量的存储类型、指针变量、数组变量、结构体变量等。因为类型是变量的要素之一,类型不会独立于变量而存在,所以与类型相关的知识点都可以归类为与变量相关的知识点。
流程控制包括顺序结构、分支结构、循环结构三种基本的流程控制结构。顺序结构表示语句按照位置的前后顺序依次执行;分支结构表示根据判断条件的结果选择其中一组语句执行;循环结构表示在满足一定条件的情况下反复执行一组语句。C语言中的分支结构主要有if和switch两种具体形式,循环结构则主要有for、while、do…while三种具体形式。
2核心概念之间的联系
函数、变量、流程控制三个核心概念既相互独立而有其存在的必要性,又相互联系而组成有机的整体。相互联系不仅存在于不同的概念之间,也存在于同一概念的不同实例之间,如图2所示。一方面,函数可由变量和流程控制组合而成,即函数的定义包含变量和流程控制,变量不仅为函数定义提供了命名的存储区域,也为函数调用提供了参数传递方式,流程控制为函数定义提供了实现方式。另一方面,三个概念都支持自组合功能,函数通过函数调用由小的功能模块组成大的功能模块;变量通过结构体实现了由小的数据类型变量组合成大的数据类型变量;流程控制则通过三种控制结构的嵌套由简单的流程控制组合成复杂的流程控制。
2.1函数与函数
函数调用是函数之间的主要关系。函数是C程序的基本组成单位,正是函数调用把程序各个功能模块动态联系起来。C语言中的函数不能嵌套定义,即所有的函数的定义上都是并列的关系,只能通过函数调用把各个函数联系起来。
函数调用实现了功能组合的效果,可以作为应对工程规模和复杂性增长的手段之一。当我们面对的问题规模和复杂性由小变大时,通常需要增加函数的体量和数量来解决。
2.2变量与变量
简单变量通过结构体的组合而形成复杂变量,是变量之间的主要关系。变量在定义时必须指定变量的类型,C语言的变量有整型、实型、字符型三种基本類型,以此为基础,通过引入新的类型构造机制,便可生成新的类型,如指针、数组、结构体等。尤其是结构体的引入,实现了数据类型的间接嵌套,使我们有能力在基本类型的基础之上,经过若干次组合,构造出更大、更复杂的新类型。当我们需要描述复杂的数据结构时,通过使用结构体来构造合适类型的变量。变量的组合功能,是我们应对实际问题中数据结构复杂性增长的手段之一。
2.3流程控制与流程控制
三种流程控制结构之间可以相互嵌套,是流程控制结构之间的主要关系。这种嵌套既有直接的多层嵌套,常见的是二层或三层;也有间接的多层嵌套,即分布在不同函数中的流程控制,通过函数调用形成间接的嵌套结构。流程控制的嵌套功能,是我们应对算法复杂性增长手段之一。
2.4函数与变量
变量可以根据其定义的位置分为全局变量和局部变量,当定义在函数的外部时是全局变量,定义在函数的内部则是局部变量。局部变量可进一步分为定义在函数头的函数形式参数和定义在函数体的其他局部变量。变量作为函数的形式参数和返回值,是函数与变量的主要关系,并为函数调用的实现提供了基础。对函数调用时参数传递的理解是C语言的难点之一,主要涉及两个概念:函数参数的传递方式和数据类型,实参与形参的传递方式只有一种,即“值传递”,而值的内容由参数的数据类型确定。
2.5函数与流程控制
流程控制一定被包含在函数的定义中,而流程控制中也可以包含函数调用,这是函数与流程控制的主要关系。函数的定义一般要使用流程控制,用到顺序、分支、循环三种结构中的一种或多种;而流程控制的复合语句中也可能包含函数调用,从而形成不同层次的函数调用栈。 2.6变量与流程控制
除了全局变量的定义和初始化,变量的定义、初始化和引用通常都在流程控制中完成,这是变量与流程控制的主要关系。函数的定义主要包含了对变量、流程控制、函数调用的组合运用。
3知识点的层次性
基于C语言的三个核心概念,同时考虑到它们之间的相互联系,提出对C语言知识点分三个层次递进的知识点结构图,如图1所示(纵向来看)。第一层引入了函数、变量、流程控制三个概念,程序由函数组合而成(有且只有一个主函数),函数由变量和流程控制组合而成,其中流程控制的三种结构可以通过简单嵌套进行组合;第二层对函数进行扩展,引入自定义函数,通过函数调用实现函数功能的组合;第三层对变量进行扩展,通过引入类型构造方法,使基本类型的变量可以组合成复杂类型变量。
第一层的主要特征是“单函数、基本类型变量”,包含了函数、变量、流程控制三个核心概念的基础内容,也是C语言的基础部分。主要内容包括:主函数、输入输出函数的使用、变量的四要素(类型、名称、值、地址)、基本类型、变量的定义和引用、顺序结构、分支结构、循环结构。函数是C程序的基本组成单位,主函数是程序的人口函数,所以主函数是第一个要介绍的知识点。简单的C程序可以分为数据输入、数据处理、数据输出三个步骤,所以接下来介绍输入输出函数的基本用法,以完成简单的输入输出任务。为了进行数据处理,引人变量的概念,主要从变量的类型、名称、值、地址四个具体要素来理解。变量的基本类型有整型、实型、字符型三种,掌握了三種基本类型,便可以进人变量的定义和引用。此时完成的程序都是顺序结构,接下来重点介绍另外两种流程控制结构:分支和循环。这一层的重点是主函数、基本类型变量、三种流程控制结构,难点是对变量概念的理解和循环结构的掌握。
第二层的主要特征是“多函数、基本类型变量”,在主函数的基础上引入自定义函数以支持组织程序时的灵活性和可扩展性,在变量四要素的基础上提供更多的视角以加深对变量的全面理解。主要内容包括:自定义函数的定义和调用、函数的参数和返回值、递归函数、变量的作用域、变量的生存期、变量的存储类型。由一个函数到多个函数,首先涉及函数的定义,即创建一个新的函数,其次是函数的声明和调用,使新增加的函数融入到程序的执行流程之中。当需要在函数调用中传递信息时,就需要使用函数的参数和返回值,参数分为函数定义时的形式参数和函数调用时的实际参数,形式参数和返回值都是变量,体现了函数和变量两个核心概念之间的联系。递归函数是直接或间接调用该函数自身的函数,是一种特殊的函数形式,用来实现程序设计中广泛存在递归算法。变量的作用域即变量的有效范围,据此可以把变量分为局部变量和全局变量两类。变量的生存期指变量从被生成到被撤销的这段时间,变量的作用域和生成期分别从空间和时间的角度来刻画变量。C语言变量的存储类型有auto、register、extern、static四种,规定了变量占用内存空间的方式。
第三层的主要特征是“多函数、复合类型变量”,在第二层的基础上引入新的类型构造机制,提供创建复杂类型变量的表示方法。主要内容包括:数组变量、指针变量、结构体变量、联合变量、枚举变量、位域变量。数组是一种常用的复合类型,数组变量使用连续的内存空间来存储相同类型的值,比如C语言中的字符串即是用字符数组来存储。指针变量用来保存变量的地址,地址是变量基本概念中提到的四要素之一,相对于通过变量名来操作变量的直接访问,通过指针变量来操作变量又称为间接访问。指针变量同时被用于动态内存分配时的内存管理。结构体是使用基本类型和复合类型组合成更大的复合类型的类型构造机制,结构体可以包含指针类型和数组类型的成员,也可以有结构体的指针和数组。通过结构体实现了间接的类型嵌套结构,完成了变量的组合功能,这种组合功能集中体现了变量与变量之间的关系。联合、位域和枚举是另外三种针对特定使用场景的复合类型,用于节约内存使用或提高程序的可读性。
4结束语
对C语言的全部知识点进行分类,发现其中包含函数、变量、流程控制三个核心概念。通过不同的具体方式,每个概念都支持自组合功能,同时,函数又可由变量和流程控制组合而成,这种组合功能用以应对问题规模和复杂性的增长。以核心概念为中心,以知识点的相互联系为线索的C语言知识点层次结构图,在教师培训实践中对于教师抓住重点、构建C语言的知识体系有一定帮助。
关键词:C语言;核心概念;函数;变量;流程控制
中图分类号:G642 文献标识码:A 文章编号:1009-3044(2017)17-0078-02
目前,很多学校仍然把C语言作为计算机专业或相关专业的程序设计人门课程。要在限定的课时内帮助不同专业的学生掌握基本的程序设计方法,学会使用计算思维方法去分析和解决问题,教师需要对实际使用的C语言教材的内容进行灵活取舍以突出重点。本文通过分析c语言核心概念及它们之间的联系,建立了层次化的C语言知识点结构图,以突出核心概念及以内在联系为基础的层次化结构,从而为教师抓住重点、构建知识体系提供帮助。
1 C语言的核心概念
通过对C语言教材所包含的全部知识点的梳理和c语言教学实践的总结,发现所有的知识点都直接或间接联系到既独立又相互联系的三个概念:函数、变量、流程控制。依据教材中涉及的主要知识点,分类整理后如图1所示(横向来看)。文献[2]中已提出C 语言中也包含这三个核心概念。进一步讲,基于电子计算机的硬件组成和命令式编程的特点,我们推测大部分的命令式编程语言都包含这三个概念。
对于这三个概念,我们可以根据经验分别给出其描述性定义,但要做到准确理解,需要从具体到抽象,即先掌握概念包含的具体知识点,再试图去理解概念的内涵及相互之间的联系。
函数是对一段代码的封装,可以通过函数名和参数被调用,是程序的基本组成单位。函数概念包含的知识点主要包括主函数、输入输出函数的使用、自定义函数的定义和调用、函数的参数和返回值、递归函数等。
变量提供了程序可以操作的有名字的存储区。变量概念包含的知识点包括变量的四要素(类型、名称、值、地址)、基本类型、变量的定义和引用、变量的作用域、变量的生存期、变量的存储类型、指针变量、数组变量、结构体变量等。因为类型是变量的要素之一,类型不会独立于变量而存在,所以与类型相关的知识点都可以归类为与变量相关的知识点。
流程控制包括顺序结构、分支结构、循环结构三种基本的流程控制结构。顺序结构表示语句按照位置的前后顺序依次执行;分支结构表示根据判断条件的结果选择其中一组语句执行;循环结构表示在满足一定条件的情况下反复执行一组语句。C语言中的分支结构主要有if和switch两种具体形式,循环结构则主要有for、while、do…while三种具体形式。
2核心概念之间的联系
函数、变量、流程控制三个核心概念既相互独立而有其存在的必要性,又相互联系而组成有机的整体。相互联系不仅存在于不同的概念之间,也存在于同一概念的不同实例之间,如图2所示。一方面,函数可由变量和流程控制组合而成,即函数的定义包含变量和流程控制,变量不仅为函数定义提供了命名的存储区域,也为函数调用提供了参数传递方式,流程控制为函数定义提供了实现方式。另一方面,三个概念都支持自组合功能,函数通过函数调用由小的功能模块组成大的功能模块;变量通过结构体实现了由小的数据类型变量组合成大的数据类型变量;流程控制则通过三种控制结构的嵌套由简单的流程控制组合成复杂的流程控制。
2.1函数与函数
函数调用是函数之间的主要关系。函数是C程序的基本组成单位,正是函数调用把程序各个功能模块动态联系起来。C语言中的函数不能嵌套定义,即所有的函数的定义上都是并列的关系,只能通过函数调用把各个函数联系起来。
函数调用实现了功能组合的效果,可以作为应对工程规模和复杂性增长的手段之一。当我们面对的问题规模和复杂性由小变大时,通常需要增加函数的体量和数量来解决。
2.2变量与变量
简单变量通过结构体的组合而形成复杂变量,是变量之间的主要关系。变量在定义时必须指定变量的类型,C语言的变量有整型、实型、字符型三种基本類型,以此为基础,通过引入新的类型构造机制,便可生成新的类型,如指针、数组、结构体等。尤其是结构体的引入,实现了数据类型的间接嵌套,使我们有能力在基本类型的基础之上,经过若干次组合,构造出更大、更复杂的新类型。当我们需要描述复杂的数据结构时,通过使用结构体来构造合适类型的变量。变量的组合功能,是我们应对实际问题中数据结构复杂性增长的手段之一。
2.3流程控制与流程控制
三种流程控制结构之间可以相互嵌套,是流程控制结构之间的主要关系。这种嵌套既有直接的多层嵌套,常见的是二层或三层;也有间接的多层嵌套,即分布在不同函数中的流程控制,通过函数调用形成间接的嵌套结构。流程控制的嵌套功能,是我们应对算法复杂性增长手段之一。
2.4函数与变量
变量可以根据其定义的位置分为全局变量和局部变量,当定义在函数的外部时是全局变量,定义在函数的内部则是局部变量。局部变量可进一步分为定义在函数头的函数形式参数和定义在函数体的其他局部变量。变量作为函数的形式参数和返回值,是函数与变量的主要关系,并为函数调用的实现提供了基础。对函数调用时参数传递的理解是C语言的难点之一,主要涉及两个概念:函数参数的传递方式和数据类型,实参与形参的传递方式只有一种,即“值传递”,而值的内容由参数的数据类型确定。
2.5函数与流程控制
流程控制一定被包含在函数的定义中,而流程控制中也可以包含函数调用,这是函数与流程控制的主要关系。函数的定义一般要使用流程控制,用到顺序、分支、循环三种结构中的一种或多种;而流程控制的复合语句中也可能包含函数调用,从而形成不同层次的函数调用栈。 2.6变量与流程控制
除了全局变量的定义和初始化,变量的定义、初始化和引用通常都在流程控制中完成,这是变量与流程控制的主要关系。函数的定义主要包含了对变量、流程控制、函数调用的组合运用。
3知识点的层次性
基于C语言的三个核心概念,同时考虑到它们之间的相互联系,提出对C语言知识点分三个层次递进的知识点结构图,如图1所示(纵向来看)。第一层引入了函数、变量、流程控制三个概念,程序由函数组合而成(有且只有一个主函数),函数由变量和流程控制组合而成,其中流程控制的三种结构可以通过简单嵌套进行组合;第二层对函数进行扩展,引入自定义函数,通过函数调用实现函数功能的组合;第三层对变量进行扩展,通过引入类型构造方法,使基本类型的变量可以组合成复杂类型变量。
第一层的主要特征是“单函数、基本类型变量”,包含了函数、变量、流程控制三个核心概念的基础内容,也是C语言的基础部分。主要内容包括:主函数、输入输出函数的使用、变量的四要素(类型、名称、值、地址)、基本类型、变量的定义和引用、顺序结构、分支结构、循环结构。函数是C程序的基本组成单位,主函数是程序的人口函数,所以主函数是第一个要介绍的知识点。简单的C程序可以分为数据输入、数据处理、数据输出三个步骤,所以接下来介绍输入输出函数的基本用法,以完成简单的输入输出任务。为了进行数据处理,引人变量的概念,主要从变量的类型、名称、值、地址四个具体要素来理解。变量的基本类型有整型、实型、字符型三种,掌握了三種基本类型,便可以进人变量的定义和引用。此时完成的程序都是顺序结构,接下来重点介绍另外两种流程控制结构:分支和循环。这一层的重点是主函数、基本类型变量、三种流程控制结构,难点是对变量概念的理解和循环结构的掌握。
第二层的主要特征是“多函数、基本类型变量”,在主函数的基础上引入自定义函数以支持组织程序时的灵活性和可扩展性,在变量四要素的基础上提供更多的视角以加深对变量的全面理解。主要内容包括:自定义函数的定义和调用、函数的参数和返回值、递归函数、变量的作用域、变量的生存期、变量的存储类型。由一个函数到多个函数,首先涉及函数的定义,即创建一个新的函数,其次是函数的声明和调用,使新增加的函数融入到程序的执行流程之中。当需要在函数调用中传递信息时,就需要使用函数的参数和返回值,参数分为函数定义时的形式参数和函数调用时的实际参数,形式参数和返回值都是变量,体现了函数和变量两个核心概念之间的联系。递归函数是直接或间接调用该函数自身的函数,是一种特殊的函数形式,用来实现程序设计中广泛存在递归算法。变量的作用域即变量的有效范围,据此可以把变量分为局部变量和全局变量两类。变量的生存期指变量从被生成到被撤销的这段时间,变量的作用域和生成期分别从空间和时间的角度来刻画变量。C语言变量的存储类型有auto、register、extern、static四种,规定了变量占用内存空间的方式。
第三层的主要特征是“多函数、复合类型变量”,在第二层的基础上引入新的类型构造机制,提供创建复杂类型变量的表示方法。主要内容包括:数组变量、指针变量、结构体变量、联合变量、枚举变量、位域变量。数组是一种常用的复合类型,数组变量使用连续的内存空间来存储相同类型的值,比如C语言中的字符串即是用字符数组来存储。指针变量用来保存变量的地址,地址是变量基本概念中提到的四要素之一,相对于通过变量名来操作变量的直接访问,通过指针变量来操作变量又称为间接访问。指针变量同时被用于动态内存分配时的内存管理。结构体是使用基本类型和复合类型组合成更大的复合类型的类型构造机制,结构体可以包含指针类型和数组类型的成员,也可以有结构体的指针和数组。通过结构体实现了间接的类型嵌套结构,完成了变量的组合功能,这种组合功能集中体现了变量与变量之间的关系。联合、位域和枚举是另外三种针对特定使用场景的复合类型,用于节约内存使用或提高程序的可读性。
4结束语
对C语言的全部知识点进行分类,发现其中包含函数、变量、流程控制三个核心概念。通过不同的具体方式,每个概念都支持自组合功能,同时,函数又可由变量和流程控制组合而成,这种组合功能用以应对问题规模和复杂性的增长。以核心概念为中心,以知识点的相互联系为线索的C语言知识点层次结构图,在教师培训实践中对于教师抓住重点、构建C语言的知识体系有一定帮助。