- 积分
- 5254
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-9-13
- 最后登录
- 1970-1-1
![未绑定新浪微博用户 新浪微博达人勋](source/plugin/sina_login/img/gray.png)
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在fortran中子程序有一个初始化定义的值integer::i=1为何它只在第一次调用的时候才赋这个值,以后再调用这个子函数时 i 不从1开始重新定义呢?
fortran书上第209页不是有说“子程序中变量的生存期仅局限在该子程序被调用期间,在下次进入子程序时,重新给这些变量分配新的存储单元”吗?
请问哪位大侠能告诉我我哪里理解错了?
举个例子:为何以下的程序把子程序中的感叹号去掉,结果会不一样?明明在定义的时候已经赋初值了啊?
myf2.dat的数据是这样的:
0.85, 6.75
1.62, 7.88
3.27, 4.44
4.44, 7.89
5.28, 9.87
6.11, 8.46
7.80, 21.50
myf2.f90的程序是这样的:
program main
implicit none
!external f
real c,x,z,f
integer i
open(1,file='myf2.dat')
open(2,file='myf2.out')
rewind (1)
rewind (2)
do i=1,7
read(1,*)x,c
z=f(x,c)
write(2,'(2f6.2,f9.5)')x,c,z
end do
end program main
function f(x,c) result(g)
implicit none
integer ::n=1
real ::x,c,g,pi=3.1415926,eps=1e-10,temp !temp记录级数通项
! n=1
temp=cos((2*n-1)*pi*x/c)/(2*n-1)**2
g=temp
do while(abs(temp)>=eps)
n=n+1
temp=cos((2*n-1)*pi*x/c)/(2*n-1)**2
g=g+temp
end do
g=sqrt((c*pi**2)/(2*x)-4*c/x*g)
end function f
|
|