APP下载

计算机程序设计基础课堂教学模型研讨

2019-07-01赵永梅张红梅

计算机教育 2019年6期
关键词:指针程序设计内存

安 利,赵永梅,张红梅

(空军工程大学 装备管理与无人机工程学院,陕西 西安710051)

0 引 言

计算机程序设计基础课程是各高校非计算机专业学生的必修课以及计算机专业的基础课。C语言是当前计算机程序设计中比较通用的语言,既有丰富的功能又有超强的表达能力,既有高级语言的各种优点,又有低级语言的很多特点。学习C语言,不仅需要机械记忆,还要具有形象思维和严密的逻辑推理能力。

1 兴趣模型

恩格斯讲过“兴趣是最好的老师”,兴趣是学习的动力,把学生的兴趣引导到学习中来,是教学成功的一半。在C程序设计教学中,为了使学员尽快地进入学习状态,在课程教学初期,就要想方设法将学生学习的积极性和兴趣调动起来。如何调动呢?图1为由3个阶段构成的兴趣模型,分别是设置悬念阶段、分析问题阶段、解决问题阶段。

图1 兴趣模型

第一阶段,教师可以设置富有悬念的思考题,以提出问题为切入点,通过收集典型的程序解决问题的实例,采用现实演示、屏幕演示、启发提问等方式进行导课,激发学生兴趣,用兴趣吸引学员自主学习体验学习的快乐。我们在一维数组的应用中讲到排序,教师以日常生活为例设置相关游戏,例如让学生班长给6名班员从低到高进行排队,其方法任意,不可少于两种。游戏的过程中,让学生仔细观察两种方法是否一样。之后通过老师的引导告诉学生这个世界不是缺少问题,而是缺少发现。其实在每次排队的过程背后,都隐含一个经典的排序算法,具体是什么算法呢?

第二阶段,由教师主导通过学生的兴趣点,引发其主动探索问题,并创造性地多角度分析问题、求解问题。对上一阶段引导学生发现的算法问题进一步化解,先讨论如何将个子最高的队员作为队尾队员,也就是求最大值的过程。将第一次排队的过程,通过演示仔细分析采用的方法,相邻两个队员比较,按排序要求调整位置。这样个子最高的队员就排在末尾了,这个求最大值方法可称之为邻位比较法。将用邻位法找最大值的过程称为一趟处理,那么,继续深入探讨,将剩下的5名班员依次使用同样的方法进行第二趟、第三趟、第四趟处理,每趟中班员都两两比较,判断交换,依次得到次高队员的排列顺序,5个队员通过4趟就可以排好序了。这就是著名的冒泡排序,小值向前,大值向后,像水中的气泡上浮。还可以通过其他排队的方法总结出选择排序、快速排序等算法。之后通过算法引导学生一步一步写出核心代码。整个游戏过程都由学生主导,而教师仅作为配角对学生进行启发使其有所领悟。

第三阶段,引导学生将理论与实际相结合。利用真实的编程环境让学员直观感受通过程序设计求解问题的过程,达到提高学员的认知水平,并以渗透程序设计思想为关键点,培养学员创造性地分析问题、解决问题的意识。为了验证学生对之前算法的理解程度,可板书核心代码,其间可在关键代码处(如循环次数)画线填空,让学生自己填充。之后在Visual C++6.0环境下进行调试。最终将枯燥无味的“语言”课变得生动活泼。

2 类比模型

在程序设计基础课程教学中有很多知识点对学生来讲都属于很抽象的内容,例如指针对初学者来说就是一个很抽象的概念。指针比较难以从以前学过的数学等知识中找到相应的原型,因此对于学生来说在概念的理解上会有一定的难度。指针能够灵活处理内存单元、分配内存,表示复杂数据结构如链表等这些优点。如何让学生能够很快地理解指针概念并使用指针呢?我们可通过图2所示类比模型逐步求解问题。类比模型分为4个阶段,分别是问题启发、层层递进、揭示本质、灵活应用。

在第一阶段问题启发中,以指针为例,教师可以启发学生思考指针与日常生活中有无相似之处,得以使抽象的问题具体化。指针就是地址,是计算机内存单元的地址,所以使用指针就是要灵活地运用计算机内存的地址。这个概念比较抽象,要使这个抽象的问题具体化就要在教学过程中引导学生进行类比。

图2 类比模型

第二阶段层层递进,教师带领学生将理论与实践相结合,找到形象的比喻。如图3所示以学生宿舍形象比喻计算机的内存,内存单元相当于宿舍中的每一个房间;“地址”就是内存单元的编号,相当于宿舍的门牌号;内存中存放的数据,相当于各房间的学生如图3。

第三阶段揭示本质,通过学生宿舍的比喻对指针的概念已有初步的理解,教师将引导学生回归教材,主动对指针进行探索,进一步创造性地分析以达到熟知概念。最终使得晦涩的问题直观化、难懂的问题亲切化。

指针变量就是用来存放指针(地址)的变量,即这个变量中存放的是另一个变量的地址(即存放的是指针),可用“传达室”作比喻。传达室也是宿舍楼中的一个房间,只是住在那里的人比较特别,他知道哪个房间里住的是哪些人。在讲到“直接访问”和“间接访问”时,用传达室这个比喻很容易让学生明白。如知道门牌号,直接找到学生,相当于“直接访问”,如果通过传达室查询到门牌号再找人,相当于“间接访问”。

在此,必须理解“指针变量的地址”“指针变量的值”和“指针指向的目标变量的值”3 个重要概念。例如:程序1中定义了一个整型变量i和一个指向整型变量i的指针变量p,如图4所示指针变量p的地址就是系统为p分配的存储空间的首地址,即1000;指针变量p的值,就是它指向的目标变量i的首地址,即2020;p指向的目标变量的值,就是目标变量i的值,即整型数“5”。

程序1:

void main( )

{ ……

int i=5;

int *p=&i;

……

}

图4 内存分配图

指针变量是一种特殊的变量。指针变量具有普通变量的属性,但指针变量又不同于普通变量,它的特殊性具体表现在两个方面:一是指针变量的值只能是地址。程序中的每一个实体(如变量、数组、函数等)在内存中都占据一个可标志的存储空间,每一个存储空间由若干个字节组成,在内存中每一个字节都有一个地址。一个存储空间的地址就是该存储空间中第一个字节的地址。因此,无论指针变量存储的是什么数据类型的地址,指针变量本身在内存中所占字节数都是固定的,所以存储结构体变量的地址和存储简单变量的地址需要的存储空间长度是相等的。二是指针变量的类型是指针变量所指向的存储空间中存储数据的类型。特别强调的是,不同类型的指针变量不能直接相互赋值,如不能将一个整型变量的地址赋值给一个实型指针变量。

第四阶段灵活应用,培养学员灵活运用所学知识的创新思维能力,激发学员学习热情。就是在熟知概念的同时,打开学员的思路,使其掌握一类问题的求解方法,并能够触类旁通。

3 渐近模型

由于学生是刚刚接触计算机程序设计,必须坚持“通俗、可接受性”的教学原则,在授课中,尽量不以传统的教学方式中把重点放在语法规则上为侧重点,而应该引导学生设计程序的算法,介绍程序设计的基本方法和技巧,在讲算法的案例中提出语法规则。由浅入深,融会贯通,逐步突破难点。我们可通过图5所示渐近模型逐步解决问题。渐近模型分为3个阶段,分别是由浅入深、对比分析、问题求解。

图5 渐近模型

第一阶段由浅入深。难点突破在教学活动中十分重要,如何突破难点,根据课程的性质不同而不同,对C语言程序设计课程而言,从课程的结构来讲,指针类型的程序设计方法就是相对的难点。为了使学生能够很透彻地理解指针变量与普通变量之间的区别,我们将会从浅显的案例着手渐近突破。比如实现两个数据的交换,可采取首先利用普通变量交换数据入手,然后使用函数,逐渐引入指针的方法依次讲解。以培养学员分析问题的能力较强的逻辑思维能力。

第二阶段对比分析。结构化程序设计方法的特点之一是模块化,因此采用函数是最简洁的方法,我们可通过程序使用指针变量作为函数的形式参数接收主函数中实际参数的地址来实现两个数据之间的交换。也可以通过用指针变量作为形式参数接收主函数中实际参数的首地址来实现字符串拷贝,来理解使用普通变量和指针变量之间的区别。通过设问引领学生自行总结其概念及应用的方式方法,然后逐步引导他们继续深入理解指针的概念及其应用,并通过实例演示和对比分析来加深学生的印象。

第三阶段问题求解,可采用多种方法融入教学,提高学员的综合素质;分析学员现阶段面临的难点问题,引起共鸣,激发学员解决问题的欲望。

4 通过实践全面理解和掌握知识

实验教学是课堂理论教学的重要辅助部分,是学习和回顾知识的重要环节;C语言又是一门实践非常强的课程,这个环节更是不可或缺。因此,在上机实践之前应充分准备实践材料,对上机内容要做到有程序草稿,并且要做到对实践的过程非常清晰,以便能够与理论知识相结合。

程序设计实践的题目难度选择在一定程度上决定了实验教学环节能否成功。如果题目太难,学员的精力重点可能会偏移到专业知识方面,偏离了课程设计的初衷;题目太简单,不能充分锻炼学员的软件设计能力,课程设计起不到应有的作用。因此,课程设计题目的难度应当适中,学生通过一定的努力就能完成,一方面可以发现知识点中自己没有掌握的内容,另一方面,可以提高他们的编程兴趣,增强完成课程设计任务的信心,继而更加巩固编程和调试程序的能力,以达到能够运用计算机求解问题的能力。

5 结 语

C语言课程的教学有别于其他课程,概念多、规则多、枯燥、操作性强。要上好本门课程,必须不断地探讨和研究。C语言是一门计算机专业和非专业的重要基础课程,具有很强的灵活性,教员不仅需要很强的责任心,还需要不断地掌握学生的学习动态,灵活地调整授课方法。此教学模型通过计算机程序设计基础课程教学应用,达到了较好的效果。

猜你喜欢

指针程序设计内存
医学专业“Python程序设计”课程教学改革总结与思考
垂悬指针检测与防御方法*
基于Visual Studio Code的C语言程序设计实践教学探索
笔记本内存已经在涨价了,但幅度不大,升级扩容无须等待
“春夏秋冬”的内存
从细节入手,谈PLC程序设计技巧
为什么表的指针都按照顺时针方向转动
高职高专院校C语言程序设计教学改革探索
内存搭配DDR4、DDR3L还是DDR3?
浅析C语言指针