fortran在功能上给出了错误的数字

时间:2014-03-14 19:08:05

标签: function fortran

我在fortran中有这个简单的程序

program T55
   integer i,j
   double precision x(1,100),D,ff,g

   do i=1,5
      x(1,i)=5
   enddo
   D=1
   do i=6,8
      x(1,i)=11
     write(*,*)x(1,i)
   enddo
   do i=1,4
      g=ff(i,x(1,i),D)
   enddo
end program T55
double precision function ff(i,x,D)
   integer i,j
   double precision x(1,100),D
   D=1
   write(*,*)x(1,i),i

end function ff

我从Function获得的数字不正确,例如我得到

1 5
2 5
3 5
4 11
你可以告诉我哪里弄错了吗?

1 个答案:

答案 0 :(得分:2)

让我为你执行你的程序:

在第一个循环之后(do i = 1,5)

index =  1  2  3  4  5  6  7  ...
x     =(/5, 5, 5, 5, 5, ?, ?, ?, ?, ?, .../)

在哪里?表示未定义的值

在第二个循环之后(do i = 6,8)

index =   1  2  3  4  5   6   7  ...
x     = (/5, 5, 5, 5, 5, 11, 11, 11, ?, ?.../)
循环中的

(i = 1,4)这就是发生的事情:

i = 1:你用i = 1和整个数组x调用ff,(我忽略了参数D it 没用了)

ff在数组参数的第1位打印元素,即5

i = 2,你用i = 2调用ff,从x的索引2开始调用数组。

ff打印其数组参数位置2的元素,该元素对应于原始数组的索引3,它包含5

i = 3,你用i = 3调用ff,从x的索引3开始调用数组。

ff打印其数组参数位置3的元素,该元素对应于原始数组的索引5,它包含5

i = 4,你用i = 4调用ff,从x的索引4开始调用数组。

ff打印其数组参数位置4的元素,该元素对应于原始数组的索引7,它包含11