第六章函数和子程序独立模块的子程序独立模块的函数局部变量与全局变量STATIC选项和说明过程的递归调用块内子程序和块内函数模块化程序实际的思想根据软件工程学的原理和结构化程序设计的要求,应该将程序分成若干个模块,每一个模块完成一个或几个功能,并给它定义一个唯一的名字,以便调用,这就是所谓的“模块化”。一个程序就包含一个主模块和若干个子模块。程序的每一个模块可以是子程序或函数。模块又称过程,“执行一个过程”就是调有一个子程序或函数模块。这种做法使程序结构清晰,具有良好的可读性和易维护性。独立模块的子程序(引例引例)DECLARESUBstar(nASINTEGER)‘说明在程序中要调用一个名为Star的子程序REMmainprogramDIMIASINTEGERFORI=1TO3CALLStar(I)‘调用子程序,并将I的值传递给nNEXTIPRINTENDSUBStar(nASINTEGER)DIMIASINTEGERFORI=1TOnPRINT“*”NEXTIPRINTENDSUB独立模块的子程序QBASIC提供独立模块的子程序和函数,这种子程序和主程序不在同一个模块中。它以SUB语句开头,以ENDSUB结束;SUB子程序名(形式参数)子程序体ENDSUB子程序名最长可为40个字符。我们约定子程序名第一个字母用大写,子程序后可以没有形参,此时必须省略括号,变为:SUB子程序名形参的类型说明如下:变量名1AS类型名,变量名2AS类型名,…注:如果形参是实型,则AS语可以省略。SUB和ENDSUB之间的语句行称为子程序体,在子程序体内不可出现DATA语句,子程序体中的READ语句会到主程序体中的DATA语句中读取数据;子程序不能嵌套定义,即在子程序体内不能再出现SUB语句。子程序的调用(CALL语句)子程序调用的两种形式:CALL子程序名(实际参数)子程序名实际参数实参的个数必须与所调用子程序中形参个数相同,实参和形参的类型必须按位置一一对应匹配,如果调用的子程序没有形参,则调用时子程序后面的一对括号必须省略,格式为:CALL子程序名或子程序名;实参可以是变量、常量、表达式;主程序DECLARE语句表示本程序中将用子程序,如果在主程序中要调用两个子程序,则应有两个DECLARE语句。如果调用的子程序没有形参,但DECLARE语句中子程序后的括号却不能少。DECLARE放在程序中所有可执行语句的前面。如果程序设计者未写DECLARE语句,则QBASIC会根据SUB语句所定义的子程序名和参数自动加上;DECLARE语句中括弧内参数的个数和类型与子程序形参的个数和类型一致。在子程序中还可以调用子程序,也可以调用它自身(递归调用)。子程序的输入在QBASIC环境下,无论在哪个编辑窗口,只要在新一行键入子程序的初始行,如:SUBStar(nASINTEGER),按回车键;如果已经输入主程序,将窗口Split,在其中的一个窗口中的主程序后键入子程序(该窗口中的主程序会自动清除,而且存盘后另一窗口主程序的前面加DECLARESUB子程序名);通过View菜单的SUBs…菜单项选择或激活要编辑的子菜单或主程序。模块之间数据传递----虚实结合主程序或其它调用子程序的程序块称为“调用程序”。在调用子程序时调用程序的实参和被调用的子程序的形参之间的数据传递,称为“虚实结合”。在高级语言中,虚实结合有两种方式。(1)值传递方式:即实参把其值传递给形参,这种传递是“单向的”。(2)地址传递方式:这种方式是半实参的地址传递形参,实参与形象共占同一存储单元。①定义自定义函数、独立模块的函数和子程序时的自变量称为“形式参数”或“虚拟参数”,简称“形参或“虚参”。之所以称它为“形式参数”,是因为所用的自变量并不是一个实际存在的变量,在未调用函数时它并不具有确定的值。它只是在形式上存在的一个变量。在函数时被调用时它将被一个确定的值所代替。②形式参数的名字叫什么并不重要。重要的是表达式所表示的函数关系和调用时所给定的实际参数。③调用函数时函数名后面括弧中的参数称为“实际参数”。它应该是一个确定的值,它可以是常量或表达式。④如果自定义函数的形象与程序中的变量名相同,它们并不代表同一对象。“形参”和“实参”按地址传递参数若实参使变量,则调用子程序时,系统不为对应的形参另外开辟存储单元,而是把实参所占的存储单元的地址传送给...