2个回答
展开全部
fortran是一种编程语言,跟C、C++一样,如果理解C函数或者C++函数的话,就就理解了这个
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Fortran中函数分两类:子程序(subroutine)和自定义函数(function)。自定义函数本质上就是数学上的函数,一般要传递自变量给自定义函数,返回函数值。子程序不一定是这样,可以没有返值。传递参数要注意类型的对应,这跟C是一样的。
1、子程序
目的:把某一段经常使用的有特定功能的程序独立出来,可以方便调用。
习惯上一般都把子程序放在主程序结束之后。
形式:
subroutine name (parameter1, parameter2)
!给子程序起一个有意义的名字。可以传递参数,这样可以有返回值。括号内也可以空着,代不传递参数。
implicit none
integer:: parameter1, parameter2 !需要定义一下接收参数的类型。
…… !接下来的程序编写跟主程序没有任何别。
……
mreturn !跟C不同,这里表示子程序执行后回到调用它的地方继续执行下面的程序。不一定放
!在最后。可以放在子程序的其他位置,作用相同;子程序中return之后的部分不执行。
end [subroutine name]
调用:使用call命令直接使用,不需要声明。在调用处写:
call subroutine name(parameter1,parameter2)
注意点:
a.子程序之间也可相互调用。直接调用就是了,像在主程序中调用子程序一样。
b.传递参数的原理和C中不同。Fortran里是传址调用(call by address/reference),就是传递时用参数和子程序中接收时用的参数使用同一个地址,尽管命名可以不同。这样如果子程序的执行改子程序中接收参数的值,所传递的参数也相应发生变化。
c.子程序各自内部定义的变量具有独立性,类似于C。各自的行代码也具有独立性。因此各个子程序主程序中有相同的变量名、行代码号,并不会相互影响。
2、自定义函数
和子程序的明显不同在于:需要在主程序中声明之后才能使用。调用方式也有差别。另外按照惯例用函数不去改变自变量的值。如果要改变传递参数的值,习惯上用子程序来做。
声明方式:real, external :: function_name
一般自定义函数也是放在主程序之后。
形式:
function function_name(parameter1, parameter2)
implicit none
real:: parameter1, parameter2 !声明函数参数类型,这是必需的
real::function_name !声明函数返回值类型,这是必需的
……
……
function_name=…. !返回值的表达式
return
end
也可以这样直接声明返回值类型,简洁些:
real function function_name(parameter1, parameter2)
implicit none
real:: parameter1, parameter2 !这个还是必需的
……
……
function_name=…. !返回值表达式
return
end
调用:function_name(parameter1,parameter2)
不需要call命令。
自定义函数可以相互调用。调用时也需要事先声明。
总之,调用自定义函数前需要做声明,调用子程序则不需要。
1、子程序
目的:把某一段经常使用的有特定功能的程序独立出来,可以方便调用。
习惯上一般都把子程序放在主程序结束之后。
形式:
subroutine name (parameter1, parameter2)
!给子程序起一个有意义的名字。可以传递参数,这样可以有返回值。括号内也可以空着,代不传递参数。
implicit none
integer:: parameter1, parameter2 !需要定义一下接收参数的类型。
…… !接下来的程序编写跟主程序没有任何别。
……
mreturn !跟C不同,这里表示子程序执行后回到调用它的地方继续执行下面的程序。不一定放
!在最后。可以放在子程序的其他位置,作用相同;子程序中return之后的部分不执行。
end [subroutine name]
调用:使用call命令直接使用,不需要声明。在调用处写:
call subroutine name(parameter1,parameter2)
注意点:
a.子程序之间也可相互调用。直接调用就是了,像在主程序中调用子程序一样。
b.传递参数的原理和C中不同。Fortran里是传址调用(call by address/reference),就是传递时用参数和子程序中接收时用的参数使用同一个地址,尽管命名可以不同。这样如果子程序的执行改子程序中接收参数的值,所传递的参数也相应发生变化。
c.子程序各自内部定义的变量具有独立性,类似于C。各自的行代码也具有独立性。因此各个子程序主程序中有相同的变量名、行代码号,并不会相互影响。
2、自定义函数
和子程序的明显不同在于:需要在主程序中声明之后才能使用。调用方式也有差别。另外按照惯例用函数不去改变自变量的值。如果要改变传递参数的值,习惯上用子程序来做。
声明方式:real, external :: function_name
一般自定义函数也是放在主程序之后。
形式:
function function_name(parameter1, parameter2)
implicit none
real:: parameter1, parameter2 !声明函数参数类型,这是必需的
real::function_name !声明函数返回值类型,这是必需的
……
……
function_name=…. !返回值的表达式
return
end
也可以这样直接声明返回值类型,简洁些:
real function function_name(parameter1, parameter2)
implicit none
real:: parameter1, parameter2 !这个还是必需的
……
……
function_name=…. !返回值表达式
return
end
调用:function_name(parameter1,parameter2)
不需要call命令。
自定义函数可以相互调用。调用时也需要事先声明。
总之,调用自定义函数前需要做声明,调用子程序则不需要。
参考资料: 网上搜索《Fortran 95 程序设计》读书笔记
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询