FORTRAN90练习题 下载本文

A. 只有一个主程序没有外部子程序 B. 只有一个主程序和若干子程序 C. 只有一个主程序和一个子程序 D. 只有外部子程序而没有主程序

二. 填空题(在空白处添入正确内容)

1.下列程序执行后,num(1,3)= ,num(2,3)= ,num(3,1)= 。 INTEGER(1),DIMENSION(1:3,1:3)::num=0 INTEGER(1)::i=1,j=2,k num(i,j)= 1 DO k= 2,9

i= i-1 ; j= j-1 IF(I<1.AND.j<1)THEN i=i+2; j=j+1 ELSEIF(i<1.AND.j>=1)THEN i=3

ELSEIF(i>=1.AND.j<1)THEN j=3

ELSEIF(i<=3.AND.j<=3)THEN IF(num(i,j )/= 0)THEN i=i+2; j=j+1 ENDIF ENDIF num(i,j)=k ENDDO

PRINT '(6X,3I3)',((num(i,j),j= 1,3),i= 1,3)

END

2. 阅读以下程序:

SUBROUTINE swap(S1,S2) CHARACTER(*) S1,S2 CHARACTER(3)T T=S1;S1=S2;S2=T END SUBROUTINE PROGRAM MAIN

CHARACTER(3) :: S1='BD',S2='BC',S3='AB' IF (S1>S2) CALL swap(S1,S2) IF (S2>S3) CALL swap(S2,S3) IF (S1>S2) CALL swap(S1,S2) PRINT*,S1; PRINT*,S2; PRINT*,S3 END PROGRAM MAIN

执行以上程序后,输出的结果是 3. 阅读以下程序:

PROGRAM MAIN

INTEGER:: A(3,3),I,J,K,N

DO K=1,5

IF(K<=3)THEN

DO I=1,K N=N+1 A(I,K-I+1)=N ENDDO DO I=1,6-K N=N+1

A(K-3+I,4-I)=N ENDDO

ELSE

ENDIF

ENDDO DO K=1,3

DO I=1,3

PRINT'(I3\\)',A(K,I); ENDDO PRINT*

ENDDO

END PROGRAM MAIN

执行以上程序后,A(1,3)的值是 ,A(2,2)的值是 ,A(3,1)的值是 。 4. 阅读以下程序: REAL A(10),IP DO K=1,10

A(K)=IP(K*2)/IP(K) ENDDO

WRITE(*,100) A(1),A(2) 100 FORMAT(1X,2F3.1)

END

REAL FUNCTION IP(N) M=0 DO K=1,N M=M+K ENDDO IP=M END

执行以上程序后,A(1)的值是 ,A(2)的值是 。 5. 用选择法,将N个整数按从小到大排列。 PARAMETER(numl=500) INTEGER num(numl)

READ*,N,(num(I), ) DO I=1,N-1

min=I

DO J=

IF(num(min)>num(J)) ENDDO

IF(min .NE. I)THEN it=num(I) num(I)=num(min) ENDIF ENDDO

PRINT*,(num(I),I=1,N)

END 6.求N!。

PRINT*,'Input N?' READ *,N M=1 DO

nfac=nfac*M IF( )THEN PRINT*,'N!=',nfac ENDIF M=M+1 ENDDO END

7.下列程序运行后,A(1,4)= ,A(5,3)= 。

INTEGER A(5,5),T,I,J,K,M DO I=1,5

DO J=1,5 A(I,J)=J ENDDO DO K=1,I-1

T=A(I,5) DO M=4,1,-1

A(I,M+1)=A(I,M) ENDDO A(I,1)=T

ENDDO

ENDDO

PRINT\END

8. 下列程序的运行结果是_________________。

PROGRAM MAIN

INTEGER::A(5)=(/4,1,3,2,5/) INTEGER::S1=0,S2=1,I DO I=1,5

IF(MOD(I,2)/=0)THEN S1=S1+A(I) ELSE

S2=S2*A(I) ENDIF ENDDO PRINT*,S1 PRINT*,S2

END

9.下列程序运行后输出结果:M= ,X= 。

OPEN(1,FILE='A.DAT')

WRITE(1,'(2I1/F3.1)') 2,3,4.5 CALL ABC END

SUBROUTINE ABC REAL X INTEGER M BACKSPACE(1) READ(1,\M=X

WRITE(*,\END

10.下面程序的功能是输入十个任意四位整数A,用来检验inver子程序的可靠性。其中CALL inver(A,

B)应能将A中四位数倒过来成为B(如A=1966,可得B=6691)。最后计算并输出由具体数字构成的算式C=A+B。 INTEGER A,B,C,I DO I=1,10 READ*,A

DO WHILE(A<1000 .OR. A>9999) READ*,A ENDDO

CALL inver(A,B) C=A+B

PRINT'(1X,I5,\ENDDO

END

SUBROUTINE inver(M,N) IMPLICIT NONE A=M DO I=1,4

NN(I)=MOD(A,10)

ENDDO B=0 DO J=1,4

K=NN(J)*10**(4-J) B=B+K

ENDDO END

11. 阅读下列程序.其功能是使用筛法选出N以内的所有素数并显示。

算法:在N以内的自然数列中先筛除2的倍数;在2之后筛乘下的第一个数是3,于是再筛除3的倍数;在3之后筛剩下的第一个数是5,于是再筛除5的倍数;如此重复下去,直到遇见筛剩下的第一个数是最接近N的平方根的那个数为止。请在其中____处填入适当的内容。 PROGRAM PRINES PARAMETER (N=100) INTEGER A(N),P(N) DO K=1,N A(K)=K ENDDO DO K=3,N

IF(__ ___.EQ.0) A(K)=0 ENDDO

ISR=SQRT(REAL(N)) DO M=3,ISR,2 DO K=M+2,N

IF(A(K)/=0.AND.MOD(A(K),M)==0)A(K)=0 ENDDO ENDDO M=1 DO K=2,N

IF(A(K).NE.0)THEN ____ _ M=M+1 ENDIF ENDDO