第6章子程序
第6章 子程序
子程序是构造大型程序的有效工具,一个实用程序(不 管是系统程序还是应用程序),一般都含有多个子程序。 FORTRAN90中的子程序按子程序完成的功能划分有子 例行程序、函数子程序、数据块子程序等,按是否定义 某个特定的程序单元内部来划分有程序单元子程序 块子程序以内部( NTERNAL子程序等,这些通称为 子程序。 子程序不能独立运行,它们和一种称为主程序就是本 章前读者已经熟知的程序结构的程序单元一起组成 个实用程序。一个程序可以不含子程序,但不能缺少主 序 本章讨论各种子程序的结构、功能以及子程序与主程序 或子程序之间的数据交互作用。语句函数不具备子程序 的一般书写特征,但其作用与子程序相同,也一并放在 本章讨论。通过本章的学习,读者应能熟练地选择并设 计恰盖的子程序形式来构造自己的程序,从而提高程序 设计能力
• 子程序是构造大型程序的有效工具,一个实用程序(不 管是系统程序还是应用程序),一般都含有多个子程序。 • FORTRAN 90 中的子程序按子程序完成的功能划分有子 例行程序、函数子程序、数据块子程序等,按是否定义 在某个特定的程序单元内部来划分有程序单元子程序、 模块子程序以及内部(INTERNAL)子程序等,这些通称为 子程序。 • 子程序不能独立运行,它们和一种称为主程序(就是本 章前读者已经熟知的程序结构)的程序单元一起组成一 个实用程序。一个程序可以不含子程序,但不能缺少主 程序。 • 本章讨论各种子程序的结构、功能以及子程序与主程序 或子程序之间的数据交互作用。语句函数不具备子程序 的一般书写特征,但其作用与子程序相同,也一并放在 本章讨论。通过本章的学习,读者应能熟练地选择并设 计恰当的子程序形式来构造自己的程序,从而提高程序 设计能力
语句函数 ●S|N(X)、 SQRT(X)等由 FORTRAN编译器提供的函数为内在函数 这些内在函数是在程序设计过程中使用频率很高,并且一般 实现比较复杂的涵数。用户在使用内在函数时,并不需要对 函数的实现过程进行描述,只需按照 FORTRAN90手册要求使 用即可, FORTRAN90编译器“认识”这些内在函数并能正确 完成函数所规定的功能。 ●在实际设计过程中,用户还会遇到大量的并未包含在内在 函数中的其他函数,计算这些函数时,就不能象内在函数那 样仅仅使用函数名来使用这些函数,而必须在适当的地方以 FORTRAN90能“理解”的形式向 FORTRAN90编译器说明这些 非内在的函数的计算过程与参数类型,当函数的计算过程简 单到可以用一个语句定义清楚时,这样的定义语句就称为语 句函数
语句函数 ⚫SIN(X)、SQRT(X)等由FORTRAN编译器提供的函数为内在函数。 这些内在函数是在程序设计过程中使用频率很高,并且一般 实现比较复杂的函数。用户在使用内在函数时,并不需要对 函数的实现过程进行描述,只需按照FORTRAN 90手册要求使 用即可,FORTRAN 90编译器“认识”这些内在函数并能正确 完成函数所规定的功能。 ⚫在实际设计过程中,用户还会遇到大量的并未包含在内在 函数中的其他函数,计算这些函数时,就不能象内在函数那 样仅仅使用函数名来使用这些函数,而必须在适当的地方以 FORTRAN 90能“理解”的形式向FORTRAN 90 编译器说明这些 非内在的函数的计算过程与参数类型,当函数的计算过程简 单到可以用一个语句定义清楚时,这样的定义语句就称为语 句函数
例61设多项式函数 f(x)=5x3-2x2+7x+6 设计一个程序计算f(1)、f(10)、f(12)、f(5)的值。 程序如 PROGRAM EXAM1A: PROGRAM EXAM1A Ⅹ=12 1 FX=5*X**3-2*X**2+7*X+6 FX=5*X*3-2*X**2+7*X+6 WRITE( )f(,=,FX WRTE(*,*)")=,FX Ⅹ=-1 Ⅹ=10 FX=5*X**3-2*X**2+7*X+6 FX=5*X**3-2*X**2+7*X+6 WRTE(**)印(,)=,FX WRITE )fX,), FX END 显然,程序EXAM1A不简练,把一个相同的函数表达式重复了多遍,如 果能定义一个函数f(x),然后分别使用1、10等参数来调用fx),将会有 效的简化程序量,这就是本节要讨论的内容
例 6.1设多项式函数 设计一个程序,计算f(1)、f(10)、f(12)、f(-5)的值。 程序如PROGRAMEXAM1A : PROGRAM EXAM1A X=1 FX=5*X**3-2*X**2+7*X+6 WRITE(*,*)'f(',X,')=',FX X=10 FX=5*X**3-2*X**2+7*X+6 WRITE(*,*)'f(',X,')=',FX X=12 FX=5*X**3-2*X**2+7*X+6 WRITE(*,*)'f(',X,')=',FX X=-1 FX=5*X**3-2*X**2+7*X+6 WRITE(*,*)'f(',X,')=',FX END 显然,程序EXAM1A不简练,把一个相同的函数表达式重复了多遍,如 果能定义一个函数f(x),然后分别使用1、10等参数来调用f(x),将会有 效的简化程序量,这就是本节要讨论的内容。 ( ) 5 2 7 6 3 2 f x = x − x + x +
6.1.1语句函数的定义 如前所述,由于 FORTRAN90的编译器不“认识” 般的函数f(x),不知道怎样计算fx)的函数值,因 而,在使用(称为函数调用)函数时,必须向 FORTRAN90编译器说明该函数的计算方法,这种 说明过程称为函数定义 语句函数定义的一般格式是: x1,x2……xn)=e
6.1.1语句函数的定义 如前所述,由于FORTRAN 90 的编译器不“认识” 一般的函数f(x),不知道怎样计算f(x)的函数值,因 而,在使用(称为函数调用)函数时,必须向 FORTRAN 90编译器说明该函数的计算方法,这种 说明过程称为函数定义。 语句函数定义的一般格式是: f x x x e ( 1 , 2 ....... n ) =