我在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
你可以告诉我哪里弄错了吗?
答案 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