
end用于结束一段程序或子程序,上边提示错误信息undefined label 4,也就是说前边有一个4号标签是未定的:比方说上边的这个循环,如果写成:
DO 73 I = 1, N
WRITE(,) TTTTTTTTTT
74 CONTINUE
由于73号标签不能与CONTINUE前的74号对应,也会出现上述错误。一楼说的是针对另一种没有标签的DO循环,跟问题中的错误并不对应。
你的do 写成 d0 了 !
PROGRAM CREEPLIFETOOL
IMPLICIT DOUBLE PRECISION(A-H,O-Z)
DIMENSION DV(1000),D(1000),SG(100),TF(100),NS(100),ES(100)
WRITE(,)'ULTIMATE AND MINIMUM STRESS /MPA'
READ(,) SB,SMIN
WRITE(,)'TIME INCREMENT /S'
READ(,) DT
WRITE(,) 'NECKLING STRAIN EV'
READ(,) EV
c! LINEAR CREEP LIMIT
SV=1000
c! 幂蠕变线性蠕变特性
B=30E-20
B0=30E-12
CM=50
c! 幂蠕变损伤累积特性
CC=18E-19
BT=50
c! 线性蠕变损伤累积特性
CL=33E-13
BT2=20
GAM=50
SF=650
c! 应力计算点设定
Do 100 I=1,100
SG(I)=SMIN+I(SB-SMIN)/1000
ES(I)=00
100 CONTINUE
Do 200 I=1,100
DV(1)=00
D(1)=00
DVC=00
DC=00
CR0=SG(I)/SB
EV0=00
EVC=EV/B/SG(I)CM
Do 300 J=2,10000000
ST=SG(I)/(1-DV(J-1))/(1-D(J-1))
DDV=DTB(10-DV(J-1))STCM
IF(STLESV) DDV=DTB0ST
IF(STLESV) THEN
DV(J)=DV(J-1)+DTB0ST(10-DV(J-1))
ENDIF
IF(STGTSV) THEN
DV(J)=DV(J-1)+DTB(10-DV(J-1))STCM
ENDIF
H=00
IF(STGTSF) H=10-(SF/ST)GAM
IF(STGTSV) THEN
D(J)=D(J-1)+DTCCSTBTH
ES(I)=ES(I)+BSTCMDT(10-DV(J-1))
ELSE
D(J)=D(J-1)+DTCLSTBT2H
ES(I)=ES(I)+B0STDT(10-DV(J-1))
ENDIF
CR1=(10-DV(J))(10-D(J))
IF(CR1LTCR0ORD(J)GT05) THEN
NS(I)=0
TF(I)=(J-2)DT
WRITE(,210) I,J,NS(I),DV(J),D(J),ES(I)
GOTO 200
ENDIF
IF(ES(I)GTEV) THEN
NS(I)=1
TF(I)=(J-2)DT
WRITE(,210) I,J,NS(I),DV(J),D(J),ES(I)
GOTO 200
ENDIF
300 CONTINUE
200 CONTINUE
210 FORMAT(1X,2(I7,1X),I3,1X,3(F63,1X))
OPEN(3,FILE='CREEPLIFE')
WRITE(3,) ' SG CRLIFE CRSTYE'
c! CRSTYLE=0 NO OBVIOUS NECKLING
c! CRSTYLE=1 NECKING BEFORE FAIURE
DO 500 I=1,100
WRITE(3,400) SG(I), TF(I), NS(I), ES(I)
500 CONTINUE
400 FORMAT(2X,2(E125,2X),I2,1X,E125)
CLOSE(3,STATUS='KEEP')
END
答: 具体的两个错误已经用方框圈出来了
错误信息
第1个错误就是你少了一个右括号,或者说多了一个左括号,实际上在我们用程序写一个表达式的时候,特别容易出这个错误,因为太多括号了容易丢,所以这个时候你去检查一下就行,这个不算很难,另外其实有些编译器当你打括号的时候都会自动补全另一半,所以也不容易出现这样的错误了;第2个错误根据他的英文提示,同时看我的第2个方框框出来的,他的意思是PI没有定义为一个函数或者变量,我感觉你本来是想把PI定义成那个圆周率的常量,对吧?那如果是常量的话,PI和后面的东西相乘时要加一个,即变成PI(1-e(-30)),不然的话,PI就会被误以为成一个函数,后面的是它的参数。总的来说,英文的错误提示已经非常详细了,这也告诉我们以后要通过这个错误来进行分析,授人以鱼,不如授人以渔,希望帮助到你。数据溢出了,整型变量的的范围在-2^31~2^31-1,即-2147483648~2147473647之间,当计算到2的31次方时,数据大于2147473647,被自动设置为-2147483648,因此出错,将变量sum换为实型或者双精度型可解决。
代码修改为:
program found
implicit none
integer::n
real::sum
do n=0,63
sum=sum+20n
print,n,sum
end do
end program
调用子程序RDDATA时,实参和形参的不匹配。
有可能是与形参的数量或顺序不匹配。
请检查一下被调用的子程序RDDATA的代码,将call语句调用时的实参与该子程序形参的数量、类型、顺序做一个检查、对比,找出问题所在。
以上就是关于我在用fortran编程调试程序的时候有一个错误不知道怎么改,希望有高手可以帮忙!全部的内容,包括:我在用fortran编程调试程序的时候有一个错误不知道怎么改,希望有高手可以帮忙!、fortran程序总是出现四个错误,求大神帮忙看看哪里出错啦,拜托拜托、焊接子程序FORTRAN语言出错:This name has not been declared as an array or a function. [PI]等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)