QB子程序教学难点解析及对策

2009-11-17 09:04
中国校外教育(下旬) 2009年14期
关键词:传递子程序

朱 洋

【摘 要】《QBASIC程序设计》是计算机专业对口单招指定程序设计语言。本文详尽讲解了子程序的参数、变量等基本概念,重点分析了子程序调用过程中参数的传输方式和相互关系,列举了子程序应用中的特例和注意点。

【关键词】QB 子程序 形参 实参 传递

《QBASIC程序设计》作为计算机专业对口单招指定程序设计语言,它在计算机学科体系中的作用和地位是显而易见的。亦是许多学生最害怕的一门课,尤其是子程序设计部分,学生更是难以理解,笔者执教该课多年,对子程序教学有所感悟,下面,笔者就子程序难点处理的教学对策谈谈看法。

一、基本概念要搞清,“形”“实”“参”“非”莫混淆

刚学习子程序时,大部分学生感到难理解的是参数和变量的含义,而参数与变量的内涵是学好子程序的基础。如何判断一个参数是形参还是实参,主要看这个参数的位置,在调用子程序语句中的参数就是实参,在定义子程序语句中的参数就为形参。对于参数变量和非参数变量,学生容易将子程序中的变量与主程序中的同名实参相混,我们判断一个变量是参数变量还是非参数变量,主要是针对子程序而言,在子程序中,如果这个变量作为形参,则该变量为参数变量,否则为非参数变量。

二、调用过程要吃透,数据传递要把准

1.吃准传递方式,弄清相互关系

SUB子程序中所有的非参数变量都是局部变量(全局变量和共享变量除外),它们与主程序中的同名变量没有任何关系,主程序中的实参与子程序中的形参有两种传递方式,即值传递和地址传递,判断参数传递的方式,就看实参的形式,如果实参是变量(包括简单变量、下标变量、数组变量、记录变量),则为地址传递,如果实参是常量、表达式、变量上加一对小括号,则为值传递。在例1中,实参a和aa()都是以变量的形式出现,所以是地址传递。而实参b+2是表达式,(c)是变量加上了一对小括号,所以是值传递。

值传递是指调用子程序时,实参和形参分别拥有自己的内存单元,实参仅将值传递给形参,而形参不能反方向把值传递给主程序中对应的实参。在例1中,实参b+2和(c)都是值传递,它们对应的形参分别为y和z,在调用子程序时,实参b+2将值4传递给形参y,实参(c)将值3传递给形参z,在调用子程序后,形参y和z的值分别变为8和18,但由于是值传递方式,形参不能将值传递给实参,实参b和c的值仍为2和3,即形参的变化不会影响实参。

地址传递是在调用子程序时,实参将自己所占用内存单元的地址传递给形参,此时,实参和形参共同占用一个内存单元,在调用子程序过程中,形参改变了,也就是内存单元中的值改变了,所以,实参会跟着变化,例1中a和aa()采用地址传递,它们对应的形参为x和 b(),在调用子程序时,其传递过程如下表所示:

从表中不难看出,地址传递方式中,实参a和形参x占用同一个内存单元,实参aa()和形参b()占用同一个内存区域,所以不管谁的值变化,内存中值就跟着变化,而内存的值变化,实参和形参当然同时变化,所以,地址传递方式下,传递的方向是双向的,形参的变化会影响实参。

2.理清传递通道,抓住关键要点

(1)子程序中的变量,如果是参数变量,则与主程序对应实参有两种传递方式,即值传递和地址传递,这两种方式前面已作阐述。

(2)如果子程序中的变量不是参数变量,就看它是否为全局变量,如果是全局变量则该变量在主程序和所有的子程序中为同一变量,如例2,子程序test1中变量d就是一个非参数变量,但它是一个全局变量,所以在主程序和子程序test1中,d是同一个变量,正因为如此,d可以将初始值4带到子程序中,子程序调用结束后,d的值为11,主程序中的d也为11。

(3)如果子程序中的变量,既不是参数变量又不是全局变量,则看它是否为共享变量,如例1中的a就是共享变量,它不同于全局变量,全局变量作用于主程序和所有的子程序,而它只作用于主程序和申请共享该变量的子程序,与其它子程序无关。

(4)综上所述,如果一个子程序中变量既不是参数变量,也不是全局变量,又不是共享变量,则该变量与主程序和其他子程序中的同名变量没有任何关系。

三、几种特例要牢记,攻克难点才轻松

1.全局变量与值传递发生矛盾时,值传递优先

当一个全局变量既作为实参又作为形参,并且采用值传递方式时,这时就出现了一对矛盾,作为全局变量,在子程序中改变了它的值,主程序中也应该改变,但从值传递的角度看,子程序中改变了形参的值不会影响主程序中对应实参的值,此时值传递方式优先,如例2,a是一个全局变量,但它同时又作为实参和形参,并且采用的是值传递方式,在子程序text3调用结束后,子程序中a的值为2098,但此时这个值并不会传递给主程序中的a,主程序中的a仍然为100。

2.如果参数为记录类型,必须指定其所属记录类型

对于实参而言,必须在主程序中先定义记录结构,然后才能用属于这种记录类型的变量作为实参,对于形参,在定义子程序时,就要将它定义为对应实参所属的记录类型,否则程序将出错。

3.static语句的另一种用法

大家都知道,用static语句可以在子程序调用结束后,将子程序中变量的值保留下来,作为下一次调用的初始值,但还可以在子程序中用static语句将全局变量申请为该子程中的局部变量。当然,出了该子程序,此变量仍然是全局变量,如例1中的全局变量b,在子程序test3中,用语句static b将其申请为局部变量。所以,尽管主程序中b的值为123,但这个值并不能带到test3中,在test3中,b的值为0,但在其他子程序中,b仍然为全局变量。

参考文献:

[1]谭浩强.QBASIC程序设计.北京:清华大学出版社,2000.

[2]谭浩强.QBASIC语言教程.北京:电子工业出版社,1997.

[3]教育部考试中心.全国计算机等级考试大纲.北京:高等教育出版社,2002.

猜你喜欢
传递子程序
初中生物教学凸显和传递重要概念的实践
商务英语翻译中文化意象的传递
基于(火用)分析法的换热器性能研究
浅谈子程序在数控车编程中的应用
大学生班级德育信息传递的信道浅析
子程序在数控车加工槽中的应用探索
西门子840D系统JOG模式下PLC调用并执行NC程序
对子程序编写技术的再认识
子程序嵌套在数控加工中的应用研究
简化编程与子程序嵌套的应用