主题:为什么我的程序编译时总提示do循环有问题呢?
我使用两个do循环,感觉没问题的啊,为什么运行总出错。希望大家指点
ifort /nologo /Zi /Od /module:"Debug/" /object:"Debug/" /traceback /check:bounds /libs:static /threads /dbglibs /c /Qvc8 /Qlocation,link,"C:\Program Files\Microsoft Visual Studio 8\VC\bin" "C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\Console5\Console5\Console5.f90"
C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\Console5\Console5\Console5.f90(57) : Error: Syntax error, found IDENTIFIER 'EXIT' when expecting one of: <END-OF-STATEMENT> ;
IF(P2.LE.YZ*SIGMA2) THEN EXIT
-----------------------------------^
C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\Console5\Console5\Console5.f90(58) : Error: An ENDDO statement occurred without a corresponding DO or DO WHILE statement.
END DO
^
C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\Console5\Console5\Console5.f90(59) : Error: An ENDDO statement occurred without a corresponding DO or DO WHILE statement.
END DO
^
C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\Console5\Console5\Console5.f90(57) : Error: An unterminated block exists.
IF(P2.LE.YZ*SIGMA2) THEN EXIT
^
C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\Console5\Console5\Console5.f90(32) : Error: An unterminated block exists.
do J=1,KK
^
C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\Console5\Console5\Console5.f90(23) : Error: An unterminated block exists.
do I=1,NL
^
compilation aborted for C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\Console5\Console5\Console5.f90 (code 1)
以下是程序
PROGRAM MAIN
DIMENSION E(3,8),ED(1,2)
REAL ALPHA,B,GAMA,H,P,q1,q2,B2,ZI,YZ,RI,PI,SIGMA1,SIGMA2,SIGMAT,P1,P2,PT,E1,E2,Z,S,SI,ZL
INTEGER I,J,N,NL,K,KK,RD
OPEN(5,FILE="IN.DAT")
OPEN(6,FILE="OUT")
READ(5,*) ALPHA,B,GAMA,H
READ(5,*) NL,N,RD,ZI,YZ
READ(5,*) ((E(I,J),j=1,n+2),i=1,NL)
READ(5,*) (E(NL+1,I),I=1,N+2)
WRITE(*,*) (E(NL+1,I),I=1,N+2)
DO I=1,RD
READ(5,*) ED(I,1),ED(I,2)
end do
PI=2*ASIN(1.)
B2=B-2*H/TAN(ALPHA)
q1=GAMA*B*TAN(ALPHA)/2.
q2=GAMA*(B*TAN(ALPHA)/2.-H)
P1=2*0.5*(q1-q2)
Z=0.
ZL=0
S=0
SIGMA1=0
SIGMA2=0
do I=1,NL
K=E(I,1)/ZI
if((K1*ZI-E(I,1)).eq.0.)then
KK=K
else
KK=K+1 !KK为第I层土分层数
end if
ZL=E(I,1)/KK !ZI为第I层土分层的厚度
RI=I
do J=1,KK
SIGMA2=SIGMA2+E(I,2)*ZL ! 计算自重应力
SIGMA1=SIGMA2-E(I,2)*ZL
SIGMAT=(SIGMA1+SIGMA2)/2
T1=SIGMAT
contains
CALL INTERP (E,N,T1,EE,NL,RI) !调用插值子程序
E1=EE
Z=Z+ZL
P2=2./PI*(q2*ATAN(B/2./Z)-q1*ATAN(B2/2./Z)) !计算附加应力
PT=(P1+P2)/2.
T2=T1+PT
contains
CALL INTERP (E,N,T2,ee,NL,RI) !调用插值子程序
E2=EE
WRITE(*,71) I,ZL,Z
WRITE(*,72) SIGMA1,SIGMA2,SIGMAT
WRITE(*,73) P1,P2,PT
71 FORMAT(/1X,'I=', I4,3X,'HI=',F7.3,3X,'Z=',F7.3)
72 FORMAT(10X,'SIGMA1=', F10.3,3X,'SIGMA2=',F10.3,3X,'SIGMAT=',F10.3)
73 FORMAT(10X,'P1=', F10.3,3X,'P2=',F10.3,3X,'PT=',F10.3)
P1=P2
SI=(E1-E2)/(1+E1)*ZL*100.0
WRITE(*,21) E1, E2, SI
21 FORMAT(1x,"E1=",F10.3,3X,"E2=",F10.3,3X,"SI=",F10.3)
S=S+SI
IF(P2.LE.YZ*SIGMA2) goto 200
END DO
200 END DO
WRITE(*,15) S
15 FORMAT(//1X,'地基总沉降量==',F10.3,"cm")
STOP
END
SUBROUTINE INTERP(E,N,T,Z,NL,RI)
DIMENSION E(3,8),X(N),Y(N)
DO 120 I=1,N
X(I)=E(NL+1,I+2)
Y(I)=E(RI,I+2)
write (*,*) X(I),Y(I)
120 CONTINUE
Z=0.0
IF (N.LE.0) RETURN
IF (N.EQ.1) THEN
Z=Y(1)
RETURN
END IF
IF (N.EQ.2) THEN
Z=(Y(1)*(T-X(2))-Y(2)*(T-X(1)))/(X(1)-X(2))
RETURN
END IF
IF (T.LE.X(2)) THEN
K=1
M=3
ELSE IF (T.GE.X(N-1)) THEN
K=N-2
M=N
ELSE
K=1
M=N
10 IF (IABS(K-M).NE.1) THEN
L=(K+M)/2
IF (T.LT.X(L)) THEN
M=L
ELSE
K=L
END IF
GOTO 10
END IF
IF (ABS(T-X(K)).LT.ABS(T-X(M))) THEN
K=K-1
ELSE
M=M+1
END IF
END IF
Z=0.0
DO 30 I=K,M
S=1.0
DO 20 J=K,M
IF (J.NE.I) THEN
S=S*(T-X(J))/(X(I)-X(J))
END IF
20 CONTINUE
Z=Z+S*Y(I)
30 CONTINUE
RETURN
END
ifort /nologo /Zi /Od /module:"Debug/" /object:"Debug/" /traceback /check:bounds /libs:static /threads /dbglibs /c /Qvc8 /Qlocation,link,"C:\Program Files\Microsoft Visual Studio 8\VC\bin" "C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\Console5\Console5\Console5.f90"
C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\Console5\Console5\Console5.f90(57) : Error: Syntax error, found IDENTIFIER 'EXIT' when expecting one of: <END-OF-STATEMENT> ;
IF(P2.LE.YZ*SIGMA2) THEN EXIT
-----------------------------------^
C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\Console5\Console5\Console5.f90(58) : Error: An ENDDO statement occurred without a corresponding DO or DO WHILE statement.
END DO
^
C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\Console5\Console5\Console5.f90(59) : Error: An ENDDO statement occurred without a corresponding DO or DO WHILE statement.
END DO
^
C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\Console5\Console5\Console5.f90(57) : Error: An unterminated block exists.
IF(P2.LE.YZ*SIGMA2) THEN EXIT
^
C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\Console5\Console5\Console5.f90(32) : Error: An unterminated block exists.
do J=1,KK
^
C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\Console5\Console5\Console5.f90(23) : Error: An unterminated block exists.
do I=1,NL
^
compilation aborted for C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\Console5\Console5\Console5.f90 (code 1)
以下是程序
PROGRAM MAIN
DIMENSION E(3,8),ED(1,2)
REAL ALPHA,B,GAMA,H,P,q1,q2,B2,ZI,YZ,RI,PI,SIGMA1,SIGMA2,SIGMAT,P1,P2,PT,E1,E2,Z,S,SI,ZL
INTEGER I,J,N,NL,K,KK,RD
OPEN(5,FILE="IN.DAT")
OPEN(6,FILE="OUT")
READ(5,*) ALPHA,B,GAMA,H
READ(5,*) NL,N,RD,ZI,YZ
READ(5,*) ((E(I,J),j=1,n+2),i=1,NL)
READ(5,*) (E(NL+1,I),I=1,N+2)
WRITE(*,*) (E(NL+1,I),I=1,N+2)
DO I=1,RD
READ(5,*) ED(I,1),ED(I,2)
end do
PI=2*ASIN(1.)
B2=B-2*H/TAN(ALPHA)
q1=GAMA*B*TAN(ALPHA)/2.
q2=GAMA*(B*TAN(ALPHA)/2.-H)
P1=2*0.5*(q1-q2)
Z=0.
ZL=0
S=0
SIGMA1=0
SIGMA2=0
do I=1,NL
K=E(I,1)/ZI
if((K1*ZI-E(I,1)).eq.0.)then
KK=K
else
KK=K+1 !KK为第I层土分层数
end if
ZL=E(I,1)/KK !ZI为第I层土分层的厚度
RI=I
do J=1,KK
SIGMA2=SIGMA2+E(I,2)*ZL ! 计算自重应力
SIGMA1=SIGMA2-E(I,2)*ZL
SIGMAT=(SIGMA1+SIGMA2)/2
T1=SIGMAT
contains
CALL INTERP (E,N,T1,EE,NL,RI) !调用插值子程序
E1=EE
Z=Z+ZL
P2=2./PI*(q2*ATAN(B/2./Z)-q1*ATAN(B2/2./Z)) !计算附加应力
PT=(P1+P2)/2.
T2=T1+PT
contains
CALL INTERP (E,N,T2,ee,NL,RI) !调用插值子程序
E2=EE
WRITE(*,71) I,ZL,Z
WRITE(*,72) SIGMA1,SIGMA2,SIGMAT
WRITE(*,73) P1,P2,PT
71 FORMAT(/1X,'I=', I4,3X,'HI=',F7.3,3X,'Z=',F7.3)
72 FORMAT(10X,'SIGMA1=', F10.3,3X,'SIGMA2=',F10.3,3X,'SIGMAT=',F10.3)
73 FORMAT(10X,'P1=', F10.3,3X,'P2=',F10.3,3X,'PT=',F10.3)
P1=P2
SI=(E1-E2)/(1+E1)*ZL*100.0
WRITE(*,21) E1, E2, SI
21 FORMAT(1x,"E1=",F10.3,3X,"E2=",F10.3,3X,"SI=",F10.3)
S=S+SI
IF(P2.LE.YZ*SIGMA2) goto 200
END DO
200 END DO
WRITE(*,15) S
15 FORMAT(//1X,'地基总沉降量==',F10.3,"cm")
STOP
END
SUBROUTINE INTERP(E,N,T,Z,NL,RI)
DIMENSION E(3,8),X(N),Y(N)
DO 120 I=1,N
X(I)=E(NL+1,I+2)
Y(I)=E(RI,I+2)
write (*,*) X(I),Y(I)
120 CONTINUE
Z=0.0
IF (N.LE.0) RETURN
IF (N.EQ.1) THEN
Z=Y(1)
RETURN
END IF
IF (N.EQ.2) THEN
Z=(Y(1)*(T-X(2))-Y(2)*(T-X(1)))/(X(1)-X(2))
RETURN
END IF
IF (T.LE.X(2)) THEN
K=1
M=3
ELSE IF (T.GE.X(N-1)) THEN
K=N-2
M=N
ELSE
K=1
M=N
10 IF (IABS(K-M).NE.1) THEN
L=(K+M)/2
IF (T.LT.X(L)) THEN
M=L
ELSE
K=L
END IF
GOTO 10
END IF
IF (ABS(T-X(K)).LT.ABS(T-X(M))) THEN
K=K-1
ELSE
M=M+1
END IF
END IF
Z=0.0
DO 30 I=K,M
S=1.0
DO 20 J=K,M
IF (J.NE.I) THEN
S=S*(T-X(J))/(X(I)-X(J))
END IF
20 CONTINUE
Z=Z+S*Y(I)
30 CONTINUE
RETURN
END