结构师基础科目辅导:函数与子程序
来源:优易学  2011-12-28 12:39:28   【优易学:中国教育考试门户网】   资料下载   建筑书店

七、函数与子程序(过程)
    (一)内部函数

    内部函数是预先编制的一些常用函数或算法的过程,由FORTRAN语言提供,可以直接调用。内部函数调用时的一般形式是: 
    内部函数名(实元表)
    实元表中元素的数据类型、个数是预先规定的。
    常用内部函数及其功能可查阅FORTRAN教材或用户手册。
    (二)语句函数
    1.语句函数的定义
    定义语句函数的语句称为语句函数语句。其一般形式为:
    函数名(形参表)=表达式。
    其中,函数名的命名规则与一般变量名相同,所以它也可以用类型说明语句等来说明。形参又称哑元,是一些变量名,一般应出现在表达式中。
    语句函数在程序单位中的位置,应在所有可执行语句之前。
    2.语句函数的调用
    调用语句函数的结果是得到一个函数值,因此,调用语句函数时代之以实际变量(又 称实元)。
    (三)函数子程序
    一个函数子程序是一个独立的FORTRAN程序单位。它的第一个语句必须是FUNCTION语句,最后一个语句必须是END语句。即函数子程序的一般结构为:
    [类型说明]FUNCTION函数名(形参表)
    语句块
    [RETURN]
    END
    也可以写为:FUNCTION函数名(形参表)
    [类型说明  函数名]
    语句块
    [RETURN]
    END
    其中函数名的命名规则与变量相同,而函数名的类型决定了函数值的类型。在函数子程序中,形参可以是变量名、数组名、外部过程名,而形参的命名与类型说明也与变量相同,形参数组也必须在函数子程序中予以定义.
    函数子程序的函数值由函数名带回到调用该函数子程序的程序,因此,在函数子程序中必须对函数名赋值。在函数子程序中,函数名应该像普通变量那样来使用。
    在函数子程序中,所有的名字、语句标号都可以和其他程序单位中的相同而彼此没有任何关系。
    在函数子程序中,END语句的功能有两个:一是表示该程序单位的结束,二是具有返回语句RETURN的功能。函数子程序中必须有并且只有一个END语句,而且只能是子程序的最后一个语句。当在子程序的其他位置须要返回时,可以使用RETURN
语句。    
    (四)子程序     
    1.子程序的结构
    一个子程序是一个独立的FORTRAN程序单位。子程序的第一个语句必须是SUBROUTINE语句,最后一个语句必须是END语句。
    即子程序的一般结构为:
    SUBROUTINE子程序名(形参表)
    语句块
    [RETURN]
    END
    SUBROUTINE语句中的形参表可以省略。这时子程序名后的括弧不要保留。对子程序的其他有关规定与函数子程序相同。
    2.子程序的调用
    子程序调用通过CALL语句实现。其形式为:
    CALL子程序名(实参)
    其他有关对子程序的调用规定与函数子程序相同。
    八、程序单位间的数据传递
    (一)虚实结合
    虚实结合又称哑实结合,是各程序单位(主程序和各种过程如函数子程序)之间传递数据的一种重要途径。
    1.变量的虚实结合
    当子程序等过程的形参为变量时,则在调用时所对应的实参可以是类型相同的常数、变量、数组元素或表达式;子程序调用后,其运行的结果通过这些实参返回到调用者。在FORTRAN 77中,当形参变量所对应的实参是变量或数组元素时,则它们之间的结合方式是地址结合;而当形参变量所对应的实参是常数或表达式时,其结合方法对于不同的
    FORTRAN系统有可能是不同的。
    2.数组的虚实结合
    当子程序中的形参为数组名时,则在调用时所对应的实参必须是数组名或数组元素。如果实参是数组名,则实参数组与形参数组按地址结合,实参数组与形参数组都从第一个元素开始按列逐个对应。例如,有主程序与子程序如下:
    PROGRAMMAIN
    INTEGERA(0:5)

    CALLSB(A)
    END
    SUBROUTINESB(B)
    INTEGERB(-1:2)

    END
    则在主程序中使用CALL语句调用子程序SB时,实参数组与形参数组的结合情况如下:
    实参数组    形参数组    ,
    A(0)——B(-1)
    A(1)——B(0)
    A(2)——B(1)
    A(3)——B(2)
    A(4)
    A(5)
也即调用SB时,A数组的头4个元素与B数组的元素对应,这些对应元素实际上为同一存储地址。如果实参是数组元素,则从该元素开始依次与形参数组的第一个元素起按列逐个对应,它们也是按地址结合。例如,有主程序与子程序如下:
    PROGRAMMAIN  
    DIMENTION  A(8)
      …    ,
    CALLSB(A(5))
    END
    SUBROUTINE SB(B)
    DIMENSION B(3)
…   ,    
    END
    则在调用语句执行时,实参数组A与形参数组B的结合情况如下:
    实参数组  形参数组
    A(1)
    A(2)
    A(3)
    A(4)
    A(5)——B(1)  
    A(6)——B(2)
    A(7)——B(3)
    A(8)

[1] [2] 下一页

责任编辑:xiaohan

文章搜索:
 相关文章
热点资讯
热门课程培训