FORTRAN习题答案 下载本文

习题二

一、问答题

1. 给出下面变量名称,哪些是合法变量?哪些是非法变量?说明原因。

Count、num_2、x&y、4x+5y、china-suzhou、$us、AbCdE、Mr.bai、t5、 _another、school_class_25、#125、2002Y、π、β、A01/02、alpha、date(1) 1. 判定下面整数,指出哪些是合法整数,哪些是非法整数?说明原因。

-0、+ 215、$125、3,245,895、5.3245、5#384、-524_3、#5DFE、 23-345、16#1A2B、38#ABCD、8#275_2、+327890、4 #321 2. 判定下面实数,指出哪些是合法实数,哪些是非法实数?说明原因。

-0E2、45.2345E3.5、-5489E25_8、-.2345E-35、$185.45E、+ 2.753425E24_3、 58D85、+0.E-0、-00000.001E5、5,443,223.44、-12 34E+2、+ 18.5E 18、2.5E42

习题三

一、选择题

1.下面是Visual Fortran中正确的表达式是 。

(A)A*COS(X)+∣B∣ (B)2*EXP(2*X)/SQRT(16.0) (C)B-4AC (D)MOD(24.5,0.5) 2.下面算术赋值语句中正确的语句是 。 (A)M*N=(X-Y)/Z (B)+R=A+B/C (C)X=Y=Z-1.0 (D)Y=A*B/C/D 3.算术表达式1/3+2/3的值为 。

(A) 二、问答题

1. 将下列代数式用Visual Fortran表达式描述:

Ax0?By0?C2

0 (B) 1 (C) 0.99999999 (D)值不确定

1y?e sin① 2 2 ② 2 z

A?B

③ 4sin3A-3sinA+sin3A ④

sin(p?a)sin(p?b)sin(p?c)sinp 2.执行下列赋值语句后,变量中的值。变量的类型遵循I—N规则。设I=6,K=2,N=-3,

T=7.5,Y=1.5

①L=T/Y/2.0 2 ②M=I/K*Y+1.5 6 ③Z=I*K+Y 13.5 ④A=I**K/N+T/Y -7.0

习题四

一、运行程序题

1. 判断下列输入输出语句是否正确?

(1) PRINT*, ′X=′, X, ′X*Y**2=′, X*Y**2 (2) WRITE ( * , * ) A, B, NO, ′Y=′, Y (3) READ*, N, M, 5.0K (4) WRITE ( *,22 ) A, B, I, K, C 22 FORMAT ( 4X, 2F5.0, 2I5 ) (5) WRITE ( 8,33 ), X, Y, M, Z, N, 33 FORMAT ( 4X, 2F5.0 2I5 ) (6) READ ( *,44 ) NF, G, H, I, J

44 FORMAT ( 4X, I5, 2 ( F6.2, I5 ) )

2. 已知整型变量i、j、k、l、m、n,执行下面表控输入语句:

READ*, i,j READ*, k,l,m READ*, n

按以下格式输入8个数据: 25

26 50 45 57 43 27 28

输入语句执行后,每个变量取何值? i=25、j=26、k=27、l=28、m=0、n=0 3. 写出输出结果,设I=56,J=1274,K=5126

WRITE ( *,100 ) I, J, K (1) 100 FORMAT ( 1X, I4 ) (2) 100 FORMAT ( 1X, 2I5 )

56 1274 5126

(3) 100 FORMAT ( 1X, 2 ( I5,2X ) / )

56 1274 5126

4. 写出输出结果,设I=512,J=612,A=18.34,B=-21.4,C=112.463,D=-2174.573

WRITE ( *,100 ) I,J,A,B,C,D

(1) 100 FORMAT ( 1X,I5,2X,2 ( F10.2,2X ),F12.1 ) 512 0.00E+00 18.34 -2.14 112.46 -2174.57

(2) 100 FORMAT ( 3X,2 ( I4,2X ),2 ( F10.2,2X ),′NEW′ ) 512 0.00E+00 18.34 -2.14 NEW

112.46 -2174.57 NEW 5. 有读入语句:

READ ( *,100 ) I,J,B

设输入的值为:I=63,A=76.5,J=122,B=156.783。如用下面的FORMAT语句应如何输入数据。

(1) 100 FORMAT ( I4,F6.2,I5,F8.2 ) (2) 100 FORMAT ( I4,2X,F6.2,I5,F8.2 ) (3) 100 FORMAT ( 1X,2 ( I4,2X,F10.2 ) ) (4) 100 FORMAT ( I4,F6.2/I5,F8.2 ) (5) 100 FORMAT ( I4/F6.2/I5/F8.2 ) (6) 100 FORMAT ( I5,F8.1 ) 6.IMPLICIT NONE INTEGER::I,J,K READ *,I,J K=I/J

PRINT *,?K=?,K

END

当输入9,2时,输出结果为 K=4 。 7.IMPLICIT NONE REAL::I,J,K READ(*,*)I,J K=I/J

WRITE(*,*)?K=?,K

END

当输入9,2时,输出结果为 K=4.500000 。

8.下面是一些非法的输入输出语句和格式说明语句。说明其非法原因。

READ * i,j,k READ 10 i,j,k READ *,?i=?,i,?j=?,j READ(*,10) i,j,125

READ(*,?(“i=”,I3,“j=”,I3)?) i,j READ(?(I3,I3)?,*) i,j

10 FORMAT(1X,I3,:,I3,:,I3)

PRINT * i,j,k PRINT 10 i,j,k WRITE *,?i=?,i,?j=?,j WRITE(20,*) i,j,125

PRINT(*,?(“i=”,I3,“j=”,I3)?) i,j

WRITE(?(I3,I3)?,*) i,j

20 FORMAT(1X,I3,I3 I3) 9.给定下面READ和FORMAT语句: READ 100,i,j,k,m,n

100 FORMAT(I2,I3,2X,I2,1X,I4.1,I3) 执行READ语句,输入以下5组数据:

12345678901234567890↙ 1?322?43??565?768?78↙ ?12,3?43?7??,2?3455↙ ??1232;45A18?93?215↙ 1?23;324;445;555;777↙

READ语句执行后,每组i,j,k,m,n的值分别是多少? 10.给定下面READ和FORMAT语句: READ 100,a,b,c

100 FORMAT(F5.2,F5.1,E8.3) 执行READ语句,输入以下5组数据:

12345678901234567890↙ 123,456789012,345890↙ 1?322?43??565?E+?28↙ 123E2343?7??2?3455↙ 1.23245.E3.1893?215↙

READ语句执行后,每组a,b,c的值分别是多少?

11.已知:i=25,j=-125,k=-4725,m=-31500,a=48.57,x=-1.5E+11,y=158.895E-11。

给定输出语句:WRITE(*,100)i,a,j,b,k,m,x,y 对下面不同的FORMAT语句,写出输出结果:

① 100 FORMAT(1X,I3,1X,F5.2,1X,I4,1X,F9.2,I5,I6,E12.3,E12.3E3) ② 100 FORMAT(3X,I4,1X,F9.2,1X,I4,1X,F9.2,2I5,2E12.3)

③ 100 FORMAT(??i=?,I3,?a=?,F5.2,?j=?,I4,?b=?,F9.2,?k=?,I5,?m=?,I6,

?x=?,E12.3,?y=?,E12.3E3)

④ 100 FORMAT(2(2X,I4,2X,F9.2),2I5,2E12.3)

⑤ 100 FORMAT(1X,I3,1X,F5.2/1X,I4,1X,F9.2/I5,I6,E12.3,E12.3E3) 12.已知:i=315,j=512,a=43.57,b=-15.9,c=123.456,d=-5231.573。

给定输出语句:WRITE(*,100)i,j,a,b,c,d 对下面不同的FORMAT语句,写出输出结果: ① 100 FORMAT(1X,I4,2X,I5,2X,2(F7.2,2X),F10.1) ② 100 FORMAT(1X,2(I4,2X),2(F7.2,2X),?OLD?) 13.给定下面程序:

READ 10,i,j,k,m,n

10 FORMAT(1X,I3, T5,I3,I4,TL8,I2,TR5,I3)

PRINT *,i,j,k,m,n

END

程序执行时,输入数据:1234567890987654321↙ 程序执行后,变量i,j,k,m,n的值是什么? 二、填空题

下面程序是求任意两个整型数M、N的和,要求输出形式为:

M+N=和,如M=3,N=8,则输出形式为:M+N= 11。请填空。 IMPLICIT NONE INTEGER::M,N,S READ*,M,N S=M+N PRINT *, ?M+N=? ,S END

习题五

一、选择题

1、已知:A=4.9,B=5.5,C=8.0,L=.FALSE.,则其值为’假’的表达式是 。

A) AC.EQV..NOT.L D) L.EQV.A

2、以下不合法的Visual Fortran表达式是 。

A) A=B.EQV.C>D D) A.AND.B.AND.C

3、以下能表示条件“X、Y中至少有一个大于0且小于等于10”的逻辑表达式是 。

A) (0

B) (0

4、以下能表示条件“X、Y中至少有一个大于等于10或小于5”的逻辑表达式是 。 A) .NOT. (X>=10.OR.X<5).OR.Y>=10.OR.Y<5

B) (X>=10.OR.X<5).OR.(Y>=10.OR.Y<5) C) (X.OR.Y)>=10.0R.(X.OR.Y)<5

D) (X>=10.AND.X<5).AND.(Y>=10.AND.Y<5)

5、以下正确的逻辑表达式是 。(其中A,B,C,D,X均是数值型变量)

A)(A+B).AND. C=X D) (A+B)>C AND (C+D)<0

6、要实现“当X>Y时,Z=X+Y,否则Z=X-Y”。以下能完成该功能的程序段是 。

A) IF (X>Y) Z=X+Y ELSE Z=X-Y

B) IF (X>Y) THEN Z=X+Y Z=X-Y C) Z=X-Y

IF (X>Y) Z=X+Y D) IF (X>Y) Z=X+Y ELSE Z=X-Y END IF

7、下面程序段中有错误的语句是 。

A) IF A>B THEN B) A=B C) ELSE B=A D) END IF

8、下面程序段中有错误的语句是 。

A) IF (A.GT.B) THEN B) A=B C) ELSE B=A D) END IF

9、下面程序段中有错误的语句是 。 READ *,X

A) IF (X<0.0)THEN Y=1.0

B) ELSE IF (X<=10.0) THEN Y=2.0 C) ELSE Y=3.0 D) END IF END IF PRINT *,Y

END

10、下面程序段中有错误的语句是 。 LOGICAL:: L

A) L=0.1.GT.1.0

B) IF(L==.FALSE.) C=0.0 C) D=1.0-0.1

D) IF (1.0>0.1) D=0.1-1.0 PRINT *,D,C END

二、运行程序题

1、己知整型变量M=3,N=10,K=0,J=0,阅读下面程序段:

IF (MOD(M,N)/=0) THEN K=N/M IF (K>M) THEN J=K K=M M=J END IF END IF PRINT *,M,K 其运行结果是: 3 3 。 2、阅读下面程序:

IMPLICIT NONE INTEGER::I,J I=2 J=0

IF (I>=2) J=1 IF (J==1) I=J IF (I<2) I=I+1 PRINT *,I,J END

其运行结果是: 2 1 。 3、阅读下面程序:

IMPLICIT NONE INTEGER::I,J,K,M I=10 J=20 K=30

M=-32768 IF (I>M) M=I IF (J>M) M=J IF (K>M) M=K PRINT *,M END

其运行结果是: 30 。 4、阅读下面程序:

IMPLICIT NONE REAL::X,Y READ *, X IF (X<0.0) THEN Y=0.0

ELSE IF (X<10.0) THEN Y=1.0/X ELSE Y=10.0 END IF PRINT *,Y END

若从键盘输入2.0↙

则程序的运行结果是: 0.5 。 5、阅读下面程序:

IMPLICIT NONE LOGICAL:: L1,L2,L3,L4 L1=.TRUE. L2=.FALSE. L3=.TRUE.

L4=.NOT.L2.OR.L1.AND..NOT.L3 PRINT *,L4 END

则运行结果是: T 。 6、阅读下面程序:

IMPLICIT NONE LOGICAL::A,B,L A=.FALSE. B=.TRUE. L=.NOT.A.AND.B

PRINT *,L END

则运行结果是: T 。

7、阅读下列程序,若运行中的输入值分别为2.5和-1.0,则两次运行结果分别是 。

IMPLICIT NONE LOGICAL::L REAL::X L=.TRUE. READ *,X IF (X<0.) THEN L=.FALSE. ELSE PRINT *,X END IF

IF (.NOT.L) PRINT *, -X END

当输入的数值为2.5↙

则输出结果为: 2.500000 。 当输入的数值为-1.0↙

则输出结果为: 1.000000 。 8、阅读下面程序: IMPLICIT NONE

INTEGER:: X=1,Y=0,A=2,B=2 SELECT CASE(X)

CASE(1)

SELECT CASE(Y) CASE(10)

A=A+1

CASE(1)

B=B+1

END SELECT CASE(2) A=A+1;B=B-1 CASE(3)

A=A-1; B=B+1

END SELECT

PRINT *,‘A=’,A,’B=’,B

END

程序运行结果为: A= 2B= 2 。 9、阅读下面程序: IMPLICIT NONE

LOGICAL:: P,Q REAL::X=0.0,Y=0.0

READ ( *, ’( 1X,2L4 )’ ) P, Q IF( P ) X = 1.0 IF( Q ) Y = 1.0 PRINT *, X, Y END

当从键盘输入FFTTFFTTFFTT,则X与Y的值为 _0.0 ___0.0__。 10、阅读下面程序: IMPLICIT NONE

INTEGER ::A,B,C,X READ *,A, B, C X=A+2+B+C**2 SELECT CASE ( X ) CASE ( : 7 ) PRINT *, “A” CASE ( 8 : 10 ) PRINT *, “B” CASE ( 11: 15 ) PRINT *, “C” CASE ( 16 : ) PRINT *, “N” END SELECT END

若从键盘输入0,1,2↙

其运行结果为: A ; 若从键盘输入1,2,3↙

其运行结果为: C ; 若从键盘输入3,2,1↙

其运行结果为: B 。

11. 给出下列关系表达式和逻辑表达式,判定表达式的值。 25.5>54 F (35+3*8).GE.75 F

(2.5,5.7)>(1.2,3.5) 错误的表达式 (25.9,58.4).NE.(58.4,25.9) T

?banana?

12+2*5>20 .AND. .NOT.(?pen?//?s?80) T 三、填空题

1、下面程序的功能是求方程X**2+BX+C=0的实根,请填空。

IMPLICIT NONE REAL::B,C,X1,X2 READ (*,*) B,C D=B**2-4*C IF( D>0 ) THEN IF( D/=0 ) THEN X1=-B/2.0+SQRT(D)/2.0 X1=-B/2.0-SQRT(D)/2.0

PRINT *,X1,X2

ELSE

X1=-B/2.0 X2=X1 PRINT *,X1,X2

ENDIF ELSE

PRINT *,‘ERROE’ ENDIF END

2、下面程序的功能是求以下函数的函数值,请填空。

?3X-lnX?Y??X**3?6?1?(X?0)(0??X??10)(X?10)

IMPLICIT NONE REAL::X,Y

READ(*,*) X

IF (X<0) THEN

Y=3*X-LOG(ABS(X))

ELSE IF ( x>=0 .AND. x<=10 ) THEN Y=X**3+6

ELSE

Y=1 ENDDO PRINT *,Y END

3、下面程序的功能是判断一个整数是否能被3或7整除,若能被整除,则输出’YES’,否则输出’NO’, 请填空。 IMPLICIT NONE INTEGER::M

READ(*,*) M

IF(mod(M,3)==0 .OR. mod(M,7)==0 ) THEN PRINT *,‘YES’ ELSE

PRINT *,‘NO’ ENDIF END

4、下面程序是判断YEAR是否为闰年,是输出’YES’,不是输出’NO’. IMPLICIT NONE INTEGER ::YEAR

CHARACTER(LEN=3)::RES= ’NO’

READ *,YEAR

IF (MOD(YEAR,100)==0) THEN

IF (MOD(YEAR, 400 )==0) RES=’YES’

ELSE

IF (MOD(YEAR, 4)==0) RES= ‘YES’

ENDIF PRINT *,RES END

习题六

一、选择题:

1、阅读下列Visual Fortran程序段

INTEGER::I,J,K DO I = 1,5,2 DO J = 2,6,3 K = I + J ENDDO ENDDO

上述称序段执行完后K的值是 A) 11 B) 10 2、阅读下列Visual Fortran程序段

INTEGER::N,K REAL::S,T

C)12 D) 30

READ *, N S = 0.0 K = 1

IF ( N >= 5 ) THEN S = S + 32 T = 1

DO WHILE ( K < N ) T = T * 2 S = S + T K = K +1 PRINT * , S END DO END IF PRINT * , S END

若从键盘输入:6,则运行后S的值为:A) 64.0 B) 32.0 二、运行程序题:

(1) 1IMPLICIT NONE

INTEGER::M,I,J M=0 DO I=1,5,4 DO J=4,19,4 M=M+1 ENDDO ENDDO PRINT*,M END

M的值为___8________。 (2) IMPLICIT NONE INTEGER::K,J REAL::S

DO K=2,5,2 S=1.0 DO J=K,5 S=S+J

ENDDO

ENDDO

C)94.0 D) 96.0

PRINT*,S END

S的值为__10.0__。

三、填空题

题目要求:从键盘输入5组数,每组有5个数,求出各组中元素绝对值之和的最大者和最小者。

IMPLICIT NONE

INTEGER::I,J,SUM,MAX1,MAX2 MAX1 = 0; MIN1 = 0 DO I = 1 , 5 SUM = 0 DO J = 1 , 5

READ*,X

SUM = SUM + ABS(X) END DO

IF ( SUM > MAX1 ) MAX1= SUM IF ( I= =1 .OR. SUM < MIN1 ) MIN1 = SUM END DO

PRINT * , MAX1 , MIN1 END