最后这个数是哪来的?
Program test_contains_localVarImplicit None
Integer :: i
Do i = 1, 3
Write(*,*) 'ido=',i
Write(*,*) 'fact=',fact(i)
End do
Contains
Function fact(n)
Integer :: fact,n,temp
temp = 1
Do i = 2, n
Write(*,*) 'i=',i
temp = i*temp
End do
fact = temp
End Function fact
End Program test_contains_localVar
出来的结果是:
ido= 1
fact=1
ido=3
i=2
i=3
6
好奇怪啊,为什么主程序里直接跳过2了?最后那个6是哪来的,我输出语句都标注了?
为什么没有ido=2啊?有大佬知道原因嘛?:'( 我记得视频教程里面明确说过fortran没有全局变量,但我们老师说刚才那个程序中,i
是全局变量,只是后来到了function里面变成局域变量了,这是什么情况?:'( 2个问题,见注释
Program test_contains_localVar
Implicit None
Integer :: i , s
Do i = 1, 3
Write(*,*) 'ido=',i
s = fact(i) !//避免主程序write中子程序也write
Write(*,*) 'fact=',s
End do
Contains
Function fact(n)
Integer :: i,fact,n,temp!//子程序要单独定义循环变量
temp = 1
Do i = 2, n
Write(*,*) 'i=',i
temp = i*temp
End do
fact = temp
End Function fact
End Program test_contains_localVar 胡文刚 发表于 2020-2-20 10:34
2个问题,见注释
Program test_contains_localVar
Implicit None
我试了一下,确实正常了。不过,我发现,如果在函数中不单独定义i,就会在主程序中直接跳过i=2,而且编译和运行也不报错,这是fortran的什么特性导致的嘛? 如果 fact 里不定义 i,就会继承主程序的 i (因为 fact 是 contains 在主程序里的,所以会继承)
那么,主程序 i=1 的时候,fact 就修改了 i。修改后 i=3,所以到主程序去的时候,i就直接是3,而跳过了 i=2 fcode 发表于 2020-2-20 15:30
如果 fact 里不定义 i,就会继承主程序的 i (因为 fact 是 contains 在主程序里的,所以会继承)
那么,主 ...
原来如此,我明白了。谢谢大佬{:4_110:}
页:
[1]