| 
 
	积分5254贡献 精华在线时间 小时注册时间2012-9-13最后登录1970-1-1 
 | 
 
| 
在fortran中子程序有一个初始化定义的值integer::i=1为何它只在第一次调用的时候才赋这个值,以后再调用这个子函数时 i 不从1开始重新定义呢?
x
登录后查看更多精彩内容~您需要 登录 才可以下载或查看,没有帐号?立即注册 
  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
 
 | 
 |