【asp精品源码栏目提醒】:网学会员鉴于大家对asp精品源码十分关注,论文会员在此为大家搜集整理了“第8章 子程序 - 教育”一文,供大家参考学习
第八章 子程序语句函数函数子程序子例行程序程序单元之间的数据传递递归调用等价语句与数据块子程序内部子程序模块 一、语句函数1.语句函数的定义语句函数定义的一般格式是: fx1x2…xne2.语句函数的调用语句函数的调用形式和内在函数完全相同。
例1 f x 5 x 2 x 7 x 6 3 2计算f1 f10 f12 f-5的值。
例2 找出100999之间的所有水仙花 数。
二、函数子程序1.函数子程序的定义函数子程序的定义格式是:类型说明 FUNCTION 函数名虚参表 函数体END函数名的命名方法与变量名相同,虚参可以是简单变量和数组变量,但不能是常数、数组元素、表达式 例1 100 140 50 s1 ∑ i 2 s2 ∑i 3 s3 ∑ 1求 i 1 i 100 i 20 i分析:上述三个数列的通项不同,求和范围也不同,用一个程序段难以同时计算三个数列的和,并且,因为无法用一个语句函数完成数列的求和计算,所以也无法使用语句函数来简化程序设计。
可以采用函数子程序来完成这个问题。
设计一个求和的函数子程序SMMNL,M、N分别为求和范围的上、下界,L反映数列通项的性质。
函数定义部分应注意如下问题:(1)函数不能有同名虚参。
虚参的类型可以在函数体中 进行说明,当未对虚参类型进行说明时,虚参类型遵 守I—N隐含规则。
(2)函数定义部分中一定要有一个语句将函数值赋值给 函数名,这种赋值语句的格式是:函数名表达式。
注 意不要在函数名后带上括弧。
2.函数子程序的调用调用一个函数子程序的方法和调用内在函数和语句函数的方法基本相同。
例2 用函数子程序的方法设计一个程序,求50100内的所有素数及其和。
分析:设计一个函数子程序 PRIMEN: 1 当n是素数时 primen 0 当n非素数时主程序的任务是应用PRIME函数子程序在50100之间使用枚举法求出那些使PRIME函数值为1的自然数并求这些数的和。
思考:子程序的返回值分别为逻辑型、字符型时, 主、子程序程序做何修改?例2 当一个数各个数位的立方和等于这个数本身时,称 这样的数为水仙花数如153135333,所 以,153是一个水仙花数。
编程:求100999之间的 水仙花数。
分析:设计一个函数子程序NUMN,I,当I100时,函 数NUM返回N的百位上的数;当I10时,NUM返回N的 十位上的数,I1时,NUM返回N的个位上的数。
主程 序中调用NUM函数在100999之间找出所有水仙花数。
三、子例行程序1.子例行子程序的定义子例行子程序定义格式是:SUBROUTINE 子程序名虚参表 子例行程序体END子程序的命名方法与变量相同。
虚参由变量、数组名不能是数组元素,常数、表达式充当,当虚参多于一个时,各虚参间用逗号分隔,当没有虚参时,子例行程序名后的一对括弧可以省略。
子例行程序的设计方法和函数子程序相同,但因为其名字没有值,所以不能有对子例行程序的名字赋值的语句。
2.子例行子程序的调用子例行程序的调用格式是:CALL 子例行程序名实参表其实参的类型与函数子程序相同。
和函数子程序的调用 不同的是,子例行子程序的调用是一个独立的语句。
例1 用子例行程序的方法求上面的s1s2s3。
例2 设计一个子例行程序程序,求任意矩阵的转置矩阵。
实验九 子程序(一) 四、程序单元之间的数据传递1.简单变量作为虚参(1)简单变量或数组元素作为实参。
系统将实参与虚参安排同一个存储单元,对虚参的任何改变都作用在对应的实参上,因而调用一个子程序包括函数子程序和子例行程序时,实参的值有可能改变。
(2)常量或表达式作为实参。
首先计算表达式的值如果实参为表达式时 ,然后将该值赋值给对应的虚参。
此种情况下,子程序中不能改变与常量或表达式对应的虚参的值。
2.数组名作为虚参当虚参是数组名时,对应的实参可以是与虚参类型相同的数组名或数组元素,并且实参与虚参共用一片连续的存储单元。
四、程序单元之间的数据传递3.子程序名作为虚参例 设有三个连续函数: f x sin 3 x cos x g x 5 x 3 2 x 10 1 h x 1 x2 设计一个函数子程序,用Simpson方法求三个函数的积分 2π 10 1 I1 ∫ f xdx I 2 ∫ g xdx I 3 ∫ h xdx 0 0 0 四、程序单元之间的数据传递4.变量的作用域(1)变量存储区的分配与释放(2)变量作用域(3)子程序中变量的存储属性:SAVE 属性,STATIC属 性,AUTOMATIC属性 变量的存储属性的说明方法是: 存储属性 变量名表例如AUTOMATIC A,B,CINTEGER SAVE X,Y例 fs x y z sin x cos y sin x y sin x z cos y z cos y x分析:定义一个函数,实现的功能相当于fa/ (fbfc),函数有四个参数(FUN,A,B, C),其中FUN是虚拟函数名,A、B、C为自变 量,第一次调用时把内部函数名SIN传送给 FUN,第二次调用时把内部函数名COS传送给 FUN。
五、递归调用1.递归的概念2.递归函数递归函数的定义格式是:RECURSIVE FUNCTION 函数名虚参表 RESULT变量名 … 调用该函数本身 …END例1 设计一个计算N!的函数子程序。
函数子程序如下:RECURSIVE FUNCTION FACN RESULTFAC1 IF N1 THEN FAC11 只能给FAC1赋值 ELSE FAC1NFACN-1 只能调用FAC函数 ENDIFEND 六、数据共用存储单元 与数据块子程序1.等价语句 语句格式是: EQUIVALENCE 变量表1,变量表2,…例如EQUIVALENCE L,M,N,A,B,C!定义L、M、N等价,A、B、C等价。
DIMENSION A15,B3,5EQUIVLENCE A,B !定义数组A、B等价例 设计一个子例行程序,对一个二维数组按其存储顺序 排升序。
分析:对一维数组排序比二维数组排序方便,如果我们 设计一个与要排序的二维数组等价的一维数组,则对 该一维数组的排序就是对与其等价的二维数组的排序。
注意:等价语句EQUIVALENCE只是建立同一个程序单 元中几个变量之间的等价关系,不能实现不同程序单 元之间的数据交换,不要试图通过定义不同程序单元 之间的变量等价来实现程序单元间的通信。
六、数据共用存储单元 与数据块子程序2.公用数据块公用数据区就是一个程序中的每个程序单元都可以访问的公共区域。
数据共用区分为有名公用区和无名公用区两种,一个程序只有一个无名公用区,但可以定义多个有名公用区。
定义共用区的语句格式是:COMMON 变量名表 !在无名公用区中定义了一组变量COMMON /公用区名1/变量名表1,/共用区名2/变量名表2,…!在公用区1中定义了变量表1,在公用区2中定义了变量表2。
例 设计一个按分数规则进行加减法程序。
分析:一般的分数加减法的形式是: k m i ± l n j其中:ik n±m l,Jlm i,j的最大公约数为1我们设计一个子程序完成i,j的计算,显然,子程序要从主程序中获取k、l、m、n等4个数据和一个运算符,并且要把结果i、j返回个主程序,这样,主子程序间共有7个量要进行通信。
上一篇:
复杂岩性分析程序CRA使用说明书
下一篇:
为定制而来 欧马可快递物流一体化解决方案抢滩苏浙沪