当前位置:首页
建筑知识
阅读下列FORTRAN程序:MQIUH=N (5) +N (10)WRITE(*,’(2X, 15)’)MQIUHENDFUNCTION N (K)N=0DO 10 J=1,kN=N+J10 CONT
阅读下列FORTRAN程序:MQIUH=N (5) +N (10)WRITE(*,’(2X, 15)’)MQIUHENDFUNCTION N (K)N=0DO 10 J=1,kN=N+J10 CONTINUERETURNEND程序运行后的结果是:
A、65
B、85
C、90
D、70
【正确答案:D】
这是一个函数子程序调用题,第一次5与K对应,N (S) =1+2+3+4+5=15, 第2次10与K相应,N (10)=1+2+3+4+5+6+7+8+9+10=55,N (S) +N (10) =70。
PROGRAM MAIN !主程序
DOUBLE PRECISION A,AA,XX,XX1,XX2,TYY0,TYX0,YY0,YX0!定义双精度变量
DIMENSION A(101),AA(101)!定义数组
OPEN(10,FILE='OUTPUT.TXT',STATUS='UNKNOWN')!建立输出文件通道
WRITE(*,*)'此程序用于求解一元N次方程最接近给定的X0的一个解。'!屏幕提示
WRITE(*,*)'请输入N(≤100,0=EXIT):'!屏幕提示
2 READ(*,*)N !从屏幕读取N
IF(N.EQ.0) THEN !判定如果N=0则程序转去标识符号10000处
GOTO 10000
END IF
IF((N.Lt.0).OR.(N.GT.100)) THEN !判定如果N小于0或N大于100 则屏幕提示重新输入N
WRITE(*,*)'请重新输入N(≤100,0=EXIT):'
GOTO 2 !转到 标识2句处执行
ENDIF
WRITE(*,*)'请依次输入各项系数AN~A0(高次幂~低次幂)。'屏幕提示
WRITE(*,*)'每个数据后回车:'屏幕提示
DO 5 I=1,N+1 输入数组A(I)
READ(*,*) A(I)
5 CONTINUE
IF(MOD(N,2).EQ.0) THEN
WRITE(*,*)' '
WRITE(*,*)'对N为偶数的情况,请仔细校核。'
WRITE(*,*)' '
END IF
WRITE(*,*)'请输入X0:'
READ(*,*) X0
DO 10 I=1,N 输入数组AA(I)
AA(I)=(N-I+1)*A(I)
10 CONTINUE
ICOUNT=0 给ICOUNT赋值
XX=X0给XX赋值
DO 30 I=1,1000000 对I循环从1到10000000
ICOUNT=ICOUNT+1每循环一次计数加一
YY0=0.给YY0赋值
YX0=0.给YX0赋值
DO 40 J=1,N
TYY0=A(J)*(XX**(N-J+1)) 计算TYY0,YY0
YY0=YY0+TYY0
40 CONTINUE
YY0=YY0+A(N+1) 计算YY0
DO 50 K=1,N-1套另一个循环 对K循环从1到N-1
TYX0=AA(K)*(XX**(N-K))
YX0=YX0+TYX0
50 CONTINUE
YX0=YX0+AA(N) 计算YX0
IF(YX0.EQ.0) THEN 判别 YX0如果=0 则
XX=XX+1XX加1
ICOUNT=ICOUNT-1 计数减1
GOTO 30 结束I这一步大循环开始I的下一步循环
END IF
IF(MOD(I,2).EQ.1)THEN判别
XX1=XX-YY0/YX0
XX=XX1
ELSE
XX2=XX-YY0/YX0
XX=XX2
END IF
XX=.5*((XX1+XX2)-(-1)**I*(XX1-XX2)) 计算赋值
IF(ICOUNT.GE.1000) THEN 判别 如果计数大于等于1000则结束程序
WRITE(*,*)' ' 屏幕输出提示
WRITE(*,*)'此方程无实数解。'屏幕输出提示
GOTO 10000 则结束程序
END IF
IF((ABS(XX2-XX1).LE.1.D-15).AND.(ICOUNT.GT.1)) THEN
IF((ABS(XX).GT.1.D-6).AND.(ABS(XX).LT.9.D6)) THEN
GOTO 1000
ELSE
GOTO 1001
END IF
END IF
30 CONTINUE
1000WRITE(*,100)XX
GOTO 1010
1001WRITE(*,101)XX
100 FORMAT(8X,'X=',F25.6)
101 FORMAT(8X,'X=',D25.6)
1010WRITE(*,*)' '
WRITE(*,*)'本程序计算结果仅供参考。'
WRITE(*,*)' '
PAUSE
10000 STOP
END
在一个程序中实现你的要求:
dimension no(100),score(100)
integer no,score
n=10
c 读数据
do 10 i=1,n
read(*,*) no(i),score(i)
10 continue
c 将数据输出到屏幕
do 12 i=1,n
write(*,*) no(i),score(i)
12 continue
write(*,*)
c 将数据写入文件cj.out
open(99,file='cj.out',status='unknown')
do 15 i=1,n
write(99,*) no(i),score(i)
15 continue
close(99)
c 读刚生成的cj.out文件
open(1,file='cj.out')
do 18 i=1,n
read(1,*) no(i),score(i)
18 continue
close(1)
m=0
do 19 i=1,n
if (score(i).lt.60) then
m=m+1
write(*,*) no(i),score(i)
endif
19 continue
write(*,*) '不及格人数=',m
write(*,*)
m=0
do 20 i=1,n
if (score(i).ge.60.and.score(i).lt.70) then
m=m+1
write(*,*) no(i),score(i)
endif
20 continue
write(*,*) '60~70之间人数=',m
write(*,*)
m=0
do 21 i=1,n
if (score(i).ge.70.and.score(i).lt.80) then
m=m+1
write(*,*) no(i),score(i)
endif
21 continue
write(*,*) '70~80之间人数=',m
write(*,*)
m=0
do 22 i=1,n
if (score(i).ge.80) then
m=m+1
write(*,*) no(i),score(i)
endif
22 continue
write(*,*) '80以上人数=',m
write(*,*)
pause
end
程序补充
SUBROUTINE
FN(N,X,Y,Z)
IMPLICIT
REAL(A-H,O-Z)
PARAMETER
(a=1.80,L=21.0,G=1.20)
DIMENSION
R(N,N),X(N),Y(N),Z(N)
CALL
DISTANCE(N,X,Y,Z,R)
FX=0
DO
I=1,N
DO
J=1,N
DO
K=1,N
F1=EXP(G/(R(I,J)-a)+G/(R(I,K)-a))
F2=((R(I,J)**2+R(I,K)**2-R(J,K)**2)/(2*R(I,J)*R(I,K))+1/3)**2
FX=FX+L*F1*F2
ENDDO
ENDDO
ENDDO
RETURN
END
SUBROUTINE
FT(N,X,Y,Z)
IMPLICIT
REAL(A-H,O-Z)
PARAMETER
(c=7.049556277,d=0.6022245584,P=4,Q=0,a=1.80)
DIMENSION
R(N,N),X(N),Y(N),Z(N)
CALL
DISTANCE(N,X,Y,Z,R)
FY=0
DO
I=1,N
DO
J=1,N
IF(R(I,J).LT.a)
THEN
FY=FY+c*((d**(-P))-R(I,J)**(-Q))*EXP(1/(R(I,J)-a))
ELSE
FY=0
ENDIF
ENDDO
ENDDO
RETURN
END
SUBROUTINE
ENERGY(N,X,Y,Z)
IMPLICIT
REAL(A-H,O-Z)
DIMENSION
X(N),Y(N),Z(N)
CALL
FN(N,X,Y,Z)
CALL
FT(N,X,Y,Z)
E=FX+FY
RETURN
END
DO
I=1,N
DO
J=1,N
DO
K=1,N
F1=EXP(G/(R(I,J)-a)+G/(R(I,K)-a))
F2=((R(I,J)**2+R(I,K)**2-R(J,K)**2)/(2*R(I,J)*R(I,K))+1/3)**2
FX=FX+L*F1*F2
ENDDO
ENDDO
ENDDO
RETURN
END