Fortran Coder

查看: 10413|回复: 8
打印 上一主题 下一主题

[数值问题] F77的write问题(本来应该是0,但是显示成了2130567168)

[复制链接]

5

帖子

1

主题

0

精华

新人

F 币
26 元
贡献
14 点
跳转到指定楼层
楼主
发表于 2017-7-9 20:14:15 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
程序目的:键盘输入一维整型数组的3个元素,调用自定义的FUNCTION,对这3个元素求和,并且显示在屏幕上。
[Fortran] 纯文本查看 复制代码
        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, 下载次数: 275)

得到的错误结果

得到的错误结果

2222.png (43.66 KB, 下载次数: 275)

在FUNCTION里随意添加一个print后就能得到正确结果

在FUNCTION里随意添加一个print后就能得到正确结果
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

5

帖子

1

主题

0

精华

新人

F 币
26 元
贡献
14 点
沙发
 楼主| 发表于 2017-7-15 10:03:30 | 显示全部楼层
vvt 发表于 2017-7-10 09:37
我分别用 IVF,gfortran,Ftn95,g95 四种编译器做了测试。均能得到正确的结果。
不管注释行是注释还是执行 ...

你好,才看到。
我使用的是CVF。

5

帖子

1

主题

0

精华

新人

F 币
26 元
贡献
14 点
板凳
 楼主| 发表于 2017-7-15 10:40:04 | 显示全部楼层
kyra 发表于 2017-7-15 10:29
SUMARR 没有初始化。
[mw_shl_code=fortran,true]        PROGRAM SUM
        IMPLICIT NONE

哦好 谢谢 我试一下。但新定义的INTEGER变量,它的初始值不都是0吗?

5

帖子

1

主题

0

精华

新人

F 币
26 元
贡献
14 点
地板
 楼主| 发表于 2017-7-15 10:48:54 | 显示全部楼层
vvt 发表于 2017-7-10 09:37
我分别用 IVF,gfortran,Ftn95,g95 四种编译器做了测试。均能得到正确的结果。
不管注释行是注释还是执行 ...

你好,

kyra指出,因为SUMARR没有初始化,我由此调整了代码,得到了正确结果。

使用IVF、gfortran、Ftn95、g95都得到了正确的结果,应该是因为在这些编译器中,会给没有赋初值的INTEGER变量赋值为0。

而CVF可能在这方面出了些问题,所以我在FUNCTION中定义的SUMARR的初值并不是0,才产生了问题。

谢谢你的帮助:)

5

帖子

1

主题

0

精华

新人

F 币
26 元
贡献
14 点
5#
 楼主| 发表于 2017-7-15 12:47:44 | 显示全部楼层
燕雨蔷薇 发表于 2017-7-15 11:43
未初始化的变量,其值不确定。IVF、gfortran这些,如果是0,亦不能保证始终是0。
所以,任何编译器,都应该 ...

谢谢你的建议,"new variable should be created with type, name, initial value",完整地描述一个变量需要3个维度:NAME \TYPE \ INVAL。
这里是在练习FUNCTION的定义及使用方法,所以没有使用FORTRAN的libFUNs,谢谢你指出这种求和方法。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-5 09:49

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表