1998年4月二级笔试试题FORTRAN
Ⅰ 计算机基础知识
Ⅱ 语言部分
21、下列21中,所指定的FORTRAN表达式都是正确的。
①D=B * B - 4 * A * C ②MOD(M,N).NE.O
③.NOT.FALSE..OR..NOT..TRUE ④A.GT.B.EQ.A.LT.C
⑤π*R**2 ⑥3*E-2
⑦A.GT.B.EQ..TRUE. ⑧′123′//′ABC′
A、①、②、③ B、⑥、⑦、⑧ C、④、⑤、⑥ D、②、⑥、⑧
22、执行下列程序,输入3456.789,则输出的结果为22。
READ(8 ,100) S
WRITE( 8,100)
100 FORMAT(2F4.1)
END
A.345.6 B.45.6 C.456. D.* * *
23、下列程序执行后输出23
DIMENSION M(5)
READ(*,*)(M(I),I=1,5)
DO 10 I=1,5
10 WRITE(*,22)(M(J),J=1,I)
22 FORMAT(1X,3I3)
END
A、7 B、8 C、9 D、5
24、FORTRAN 77规定,变量类型的优先顺序是24 。
A、隐含约定(I-N规则)、Implicit说明、类型说明
B、类型说明、隐含约定(I-N规则)、Implicit说明
C、类型说明、Implicit说明、隐含约定(I-N规则)
D、Implicit说明、类型说明、隐含约定(I-N规则)
25、设T=.TRUE.F=.FALSE.下列表达式中值为.TRUE.的是25。
A、.T.AND.F.AND.7.GE.4
B、T.AND..NOT.T.AND.T
C、((T.OR.F).AND.(T.AND.5.LE.4)).EQV.(.NOT.T.OR.(5.GE.1.AND.F))
D、.NOT.(T.OR.F).NEQV.(T.AND.8-2.EQ.4)
26 、下面循环语句执行后,SUM的值是26。
DO 10 I=1,5
SUM=0
DO 10 J=I,4,-1
10 SUM=SUM+I+J
A、0.0 B1.9.0 C.27.0 D.76.0
27、下列语句中,正确的语句函数定义语句是 27 。
A、FA(I,I)=8*I+I B、FB(B(5),X)=X+B(5)
C、FC(X,8.)=X*X-SQRT(8.) D、FD(X)=MOD(X,2.)+SQRT(X)
28、在辅程序单位的各种变元中,一定要在哑元表中出现的是 28 。
A、可调数组名 B、常数组名 C、可调维变量名 D、变量名
29、下列符号名中,可作为有名公用区名的是 29 。
①变量名 ②数组名 ③外部函数名 ④内部函数名
⑤子程序名 ⑥主程序名 ⑦语句函数名
A、①、②、③、④ B、①、②、④、⑦ C、①、②、⑥、⑦ D、③、④、⑤、⑥
30、FORTRAN语言的文件读写单位是 30 。
A、字节 B、扇区 C、字长 D、记录
二、填空题
1、下述程序执行后,L(3,1)=(1) 。L(2,2)= (2) ,L(1,3)= (3)。
INTEGER L(3,3)
DATA L/9*0/
I=2
J=3
L(I,J)=1
DO 10 K=2,9
I=I+1
J=J+1
IF(J.GT.3.AND.I.LE.3)THEN
J=1
ELSE IF(J.LE.3.AND.I.GT.3)THEN
I=1
ELSE IF(I.GT.3.AND.L(I,J).NE.0))THEN
& OR.(J.LE.3.AND.I.LE..3.AND.L(I,J).NE.0))THEN
I=I-1
J=J-2
10 CONTINUE
PRINT′(6X,3I3)′,((L(I,J),J=1,3),I=1,3)
END
2、下列程序执行后输出的结果是 (4) ,(5)。
FUNCTION F(X,Y)
INTEGER F,X,Y
X=S+Y
Y=X*Y
F=X/Y
END
INTEGER F,FF,FFF
DO 10 I=1,0,1
FF=2*F(I,I)
10 PRINT *,FF
FFF=F(I,I)+F(I,I)
PRINT *,I,FFF
END
3、下述程序执行后,输出的第一行是(6),第二行是(7)。
REAL A(2,2,-1,:1)
DATA A/1,2,3,4,5,6,1,2,3,4,5,6/
F=FUN(A(1,2,0),3,A(2,1,1))
WRITE(*,′(1X,2HF=,F5.1)′)F
END
FUNCTION FUN(B,N,C)
REAL B(N+1)
FUN=3*C
DO 11 I=1,N
FUN=FUN+B(I)
11 CONTINUE
C=B(I)
WRITE(*,′(1X,2HC=,F5.1)′)C
END
4、下列程序运行后,C(2)=(8),N=(9)。
CHARACTER A(5),B*5,C(2)*10,D*4
DATA A/′1′,′2′,′3′,′4′,′5′/,B/′′/
D=′AB′
C(1)=′ABCDE′
DO 10 I=1,5
B(I:I)=C(1)(6-I:6-I)
10 C(2)=B//A(I)
N=LEN(D//A(1)+INDEX(C(1),D)
WRITE(*,*)C(2),N
END
5、下述程序执行后,输出的第一行是(10),第二行是(11)
SUBROUTINE COMP(A,B)
COMMON X,Y
A=X+Y
B=X-Y
END
COMPLEX X,Y
COMMON X,Y
X=(3.0,4.0)
Y=(4.0,3.0)
CALL COMP(X,Y)
CALL COMP (X,X)
CALL COMP(Y,X)
PRINT 10,X,Y
10 FORNAT(1X,′(′,F5.1,′,′,F5.1,′)′)
END
6、下列程序执行后,输出的第一行是 (12),第二行是(13)。
EXTERNAL SIN
X=60.0
CALL F1(X,Y,SIN)
Y=30.0
CALL F2(X,Y)
END
SUBROUTINE F1(X,Y,FUN)
Y=FUN(X/18-*3.1415926)
PRINT*,X,Y
END
FUNCTION SIN(X)
SIN=COS(X)
END
SUBROUTINE F2(X,Y)
INTRINSIC SIN
CALL F1(Y,X,SIN)
END
7、下列程序执行后输出的结果是 (14),(15)。
INTEGER W(6)
DATA W/1,2,3,4,5,6/
OPEN(1,FILE=′CHA′)
DO 10 I=1,6
10 WRITE(1,′(15)′)I*I
REWIND(1)
DO 20 I=1,6,2
20 READ(1,′(6I5)′)W(I)
WRITE(*,′(1X,2I5)′)W(3),W(4)
CLOSE (1)
END
8、函数FACTOR(M,FAC,N)的功能是:计算正整数M(M>2)的除自身以外的所有不同因子之和。因子个数存于N中且不超过100。方法是:M被由2开始的逐个自然数来除,若某次相除得到两个互异因子,由小者依次存入数组FAC的左端,大者逐个存入FAC的右端;若只得一个因子,由该因子存入FAC的左端,直至全部因子求毕,最后将所有因子从小到大集中于FAC的左端。例如:M=16,其因子为1,2,4,8,因子之和为15,因子个数为4。
RUNCTION FACTOR(M,FAC,N)
INTEGER FACTOR,FAC(100),SUM,R
FAC(1)=1
L=1
R=100
SUM=1
I=2
10 K=M/I
IF(K*I-M.EQ.0)THEN
IF(I*I.NE.M)THEN
L=L+1
(16)
(17)
R=R-1
SUM=SUM+I+K
ELSE
L=L+1
(18)
SUM=SUM+I
ENDIF
ENDIF
I=I+1
FI(I.LT.K)GOTO 10
DO 20 I =(19)
FAC( (20) )=FAC(I)
20 CONTINUE
N=L+100-R
FACTOR=SUM
END
INTEGER FAC(100),FACTOR
READ*,MM
NN=FACTOR(MM,FAC,N)
WRITE(*,′(1X, ″Factors are:″/1X,20I4)′)(FAC(I),I=1,N)
END
9、用辛普生法则求定积分的方法计算由积分定义的函数
公式空白……
辛普生法则为:首先将被积区间3n等分,h=b-a ,求积公式为
3n
公式空白……
用语句函数定义被积函数,本程序求x=sin00 至x=sin890的函数值。
FUNCTION ELLIPTIC(X)
PARAMETER(PI=3.1415926,N=200)
(21)
A=0.
B=PI/2
(22)
S=G(A)=G(B)
DO 10 J =1,N
(23)
X2=X1+H
X3=X2+H
(24)
10 CONTINUE
(25)
END
PROGRAM MAIN
PARAMETER(PI+3.1415926,RD=PI/180.)
DO 15 I=0,89
X=SIN(RD*I)
Y=ASIN(X)
PRINT 20,INT(Y/RD+0.05),ELLIPTIC(X)
20 RORMAT(1X,′X=′,I2,′ELLIPTIC(X)= ′, F7.4)
15 CONTINUE
END
10、设某个字符串最多有80个字符,另有一个最多有10个字符的短串,下面程序是从字符串LINE中找出短字符串STR(此串的最右边的空格要去掉)。同时自左向右逐个搜索,如果找到,则输出找到的信息及STR首字符出现的位置,未找到则输出信息“not found!”。
CHARACTER LINE * 80, STR*10
LOGICAL FLAG
READ *, LINE,STR
DO 10 I=(26)
IF(STR(I:I).NE. ′′)THEN
K=I
(27)
ENDIF
10 CONTINUE
15 FLAG=.FALSE.
DO 20 I=1,80-K+1
DO 30 J=(28)
IF(LINE( (29) ).NE.STR(J:J))THEN
FLAG=.FALSE.
GOTO 20
ELSE
(30)
ENDIF
30 CONTINUE
IF(FLAG)THEN
PRINT 35,STR,I
35 FORMAT(′is found and its place in LINE is from′,i2,′th′)
STOP
ENDIF
20 CONTINUE
PRINT *,′not found!′
END