PROGRAM SUM
IMPLICIT NONE
INTEGER SUMARR ! FUNCTION的声明
INTEGER N,S,A(3)
N=3
READ *,A
S=SUMARR(A,N) ! 调用自定义FUNCTION
WRITE(6,10) S
10 FORMAT(1X,'SUM OF THE ARRAY ELEMENTS: ',I10) !不管输入是多少,程序的输出总是 213056**** 这种类型的10位数字
ENDPROGRAM SUM
INTEGER FUNCTION SUMARR(A,N) ! FUNCTION定义
IMPLICIT NONE
INTEGER I,N,A(N)
DO I=1,N
SUMARR=SUMARR+A(I)
ENDDO
C PRINT *,'' ! 如果这一行由注释变成可执行语句,程序的求和会正常输出,比如输入1,1,1, 就会输出3;如果这行作为注释行,输入0,0,0,得到的结果是2130567168
RETURN
END
1111.png (39.31 KB, 下载次数: 306)
得到的错误结果
2222.png (43.66 KB, 下载次数: 308)
在FUNCTION里随意添加一个print后就能得到正确结果
vvt 发表于 2017-7-10 09:37
我分别用 IVF,gfortran,Ftn95,g95 四种编译器做了测试。均能得到正确的结果。
不管注释行是注释还是执行 ...
PROGRAM SUM
IMPLICIT NONE
INTEGER SUMARR
INTEGER N,S,A(3)
N=3
READ *,A
S=SUMARR(A,N)
WRITE(6,10) S
10 FORMAT(1X,'SUM OF THE ARRAY ELEMENTS: ',I10)
ENDPROGRAM SUM
INTEGER FUNCTION SUMARR(A,N)
IMPLICIT NONE
INTEGER I,N,A(N)
SUMARR = 0 !!!!!!!!!!!******这一句非常重要
DO I=1,N
SUMARR=SUMARR+A(I)
ENDDO
C PRINT *,''
RETURN
END
kyra 发表于 2017-7-15 10:29
SUMARR 没有初始化。
[mw_shl_code=fortran,true] PROGRAM SUM
IMPLICIT NONE
vvt 发表于 2017-7-10 09:37
我分别用 IVF,gfortran,Ftn95,g95 四种编译器做了测试。均能得到正确的结果。
不管注释行是注释还是执行 ...
燕雨蔷薇 发表于 2017-7-15 11:43
未初始化的变量,其值不确定。IVF、gfortran这些,如果是0,亦不能保证始终是0。
所以,任何编译器,都应该 ...
欢迎光临 Fortran Coder (http://bbs.fcode.cn/) | Powered by Discuz! X3.2 |