function se(x) implicit none integer n real x,h,he,tx,se n=1 tx=h(n)*x**(2*n) he=tx do while(abs(tx)>=1e-10) n=n+1 tx=h(n)*x**(2*n) he=he+tx enddo se=1+he CONTAINS function h(n) result(k) implicit none integer i,n real pim,term1,term2,e,s,k pim=(2/3.1415926)**(2*n+1) term1=1 term2=1 e=term1/term2 s=1 i=1 do while(abs(e)>=1e-10) i=i+1 term1=(-1.0)**(real(i)-1) term2=(2*real(i)-1)**(2*n+1) e=term1/term2 s=s+e enddo k=2*pim*s end function h end function se program www_fcode_cn implicit none real se,h,x read*,x print*,se(x) end program www_fcode_cn
这个程序是错的,,出错是因为:contains里面的函数h的scoping unit定义跟主函数有冲突。
real x,h,he,tx,se,这样编译器会认为h是external的,但加上contains却又认为是internal的
有两种改法:
1,去掉声明中的h;
2,将end function se 替换掉contains,,写成2个独立的函数。