第六章 子程序和函数
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DECLARE SUB abc(aa!,bb!,xx!,yy!)
REM maim program a=21.2 :b=12.1 CALL abc(a,b,x,y) PRINT “a=”;a,”b=”;b PRINT “x=”;x,”y=”;y END SUB abc(aa,bb,xx,yy)
xx=aa+bb yy=aa-bb END SUB
第六章 函数和子程序
独立模块的子程序 独立模块的函数 局部变量与全局变量 STATIC选项和说明 过程的递归调用 块内子程序和块内函数
模块化程序实际的思想
根据软件工程学的原理和结构化程序设计的要求,应该将程序 分成若干个模块,每一个模块完成一个或几个功能,并给它定 义一个唯一的名字,以便调用,这就是所谓的“模块化”。 一个程序就包含一个主模块和若干个子模块。程序的每一个模 块可以是子程序或函数。模块又称过程,“执行一个过程”就 是调有一个子程序或函数模块。 这种做法使程序结构清晰,具有良好的可读性和易维护性。
3.bas)
DECLARE SUB xyz (a AS INTEGER,
b AS INTEGER)
Biblioteka Baidu
REM main program
abab
DIM a AS INTEGER, b AS INTEGER a = 10: b = 1
10 1 20 9
CALL xyz(20.3432#, 8.6)
PRINT "main :", "a="; a, "b="; b
abxy 21.2 12.1 0 0
aa bb xx yy
abxy 21.2 12.1 33.3 9.1
aa bb xx yy
按值传递参数
如果实参是表达式,在调用子程序时,系统将为对应形参开辟存储单元,
实参的值赋给形参变量,如果实参和对应的形参数据类型不一致,将按
不同类型赋值的规则处理,如果超出范围,系统将报错。(参见samp6-
②形式参数的名字叫什么并不重要。重要的是表达式所表示的函 数关系和调用时所给定的实际参数。
③调用函数时函数名后面括弧中的参数称为“实际参数”。它应 该是一个确定的值,它可以是常量或表达式。
④如果自定义函数的形象与程序中的变量名相同,它们并不代表 同一对象。
按地址传递参数
若实参使变量,则调用子程序时,系统不为对应的形参另外开辟存储单元, 而是把实参所占的存储单元的地址传送给子程序,使对应的形参具有相同 的地址,也就是说,形参将与对应的实参共用存储单元。(参见samp6-2.bas)
SUB 子程序名(形式参数) 子程序体
END SUB
子程序名最长可为40个字符。我们约定子程序名第一个字母用大 写,子程序后可以没有形参,此时必须省略括号,变为:
SUB 子程序名
形参的类型说明如下:
变量名1 AS 类型名,变量名2 AS 类型名,…
注:如果形参是实型,则AS语可以省略。
SUB和END SUB 之间的语句行称为子程序体,在子程序体内不 可出现DATA语句,子程序体中的READ语句会到主程序体中的 DATA语句中读取数据;
DECLARE语句中括弧内参数的个数和类型与子程序形参的个数和类型 一致。
在子程序中还可以调用子程序,也可以调用它自身(递归调用)。
子程序的输入
在QBASIC环境下,无论在哪个编辑窗口,只 要在新一行键入子程序的初始行,如:SUB Star(n AS INTEGER),按回车键;如果已经输 入主程序,将窗口Split,在其中的一个窗口中 的主程序后键入子程序(该窗口中的主程序会 自动清除,而且存盘后另一窗口主程序的前面 加DECLARE SUB 子程序名);通过View菜 单的SUBs…菜单项选择或激活要编辑的子菜 单或主程序。
“形参”和“实参”
①定义自定义函数、独立模块的函数和子程序时的自变量称为 “形式参数”或“虚拟参数”,简称“形参或“虚参”。之所以 称它为“形式参数”,是因为所用的自变量并不是一个实际存在 的变量,在未调用函数时它并不具有确定的值。它只是在形式上 存在的一个变量。在函数时被调用时它将被一个确定的值所代替。
SUB Star(n AS INTEGER) DIM I AS INTEGER FOR I=1 TO n PRINT “*” NEXT I PRINT
END SUB
独立模块的子程序
QBASIC提供独立模块的子程序和函数,这种子程序和主程序不 在同一个模块中。它以SUB语句开头,以END SUB结束;
实参可以是变量、常量、表达式;
主程序DECLARE语句表示本程序中将用子程序,如果在主程序中要调 用两个子程序,则应有两个DECLARE语句。如果调用的子程序没有形 参,但DECLARE 语句中子程序后的括号却不能少。DECLARE放在程 序中所有可执行语句的前面。如果程序设计者未写DECLARE语句,则 QBASIC会根据SUB语句所定义的子程序名和参数自动加上;
模块之间数据传递----虚实结合
主程序或其它调用子程序的程序块称为“调用 程序”。
在调用子程序时调用程序的实参和被调用的子 程序的形参之间的数据传递,称为“虚实结 合”。
在高级语言中,虚实结合有两种方式。
(1)值传递方式:即实参把其值传递给形参,这种传递是 “单向的”。
(2)地址传递方式:这种方式是半实参的地址传递形参,实 参与形象共占同一存储单元。
子程序不能嵌套定义,即在子程序体内不能再 出现SUB语句。
子程序的调用(CALL 语句)
子程序调用的两种形式:
CALL 子程序名(实际参数) 子程序名 实际参数
实参的个数必须与所调用子程序中形参个数相同,实参和形参的类型必 须按位置一一对应匹配,如果调用的子程序没有形参,则调用时子程序 后面的一对括号必须省略,格式为: CALL 子程序名 或 子程序名;
独立模块的子程序(引例)
DECLARE SUB star(n AS INTEGER) ‘说明在程序中要调用一个名为Star的子程序 REM main program DIM I AS INTEGER FOR I=1 TO 3
CALL Star(I) ‘调用子程序,并将I的值传递给n NEXT I PRINT END