回 帖 发 新 帖 刷新版面

主题:请教高手!

module mianji
   implicit none
contains
   function fun(filename) result(total)
   implicit none
   character(len=79)::filename
   integer,parameter::fileid=10
   real,dimension(1:23)::a,b
   real::s
   integer::i
   real::area=0
   real::total
   logical::alive
   inquire(file=filename,exist=alive)
   if(alive)then
   open(fileid,file=filename,status='old')
   do i=1,23
     read(fileid,*)a(i),b(i)
   end do
   write(*,'(23f6.3)')(a(i),i=1,23)
   write(*,'(23f8.4)')(b(i),i=1,23)
   else
   write(*,*)'文件不存在'
   end if
   do i=1,22
     s=((b(i+1)+b(i))/2)*(a(i+1)-a(i))
     area=area+s
   end do
   total=area
   write(*,*)'area=',total
   end function fun
end module
program jian
   use mianji
   implicit none
   character(len=79)::filename1,filename2
   real::afilename1,afilename2,atotal
   write(*,*)'filename1'
   read(*,'(A79)')filename1
   write(*,*)'filename2'
   read(*,'(A79)')filename2
   afilename1=fun(filename1)
   afilename2=fun(filename2)
   atotal=afilename2-afilename1
   print*,afilename1
   print*,afilename2
   write(*,*)'cl=',atotal
end program jian
分开计算时afilename1=-0.7092733,afilename2=-2.587754E-02。用上面程序计算得到的afilename1=-0.7092733,afilename2=-0.7351311,afilename2是错的。为什么afilename2差这么多,是不是格式设置的问题?
望您指教!

回复列表 (共15个回复)

11 楼

[quote]加分 其实是对帮助人的感谢而已, 我觉得是一个比较礼貌的行为. 具体也是看发帖人, 个人也是无所谓.

不过这里我想问asymptotic一个问题, 子程序反复调用过程中临时变量确实是会有可能继承上次的值.
但是real::area=0 这样不是定义+初始化吗, 不会每次进入都过一遍?[/quote]


当初有个高手建议我,子程序的临时参数最好单独初始化,和声明放在一起容易出事。。。

12 楼

刚才看了一下 The Fortran 2003 Handbook P139-P141
real:: area = 0.0 这个是 implied Save attribute,看来所有符合 Fortran 标准的编译器都 必须遵从,因此鄙人在上面说 某些编译器 不妥。特此更正,方家指正。

13 楼

我刚才也翻了The Fortran 2003 Handbook, 没找到位置, 哈哈哈, 看得太少总是判断错位置. 多谢asymptotic列出页码了.
查看以前看的scientists and engineering似乎没有提到这个问题.
我写程序也是专门一块进行初始化的, 所以到现在还没遇到过这样的问题, 以后也注意一下!!

14 楼

不好意思,我是很多天没有登录了!

15 楼


呵呵。谢谢你的帮助,终于找到问题了!厉害!

我来回复

您尚未登录,请登录后再回复。点此登录或注册