从中学到大学:C语言程序设计递进式教学初探
2016-09-24李鑫谢健
李鑫 谢健
摘要“C程序设计”是计算机类专业新生最早接触的专业基础课之一,是否能以一种恰当的方式将学生引入全新的专业知识领域,对本门课程乃至后续的专业课程都至关重要。本文根据作者的教学实践经验,以学生的基本情况分析为依据,结合C程序设计课程的知识特征,提出一种基于数学函数的引导式教学探索,以期实现新生从中学到大学的顺利过渡,激发其专业学习的兴趣。
关键词 C程序设计 本科教学 递进式教学
中图分类号:G642 文献标识码:A DOI:10.16400/j.cnki.kjdkx.2016.07.018
0引言
对于计算机类专业的新生而言,“C程序设计”是最早接触的专业基础课之一,学生对该专业课程的学习具有标杆性作用,对其后续专业课程的学习产生具有重要的影响,对学生的专业能力的培养至关重要。然而,由于部分新生在中学阶段对计算机专业知识的了解过于欠缺,若按照传统教材的模式开展教学,计算机专业术语及程序设计语言的概念细节将会导致与中学知识储备的脱节,影响学生学习兴趣与动力。
本文拟从学生基础出发,探索基于中学函数概念的渐进式程序设计教学,引导学生逐渐向大学计算机专业的学习方式与认知方式转化。
此外,内存分配是C程序设计相关内容的本质核心,例如变量、数据类型、函数、数组、指针、结构体等。在充分了解内存分配本质的基础上,对上述知识点的学习大有裨益,且有利于培养分析程序动态执行的能力。
作者基于自我学习经历以及对大一新生的C程序设计课程教学经验,分析新生面临的若干问题,思考中学知识储备与大学教学方式的差异与关系,针对C程序设计的特点,提出基于数学函数的引导式教学;并围绕内存分配这一核心知识,探索基于内存解析的阐释性教学过程。
1学生基本情况分析
对于刚入校的新生而言,经历了疯狂的高考和长假,对大学阶段的专业学习仍是比较懵懂的,这集中体现在如下几个方面。
(1)思想方面:新生刚刚经历了紧张的高考以及惬意的长假,入学时仍有部分同学难以集中精力专注于学习中。若在初学的专业课上缺少恰当的过渡和引导,一开始便如同天书一般,可能会滋生学生的厌学情绪,影响后续专业课程的学习成效。
(2)学习方式方面:新生在中学阶段的学习,以学习经典知识为主,主要是教师的讲述式传授并辅以大量的练习,对知识背后的原理较少关注。然而,这种方式并不适用于大学阶段的专业学习。大学的专业学习需要深挖知识背后的原理,并自主学习广泛的知识。因此,“C程序设计”课程应着重解释程序设计语言的机制原理,并引导学生自主开展实践,在实践中进行探索和思考。
(3)基础知识储备方面:客观来讲,虽然现在的信息化水平快速提升,中学生的计算机技能水平也逐年提高。然而,由于高考的压力和地区发展的差异,仍有相当比例的新生没有掌握基本的计算机基础知识,抑或只是熟悉了基本的計算机应用操作,对计算机专业性的结构与描述仍很欠缺。在中学的知识体系中,与“C程序设计”课程最相关的概念当属中学数学里的函数概念,且函数是中学数学中最重要的内容,新生对此必不陌生。因此,以中学数学中的函数概念为起始点,逐渐引导学生熟悉计算机(类)专业术语,程序设计的专业术语与过程,并完成对计算机专业认知的转化。
基于上述学生基本情况分析,在尊重客观事实的基础上,开展基于函数概念的引导式教学,降低新生对新知识的理解难度,推动新生专业学习的过渡;开展围绕以内存分配为核心的程序设计语言机理分析,讲述程序及程序设计的(部分)执行本质,提高新生对计算机运行原理的基本认识以及专业认知。
2基于数学函数的引导式教学
在“C程序设计”课程中,函数作为一种功能抽象的手段,与中学数学中的函数概念有相通之处。数学函数中,函数名、自变量、应变量是其基本要素,本文拟采用如下方式开展进行引导式教学:(1)以数学函数的基本概念为基础,讲授程序(main函数)的功能;并在数学函数单一输出的基础上进行扩展,泛化函数“输出”(返回值)的概念。以“将一个程序看作一个函数”的方式实现从数学函数到程序设计函数概念的过渡,并介绍程序的基本结构。(2)以数学函数中的函数名、自变量为基础,讲解函数名、变量名的命名及其规则,并逐渐扩展为一般标识符的命名及其规则,初步引入语法的概念。(3)以函数的具体展开形式为基础,引出过程式程序设计以及顺序结构的基本概念。(4)以数学函数中自变量的定义域概念为基础,引出数据类型的概念。(5)以一元数学函数和多元数学函数的概念为基础,讲授函数参数及函数定义的知识。(6)以数学函数的抽象表示与自变量取值为基础,引出函数调用的概念。(7)以数学函数的复合运算为基础,引出函数嵌套与递归调用的知识。(8)以数学函数中函数的分段定义为基础,引出条件选择控制语句的知识;并由此扩充为程序的选择结构以及循环结构。
基于上述知识的介绍,使得学生初步具备了程序设计的基本知识,并促使其向专业阶段的学习过渡,为更复杂的数组操作、指针操作等内容提供支撑。
3基于内存分析的阐释性教学
内存分配是程序设计中变量、数组、函数、指针等内容背后的核心本质。为了加强学生对程序设计本质的理解,有必要阐述清楚内存分配的基本概念与基本形式。(1)首先简述典型的计算机冯·诺伊曼结构,突出内存的功能及其重要性,并阐述输入/输出的概念,为后续讲解文件操作进行铺垫。(2)以数字在计算机中的存储与运算为基础,讲解计算机基本的工作方式以及二进制形式的数据表示与存储。(3)以变量的存储为切入点,将变量的定义、初始化、值更改与内存的分配、初始化、更新相结合;并以变量的赋值为例,讲述变量问的值传递以及内存空间分配的本质。(4)结合数学函数的概念,讲述函数的声明、定义和调用等操作,阐述函数参数在内存中的存储以及变量生存期和作用域的概念,讲解函数参数值传递的内存本质。(5)针对数组概念的讲授,阐述内存连续分配的含义,结合数组访问的方式,解释数据越界访问的原理。(6)针对指针的概念,明确指针作为一种数据类型,其自身的指针变量具有特定的内存空间,并区分指针变量的内存空间与所指向内存空间的差异和关系。
4课程规划
在实际教学过程中,应以程序设计自身的逻辑为主线,将上述两方面内容有机地融合到课程讲授中。此外,实践是程序设计课程的重要构成部分,应尽早让学生上机实践,但又必须让学生先具备基本的程序设计知识。以笔者承担的40学时C程序设计理论课为例,拟将课程设计如下:
(1)课程概述(2学时)。以调整学生的学习心态为目的。通过调研学生对计算机专业知识的了解。(2)从数学到计算机(4学时)。以经典的冯·诺依曼结构为出发点,讲解计算机的基本工作原理以及内存的功能和重要性。以数学中的十进制加法运算为例,讲述数据(数字)在计算机中的存储方式、运算方式,从而形成对二进制的认知,以及机器语言的基本概念和背后蕴含的原理。(3)C程序设计速览(2学时)。以数学中的函数概念为出发点,将程序类比成函数,讲解基本的输入、输出、返回值等概念;以自变量及其定义域为基础,简述变量的定义、变量类型等概念:以函数的展开形式为基础,讲述程序设计基本的顺序结构及过程式程序设计的基本概念。此后,学生应具备基本的上机实践能力,初始阶段的上机实践当以模仿为主,并逐步自我探索。(4)基本语法(4学时)。以上一章节为基础,系统讲述C语言程序设计中的基本语法,包括标识符命名规则、变量、数据类型、运算符、表达式、语句等。并以变量的内存分配为例,讲述变量类型与内存分配的关系,赋值语句及其内存更新的关系。(5)控制语句(4学时)。以数学函数中的分段函数为基础,讲解条件选择语句的含义与功能,并引入程序设计的选择结构。以数学中的求和运算为例,引出循环语句并讲述其功能,阐释控制结构的含义。(6)函数(4学时)。如上所述,结合数学函数的基本概念,解析函数名、函数参数、参数类型、返回值、函数调用等基本概念。(7)后续知识点:数组、指针、自定义、文件读写操作等。
5小结
本文针对大一新生在心理、基础知识储备、学习方式等方面情况,提出了一种基于数学函数的引导式教学思路,笔者将结合实际教学,进一步完善并优化这一教学方法。