1

这个程序在 fortran 95 上的输出显示星号而不是数字。我也无法让 Experiment# 像这样按预期打印;实验一、实验二、实验三等。相反,它打印如下;实验一,实验一,实验一。

关于如何解决此问题的任何想法?以下是我的完整程序。

谢谢你的时间。

PROGRAM numbersgen
    IMPLICIT NONE

        !Variable declaration
        INTEGER, DIMENSION(:,:),ALLOCATABLE::numarray
        INTEGER, DIMENSION(:),ALLOCATABLE::temparray
        INTEGER:: numrolls, numexps
        INTEGER:: i=0, j=0
        REAL:: avg=0, sdv=0, variance=0, sum=0
        INTEGER:: k, min, pos, temp

        .............
        ------

        REAL, INTENT(IN):: sum
        REAL, INTENT(IN):: avg, variance, sdv

        PRINT*, " "
        PRINT*, "Sum: ",sum
        PRINT '(1X,A,F5.3)', "Average: ",avg
        PRINT '(1X,A,F5.3)', "Variance: ",variance
        PRINT '(1X,A,F5.3)', "Standard Deviation: ",sdv

        END SUBROUTINE

END PROGRAM
4

2 回答 2

5

F5.3格式要求值介于 0 和 9.999 之间。如果平均值超过此值或为负值,则它会飞溅。要找到合理的格式规范,请暂时将格式更改为,F15.3以便您至少可以看到值。

我不明白为什么实验编号无法增加。 哦哦!i子程序中使用的主程序的范围?!它们没有本地声明并且implicit none有效,所以我倾向于认为这是一个问题。一个容易确认的实验是将i主程序中的名称更改为完全不同的名称,例如expidx,并查看是否存在编译错误。(有四个地方需要改变。)

于 2011-04-13T03:29:10.177 回答
3

通过将您的子例程放在程序中的包含语句中,您可以让它们访问在您的程序中声明的数据。因此,使用 i 和 j 的子程序实际上会在程序本身内改变它们的值。不要这样做!

“正确”的方法是将您的子例程作为单独的程序单元或模块放在主程序中并使用它。

于 2011-04-13T05:22:36.100 回答