FORTRAN90模拟测验.docx
《FORTRAN90模拟测验.docx》由会员分享,可在线阅读,更多相关《FORTRAN90模拟测验.docx(83页珍藏版)》请在冰豆网上搜索。
FORTRAN90模拟测验
FORTRAN90模拟测验三(笔试部分)
一、选择题(从4个可选答案中选择一个正确答案添入空白处)
1.下列字符串中可用作FORTRAN90变量名的是A。
(教材78)
A.ABCB.A-BCDC.2ABCD.AB.C
2.下列数据中不符合FORTRAN90常数表示的为D。
(教材70)
A.21.50B.+0.0D0C..TRUE.D.$1000
3.执行WRITE(8,'(1X,2I4)')(I,I=1,3)后生成B个记录。
(教材146)
A.1B.2C.3D.12
4.数学表达式的FORTRAN表达式为B。
(教材103)
A.SQRT(X)**3)*LOG(X**2+Y**2)/XB.SQRT(X**3)*LOG((X**2+Y**2)/X)
C.(SQRT(X))**3*LN((X**2+Y**2)/X)D.SQRT(X**3)*LN(((X**2)+Y**2)/X)
5.表达式:
-B+SQRT(B*B-4.0*A*C).LE.3E-5值的类型是A。
(教材84)
A.逻辑型B.整型C.实型D.字符型
6.下面格式输入语句(教材119)
READ(*,‘(3F3.1)’)X
如果输入1234.567
则X的值为B。
A.123.0B.12.3C.1234.D.1234.567
7.FORTRAN90语言中变量名长度为C个字符。
(教材58)
A.1-8B.8C.1-31D.31
8.按隐含约定,设X=2.5,Y=1.0,Z=3.0(教材93)
执行赋值语句I=X+Y/Z后I的值为B。
A.2.0B.2C.3D.3.0
9.下列语句中那个语句是错误的是C。
(教材98)
A.READ(*,*)XB.READ*,XC.PRINT(*,*)XD.PRINT*,X
10.说明语句REALA(1:
2,-1:
10)说明数组A的元素个数为D。
(教材200)
A.11B.12C.22D.24
11.M能被N整除的FORTRAN表达式为D。
(教材88)
A.(M/M)=0B.(MMODN).EQ.0C.(M/N).EQ.0D.MOD(M,N).EQ.0
12.以下关于接口块的说法中,不正确的是C。
(教材365)
A.通知编译程序主调程序调用过程时所需要的接口信息。
B.可用于重载赋值
C.接口块中可以包含可执行语句D.可用于自定义运算符
13.以下关于FORTRAN90中有关哑元(形参)、实元(实参)说法中,不正确的是A。
(教材265)
A.实元和哑元个数一定要相等B.实元和哑元个数可以不相等
C.哑元可以用可调数组D.哑元可以用假定形状数组
14.下列关键字中不能用于说明变量属性的是C。
(教材182)
A.SAVEB.OPTIONALC.CYCLED.INTENT
15.以下关于派生类型的说法中,不正确的是C。
(教材294)
A.派生类型说明中,不能有任何可执行语句
B.可将一个派生类型变量的值整体赋给另一个派生类型变量
C.派生类型成员为字符型时,长度可以不确定
D.派生类型成员可以是自身同类型的指针
二、填空题(在空白处添入正确内容)
1.阅读以下程序:
FUNCTIONfac(A)RESULT(rfac)
INTEGERA,rfac
INTEGER,SAVE:
:
C=3
B=1
C=C+1
rfac=A+B+C
ENDFUNCTION
PROGRAMmain
INTEGER:
:
A=3,J,fac
DOJ=0,2
PRINT*,fac(J)
ENDDO
ENDPROGRAMmain
执行以上程序后,输出的第一行是5,第三行是9。
2.阅读以下程序:
SUBROUTINEswap(S1,S2)
CHARACTER(*)S1,S2
CHARACTER(3)T
T=S1;S1=S2;S2=T
ENDSUBROUTINE
PROGRAMMAIN
CHARACTER(3):
:
S1='BD',S2='BC',S3='AB'
IF(S1>S2)CALLswap(S1,S2)
IF(S2>S3)CALLswap(S2,S3)
IF(S1>S2)CALLswap(S1,S2)
PRINT*,S1;PRINT*,S2;PRINT*,S3
ENDPROGRAMMAIN
执行以上程序后,输出的第一行是AB,第二行是BC,第三行是BD。
3.阅读以下程序:
MODULEaa
INTEGER:
:
J=2
ENDMODULEaa
SUBROUTINEp()
USEaa
DOI=1,3
J=J+1
PRINT'(I3\)',J
ENDDO
PRINT*
ENDSUBROUTINE
PROGRAMMAIN
USEaa
DOI=0,2
CALLp()
ENDDO
PRINT*,I
ENDPROGRAMMAIN
执行以上程序后,输出的第一行是345,第二行是678,第三行是91011。
4.阅读以下程序:
PROGRAMMAIN
INTEGER:
:
A(3,3),I,J,K,N
DOK=1,5
IF(K<=3)THEN
DOI=1,K
N=N+1
A(I,K-I+1)=N
ENDDO
ELSE
DOI=1,6-K
N=N+1
A(K-3+I,4-I)=N
ENDDO
ENDIF
ENDDO
DOK=1,3
DOI=1,3
PRINT'(I3\)',A(K,I);
ENDDO
PRINT*
ENDDO
ENDPROGRAMMAIN
执行以上程序后,A(1,3)的值是4,A(2,2)的值是5,A(3,1)的值是6。
5.阅读以下程序:
sum=1.0;ID=1.0;K=1
10K=(-1.0)*K
ID=ID*2.0
sum+K/ID
IF(ID.LE.7)GOTO10
WRITE(*,*)sum
WRITE(*,*)ID
END
执行以上程序后,输出的第一行是1.0,第二行是8
6.阅读以下程序:
REALA(10),IP
DOK=1,10
A(K)=IP(K*2)/IP(K)
ENDDO
WRITE(*,100)A
(1),A
(2)
100FORMAT(1X,2F3.1)
END
REALFUNCTIONIP(N)
M=0
DOK=1,N
M=M+K
ENDDO
IP=M
END
执行以上程序后,A
(1)的值是3.0,A
(2)的值是3.3。
7.求多项式a0+a1x1+…+an-1xn-1+anxn之和的外部函数
数组A表示多项式系数,变量T表示xn,S表示多项式之和。
FUNCTIONp(A,N,x)RESULT(r_p)
(16)REALA(0:
N),x,r-p
S=(17)A(0)
T=1.0
DOI=1,N
T=(18)*X
S=S+A(I)*T
(19)ENDDO
PRINT*,'S=',S
(20)r-p=s
END
8.用选择法,将N个整数按从小到大排列。
PARAMETER(numl=500)
INTEGERnum(numl)
READ*,N,(num(I),(21)I=1,N)
DOI=1,N-1
min=I
DOJ=(22)I+1,N
IF(num(min).GT.num(J))(23)min=J
ENDDO
IF(min.NE.I)THEN
it=num(I)
num(I)=num(min)
(24)num(min)=it
ENDIF
ENDDO
PRINT*,(num(I),I=1,N)
END
9.以下程序是通过超载赋值(=)运算符,实现将字符的ASCII码赋给整型变量的功能.
SUBROUTINECTOI(I,C)
INTEGER,INTENT(OUT):
:
I
CHARACTER,INTENT(IN):
:
C
I=(25)ICHAR(C)
ENDSUBROUTINE
PROGRAMMAIN
INTERFACEASSIGNMENT(=)
SUBROUTINE(26)CTOI(I,C)
INTEGER,INTENT(OUT):
:
I
CHARACTER,INTENT(IN):
:
C
ENDSUBROUTINE
(27)ENDINTERFACE
INTEGERI
CHARACTER:
:
C='A'
I=C
PRINT*,C,I
ENDPROGRAMMAIN
10.求N!
。
PRINT*,'InputN?
'
READ*,N
M=1
(28)nfac=1
DO
nfac=nfac*M
IF((29)M>=N)THEN
PRINT*,'N!
=',nfac
(30)STOP
ENDIF
M=M+1
ENDDO
END
FORTRAN90模拟试题四(笔试部分)
一、选择题(从4个可选答案中选择一个正确答案添入空白处)
1.下面是5个准备用作子程序(辅程序)的形参,四组选择中其形参均正确的是D。
(教材265)
①常数符号名②变量名③数组元素名④形式过程⑤数组名
A.①③⑤B.②③④C.①③④D.②④⑤
2.语句OPEN(3,FILE=‘ABC’,ACCESS=‘DIRECT’,RECL=40)打开的是C文件。
(教材335)
A.有格式顺序存取B.无格式顺序存取
C.有格式直接存取D.无格式直接存取
3.辅程序引用时,某实参可为常数、函数引用及表达式时,其相应形参是A。
(教材265)
A.变量名B.数组名C.过程名D.*
4.并非所有的标准函数名均可作为过程形实结合的实参,例如C就不能。
(教材277)
A.ABSB.SINC.REALD.LOG
5.以下程序片段中其值均为9的元素是D。
(教材206)
INTEGER:
:
N(-1:
1,-1:
1,-1:
1)
N=RESHAPE((/1,2,3,4,5,6,7,8,9,10,11,12,13,14,13,12,11,10,9,8,7,6,5,4,3,2,1/),(/3,3,3/))
A.N(1,1,-1)与N(-1,-1,0)B.N(1,1,0)与N(-1,-1,0)
C.N(1,1,1)与N(1,-1,-1)D.N(1,1,-1)与N(-1,-1,1)
6.下列数据中,不符合FORTRAN90常量表示的是D。
(教材77)
A.-25.6B.3.2344D0C.’BOOT’’=’D.TRUE
7.运行下列程序时输入数据5E2后,其输出结果是A。
(教材121)
READ‘(E5.2)’,X
WRITE(*,‘(1X,F6.2)’)X
END
A.5.00B.500.00C.0.05D.******
8.圆心在原点的两个同心圆,半径分别为2和4。
描述点(X,Y)在小圆外,大圆内(包括在两圆周上)的表达式是C。
(教材89)
A.ABS(X)<=4.0.AND.ABS(Y)>=2.0B.2.0>=SQRT(X*X+Y*Y)<=4.0
C.X*X+Y*Y<=16.0.AND.X*X+Y*Y>=4.0D.(X.OR.Y)>=2.0.AND.(X.OR.Y)<=4.0
9.以下关于指针说法不正确的是B。
(教材309)
A.指针变量可以指向任何变量B.一个指针变量可以同时指向多个变量
C.多个指针变量可以同时指同向一个变量D.指针变量的内容是地址或变量名称
10.以下关于接口块说法不正确的A。
(教材366)
A.当外部过程名作为实参时,一定要用接口块B.重载运算符时,一定要用接口块
C.调用子程序时,实参和形参的次序及个数不同时,一定要用接口块
D.外部函数的返回值为数组时,一定要用接口块
二、填空题(在空白处添入正确内容)
1.以下程序运行后,输出的第一行为
(1)5.05.05.0;第二行为9.07.09.0
(2)
REAL:
:
X=5.0,Y=5.0
PRINT'(1X,3F5.1)',X,Y,X
CALLsub(X,Y,X)
PRINT'(1X,3F5.1)',X,Y,X
END
SUBROUTINEsub(X,Y,Z)
REALX,Y,Z
X=X+1.0;Y=Y+2.0;Z=Z+3.0
ENDSUBROUTINE
2.下列程序运行后,K(3)=(3)5,M(1,3)=(4)6。
读入的第一个记录为1,-1,2,-2,第二个记录为3,-3,4,-4,5,-5。
INTEGERK(4),M(2,3)
READ*,K
CALLsub(K,M)
PRINT"(1X,I2)",K(3),M(1,3)
END
SUBROUTINEsub(K,M)
INTEGERK(2,2),M(6),I,J
READ*,M
DOI=1,2
DOJ=1,2
K(I,J)=K(I,J)-M(J)
M(I)=M(I)+K(I,J)
ENDDO
ENDDO
DOI=3,6
M(I)=M(I-1)+M(I-2)
ENDDO
END
3.下列程序运行后,A(1,4)=(5)4,A(5,3)=(6)4。
INTEGERA(5,5),T,I,J,K,M
DOI=1,5
DOJ=1,5
A(I,J)=J
ENDDO
DOK=1,I-1
T=A(I,5)
DOM=4,1,-1
A(I,M+1)=A(I,M)
ENDDO
A(I,1)=T
ENDDO
ENDDO
PRINT"(1X,I2)",A(1,4),A(5,3)
END
4.下列程序运行后输出结果:
M=(7)4,X=(8)4.5。
OPEN(1,FILE='A.DAT')
WRITE(1,'(2I1/F3.1)')2,3,4.5
CALLABC
END
SUBROUTINEABC
REALX
INTEGERM
BACKSPACE
(1)
READ(1,"(F3.1)")X
M=X
WRITE(*,"(1X,'M=',I2,'X=',F3.1)")M,X
END
5.下列程序运行时,输入3,5,F时,输出结果中B(5,3)=(9);13
输入3,5,T时,输出结果中B(5,3)=(10);25
MODULEAA
INTEGER:
:
X,Y,A(5,5)=(/(I,I=1,25)/)
ENDMODULE
PROGRAMMAIN
USEAA,B=>A
LOGICALL
INTEGERI,J
READ*,X,Y,L
IF(L)THEN
CALLone
PRINT'(1X,5I4)',((B(I,J),J=1,5),I=1,5)
ELSE
CALLtwo
PRINT'(1X,5I4)',((B(I,J),J=1,5),I=1,5)
ENDIF
END
SUBROUTINEone
USEAA,C=>A
INTEGERI,IT
DOI=1,5
IT=C(I,X)
C(I,X)=C(I,Y)
C(I,Y)=IT
ENDDO
END
SUBROUTINEtwo
USEAA,X2=>X,Y2=>Y,D=>A
INTEGERI,IT
DOI=1,5
IT=D(X2,I)
D(X2,I)=D(Y2,I)
D(Y2,I)=IT
ENDDO
END
6.以下程序运行后,下列变量的输出结果是:
C=(11)101,F=(12)112.0,A(20)=30(13),C(21)=(14)。
1681
INTEGERA(100),B(100),C,I
REALF
C=1
DOI=1,100
C=C+1;A(I)=C;B(I)=C*C
ENDDO
CALLSS(A(10),C,B(20),A(10),F)
PRINT'(1X,"C=",I4/1X,"F=",F6.1)',C,F
END
SUBROUTINESS(A,B,C,D,E)
INTEGERA(50),C(50),B,D
REALE
E=B+D
PRINT'(1X,"A(20)=",I4/1X,"C(21)=",I4)',A(20),C(21)
END
7.下列程序运行后的输出结果,第二行为:
(15)X=5.0Z=7.0。
REAL:
:
P(5)=(/2.0,3.0,5.0,1.0,3.0/),X,Y,Z
INTEGERK,L,M,N
N(K,L,M)=K+L/M
X=1.0+REAL(N(2,3,2))
Y=2.0
CALLSS(X,P
(1),Z,X)
WRITE(*,"(1X,'X=',F4.1,1X,'Z=',F4.1)")X,Z
END
SUBROUTINESS(A,B,X,W)
REALA,B,X,Y,W
A=A+1
B=B+1
Y=2.0
PRINT"(1X,'W=',F4.1)",W
X=W+Y
END
8.下面程序的功能是统计输入英文句子中每个单词所包含的字母个数。
程序中数组ICOUNT用于存放统计结果。
假设英文句子由字母、空格和句点组成,单词个数不超过10,每个单词不超过10个字母,单词之间有一个空格,句子以句点(.)结尾,句子长度不超过72个字符。
INTEGER:
:
ICOUNT(10),I,NUM
CHARACTER*1ICHR(72)
READ'(72A1)',ICHR
NUM=1
DO(16)I=1,72
IF(ICHR(I)=='.')(17)EXIT
IF(ICHR(I)/='')THEN
(18)ICOUNT(NUM)=ICOUNT(NUM)+1
ELSE
(19)NUM=NUM+1
ENDIF
ENDDO
PRINT'(1X,72A1)',(ICHR(I),I=1,72)
PRINT'(1X,10I5)',(ICOUNT(I),(20)I=1,NUM)
END
9.下面程序的功能是计算
的值,直到最后一项的绝对值小于1.0E-5为止。
REALX,Y,A,B,T
INTEGERN
READ*,X
T=(21)X
B=1.0
Y=T
N=2
DOWHILE((22)ABS(T)>1.0E-5)
A=X**(2*N-1)/(2*N-1)
B=(23)B*(2*N-3)/(2*N-2))
T=A*B
Y=Y+T
N=N+1
ENDDO
PRINT'(1X,F5.2,I3,F12.7)',X,N-1,Y
END
10.下面程序的功能是输入十个任意四位整数A,用来检验inver子程序的可靠性。
其中CALLinver(A,B)应能将A中四位数倒过来成为B(如A=1966,可得B=6691)。
最后计算并输出由具体数字构成的算式C=A+B。
INTEGERA,B,C,I
DOI=1,10
READ*,A
DOWHILE(A<1000.OR.A>9999)
READ*,A
ENDDO
CALLinver(A,B)
C=A+B
PRINT'(1X,I5,"=",I4,"+",I4)',C,A,B
ENDDO
END
SUBROUTINEinver(M,N)
IMPLICITNONE
(24)INTEGERA,BI,JK,M,N,MN
A=M
DOI=1,4
NN(I)=MOD(A,10)
(25)A=A/10
ENDDO
B=0
DOJ=1,4
K=NN(J)*10**(4-J)
B=B+K
ENDDO
(26)N=B
END
11.下面的程序建立一个链表,子程序fmax()的功能是:
求出链表所有结点中数据成员值最大的结点的位置,并由参数s返回给主函数。
该函数的第一个参数是链表的首指针。
MODULEAA
TYPENODE
INTEGERDATA
TYPE(NODE),POINTER:
:
NEXT
ENDTYPENODE
CONTAINS
SUBROUTINEFMAX(HEAD,S,I)
27TYPE(NODE),POINTER;;HEAD,S,P
INTEGER:
:
I,J=0
P=>HEAD;S=>P
IF(.NOT.(ASSOCIATED(P)))RETURN
DOWHILE(ASSOCIATED(P))
J=J+1
IF(P.DATA>S.DATA(28))THEN
I=J;S=>P
ENDIF
(29)P=>P.NEXT
ENDDO
ENDSUBROUTINE
SUBROUTINEPRINTL(H)
TYPE(NODE),POINTER:
:
H,P
P=>H
DOWHILE(ASSOCIATED(P))
PRINT*,P.DATA
P=>P.NEXT
ENDDO
ENDSUBROUTINE
ENDMODULEAA
PROGRAMMAIN
(30)USEAA
TYPE(NODE),POINTER:
:
H,P,P1
INTEGERA,I
NULLIFY(P)
PRINT*,'INPUTDATA'
READ*,A
DOWHILE(A/=-1)
ALLOCATE(P)
P.DATA=A
IF(.NOT.(ASSOCIATED(H)))THEN
H=>P;P1=>P
ELSE
P1.NEXT=>P;P1=>P
ENDIF
PRINT*,'INPUTDATA'
READ*,A
ENDDO
NULLIFY(P)
CALLPRINTL(H)
CALLFMAX(H,P,I)
PRINT*,'DDD'
IF(ASSOCIATED(P))PRINT*,P.DATA,I
END
FORTRAN90模拟测验五(笔试部分)
一.选择题(从4个可选答案中选择一个正确答案添入空白处)
1.一个完整的FORTRAN90源程序的组成不应该D。
(教材59)
A.只有一个主程序没有外部子程