FORTRAN90模拟测验三(笔试部分)
一、选择题(从4个可选答案中选择一个正确答案添入空白处)
1.下列字符串中可用作FORTRAN90变量名的是 A 。 (教材78)
A.ABC B. A-BCD C. 2ABC D. AB.C
2.下列数据中不符合FORTRAN90常数表示的为 D 。 (教材70)
A. 21.50 B. +0.0D0 C. .TRUE. D. $1000
3.执行WRITE(8,'(1X,2I4)')(I,I=1,3)后生成 B 个记录。 (教材146)
A. 1 B. 2 C. 3 D. 12
4.数学表达式的FORTRAN表达式为 B 。 (教材103)
A. SQRT(X)**3)*LOG(X**2+Y**2)/X B. 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.0 B. 12.3 C. 1234. D. 1234.567 7.FORTRAN90语言中变量名长度为 C 个字符。 (教材58)
A. 1-8 B. 8 C. 1-31 D. 31
8.按隐含约定,设X=2.5,Y=1.0,Z=3.0 (教材93)
执行赋值语句I=X+Y/Z后I的值为 B 。 A. 2.0 B. 2 C. 3 D. 3.0 9.下列语句中那个语句是错误的是 C 。 (教材98)
A. READ(*,*)X B. READ*,X C. PRINT(*,*)X D. PRINT *,X 10.说明语句REAL A(1:2,-1:10)说明数组A的元素个数为 D 。 (教材200)
A. 11 B. 12 C. 22 D. 24 11.M能被N整除的FORTRAN表达式为 D 。 (教材88)
A. (M/M)=0 B. (M MOD N).EQ.0 C. (M/N).EQ.0 D. MOD(M,N).EQ.0
12.以下关于接口块的说法中,不正确的是 C 。 (教材365)
A.通知编译程序主调程序调用过程时所需要的接口信息。 B. 可用于重载赋值 C. 接口块中可以包含可执行语句 D.可用于自定义运算符
13.以下关于FORTRAN90中有关哑元(形参)、实元(实参)说法中,不正确的是 A 。(教材265)
A.实元和哑元个数一定要相等 B.实元和哑元个数可以不相等
C.哑元可以用可调数组 D.哑元可以用假定形状数组
14.下列关键字中不能用于说明变量属性的是 C 。 (教材182)
A.SAVE B.OPTIONAL C.CYCLE D.INTENT
15.以下关于派生类型的说法中,不正确的是 C 。 (教材294)
A. 派生类型说明中,不能有任何可执行语句
B. 可将一个派生类型变量的值整体赋给另一个派生类型变量 C. 派生类型成员为字符型时,长度可以不确定 D. 派生类型成员可以是自身同类型的指针
二、填空题(在空白处添入正确内容)
1.阅读以下程序:
FUNCTION fac(A) RESULT(rfac)
INTEGER A,rfac INTEGER,SAVE::C=3 B=1 C=C+1
rfac=A+B+C END FUNCTION
PROGRAM main
INTEGER::A=3,J,fac DO J=0,2
PRINT*,fac(J) ENDDO
END PROGRAM main
执行以上程序后,输出的第一行是 5 ,第三行是 9 。 2. 阅读以下程序:
SUBROUTINE swap(S1,S2) CHARACTER(*) S1,S2 CHARACTER(3)T T=S1;S1=S2;S2=T END SUBROUTINE
PROGRAMMAIN
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 PROGRAMMAIN
执行以上程序后,输出的第一行是 AB ,第二行是BC ,第三行是 BD 。 3.阅读以下程序:
MODULE aa INTEGER::J=2 END MODULE aa
SUBROUTINE p() USE aa
DO I=1,3 J=J+1
PRINT'(I3\\)',J ENDDO PRINT*
END SUBROUTINE
PROGRAMMAIN USE aa DO I=0,2 CALL p() ENDDO PRINT*,I
END PROGRAMMAIN
执行以上程序后,输出的第一行是 3 4 5 ,第二行是 6 7 8 ,第三行是 9 10 11 。
4. 阅读以下程序:
PROGRAMMAIN
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 ELSE
DO I=1,6-K N=N+1
A(K-3+I,4-I)=N ENDDO ENDIF ENDDO DO K=1,3 DO I=1,3
PRINT'(I3\\)',A(K,I); ENDDO PRINT* ENDDO
END PROGRAMMAIN
执行以上程序后,A(1,3)的值是 4 ,A(2,2)的值是 5 ,A(3,1)的值是 6 。 5. 阅读以下程序:
sum=1.0; ID=1.0; K=1 10 K=(-1.0)*K ID=ID*2.0
sum+K/ID
IF(ID.LE.7) GOTO 10 WRITE(*,*) sum WRITE(*,*) ID END
执行以上程序后,输出的第一行是 1.0 ,第二行是 8 6. 阅读以下程序:
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)的值是 3.0 ,A(2)的值是 3.3 。 7.求多项式a0+a1x
1
+…+an-1xn-1+anxn之和的外部函数
n
数组A表示多项式系数,变量T表示x ,S表示多项式之和。 FUNCTION p(A,N,x) RESULT(r_p) (16) REAL A(0:N),x,r-p S= (17) A(0) T=1.0 DO I=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) INTEGER num(numl)
READ*,N,(num(I), (21) I=1,N ) DO I=1,N-1 min=I
DO J= (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码赋给整型变量的功能.
SUBROUTINE CTOI(I,C) INTEGER ,INTENT(OUT):: I
CHARACTER ,INTENT(IN):: C I= (25) ICHAR(C) END SUBROUTINE
PROGRAMMAIN
INTERFACE ASSIGNMENT(=)
SUBROUTINE (26) CTOI(I,C) INTEGER ,INTENT(OUT):: I CHARACTER ,INTENT(IN):: C ENDSUBROUTINE
(27) END INTERFACE INTEGER I
CHARACTER:: C='A' I=C
PRINT*,C,I
END PROGRAMMAIN 10.求N!。
PRINT*,'Input N?' 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.ABS B.SIN C.REAL D.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.6 B.3.2344D0 C.?BOOT??=? D.TRUE
7.运行下列程序时输入数据5E2后,其输出结果是 A 。 (教材121)
READ‘(E5.2)’,X
WRITE(*,‘(1X,F6.2)’)X END
A.5.00 B.500.00 C.0.05 D.******
8.圆心在原点的两个同心圆,半径分别为2和4。描述点(X,Y)在小圆外,大圆内(包括在两
圆周上)的表达式是 C 。 (教材89)
A.ABS(X)<=4.0 .AND. ABS(Y)>=2.0 B.2.0>=SQRT(X*X+Y*Y)<=4.0 C.X*X+Y*Y<=16.0 .AND. X*X+Y*Y>=4.0 D.(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.0 5.0 5.0 ; 第二行为 9.0 7.0 9.0 (2)
REAL:: X=5.0,Y=5.0
PRINT'(1X,3F5.1)',X,Y,X CALL sub(X,Y,X)
PRINT'(1X,3F5.1)',X,Y,X END
SUBROUTINE sub(X,Y,Z) REAL X,Y,Z
X=X+1.0; Y=Y+2.0; Z=Z+3.0 END SUBROUTINE
2.下列程序运行后,K(3)= (3) 5 ,M(1,3)= (4) 6 。
读入的第一个记录为1,-1,2,-2,第二个记录为3,-3,4,-4,5,-5。
INTEGER K(4),M(2,3) READ*,K
CALL sub(K,M)
PRINT\ END
SUBROUTINE sub(K,M) INTEGER K(2,2),M(6),I,J READ*,M
DO I=1,2 DO J=1,2
K(I,J)=K(I,J)-M(J) M(I)=M(I)+K(I,J) ENDDO ENDDO DO I=3,6
M(I)=M(I-1)+M(I-2) ENDDO END
3.下列程序运行后,A(1,4)= (5) 4 ,A(5,3)= (6) 4 。
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
4.下列程序运行后输出结果:M= (7)4 ,X= (8) 4.5 。
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
5.下列程序运行时,输入3,5,F时,输出结果中B(5,3)= (9);13
输入3,5,T时,输出结果中B(5,3)= (10) ;25
MODULE AA
INTEGER::X,Y,A(5,5)=(/(I,I=1,25)/) END MODULE
PROGRAMMAIN USE AA, B=>A LOGICAL L INTEGER I,J READ*,X,Y,L IF (L) THEN
CALL one
PRINT'(1X,5I4)',((B(I,J),J=1,5),I=1,5) ELSE
CALL two
PRINT'(1X,5I4)',((B(I,J),J=1,5),I=1,5) ENDIF END
SUBROUTINE one USE AA,C=>A INTEGER I,IT DO I=1,5 IT=C(I,X) C(I,X)=C(I,Y) C(I,Y)=IT ENDDO END
SUBROUTINE two
USE AA, X2=>X,Y2=>Y,D=>A INTEGER I,IT DO I=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 (13) ,C(21)= (14)。1681
INTEGER A(100),B(100),C,I REAL F C=1
DO I=1,100
C=C+1; A(I)=C; B(I)=C*C ENDDO
CALL SS(A(10),C,B(20),A(10),F)
PRINT'(1X,\ END
SUBROUTINE SS(A,B,C,D,E) INTEGER A(50),C(50),B,D REAL E E=B+D
PRINT'(1X,\ END
7.下列程序运行后的输出结果,第二行为: (15)X=5.0 Z=7.0 。
REAL:: P(5)=(/2.0,3.0,5.0,1.0,3.0/),X,Y,Z INTEGER K,L,M,N N(K,L,M)=K+L/M
X=1.0+REAL(N(2,3,2)) Y=2.0
CALL SS(X,P(1),Z,X)
WRITE(*,\ END
A(20)= 30 ,SUBROUTINE SS(A,B,X,W) REAL A,B,X,Y,W A=A+1 B=B+1 Y=2.0
PRINT\ X=W+Y END
8.下面程序的功能是统计输入英文句子中每个单词所包含的字母个数。程序中数组ICOUNT用于存放统计结果。假设英文句子由字母、空格和句点组成,单词个数不超过10,每个单词不超过10个字母,单词之间有一个空格,句子以句点(.)结尾,句子长度不超过72个字符。
INTEGER:: ICOUNT(10),I,NUM CHARACTER*1 ICHR(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为止。
REAL X,Y,A,B,T INTEGER N READ*,X
T= (21) X B=1.0 Y=T N=2
DO WHILE( (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子程序的可靠性。其中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
(24)INTEGER A,B I,JK,M,N,MN A=M
DO I=1,4
NN(I)=MOD(A,10) (25) A=A/10 ENDDO B=0
DO J=1,4
K=NN(J)*10**(4-J) B=B+K ENDDO
(26) N=B END
11.下面的程序建立一个链表,子程序fmax()的功能是:求出链表所有结点中数据成员值
最大的结点的位置,并由参数s返回给主函数。该函数的第一个参数是链表的首指针。 MODULE AA TYPE NODE
INTEGER DATA
TYPE(NODE),POINTER::NEXT END TYPE NODE CONTAINS
SUBROUTINE FMAX(HEAD,S,I)
27 TYPE(NODE),POINTER;;HEAD,S,P INTEGER:: I,J=0 P=>HEAD;S=>P
IF(.NOT.(ASSOCIATED(P)))RETURN DO WHILE(ASSOCIATED(P)) J=J+1
IF( P.DATA>S.DATA (28) )THEN I=J;S=>P ENDIF
(29)P=>P.NEXT
ENDDO
END SUBROUTINE
SUBROUTINE PRINTL(H)
TYPE(NODE),POINTER::H,P P=>H
DO WHILE(ASSOCIATED(P)) PRINT*,P.DATA P=>P.NEXT ENDDO
END SUBROUTINE END MODULE AA
PROGRAMMAIN
(30)USE AA
TYPE(NODE),POINTER::H,P,P1 INTEGER A,I NULLIFY(P)
PRINT*,'INPUT DATA' READ*,A
DO WHILE(A/=-1) ALLOCATE(P) P.DATA=A
IF(.NOT.(ASSOCIATED(H)))THEN H=>P;P1=>P ELSE
P1.NEXT=>P;P1=>P ENDIF
PRINT*,'INPUT DATA' READ*,A ENDDO
NULLIFY(P) CALL PRINTL(H) CALL FMAX(H,P,I) PRINT*,'DDD'
IF(ASSOCIATED(P))PRINT*,P.DATA,I END
FORTRAN90模拟测验五(笔试部分)
一.选择题(从4个可选答案中选择一个正确答案添入空白处)
1. 一个完整的FORTRAN 90源程序的组成不应该 D 。 (教材59)
A. 只有一个主程序没有外部子程序 B. 只有一个主程序和若干子程序 C. 只有一个主程序和一个子程序 D. 只有外部子程序而没有主程序
2. 下列关于FORTRAN 90源程序编辑规则的叙述之中,正确的是 A 。 (教材62)
A. 任何以符号“!”开头的内容均是注释行。 B. 主程序第一行必须是PROGRAM语句。
C. 要实现有格式输入输出,必须有FORMAT语句。D. 每个子程序中必须有一个RETURN语句。
3. 下列关于FORTRAN 90源程序编辑规则的叙述之中,正确的是 B 。 (教材61)
A. IMPLICIT语句可以放在REAL语句行之后。B. DATA语句可以放在说明语句位置。 C. 注释行不可以放在END语句行之后。 D. FORMAT语句可以放在PROGRAM语句行之前。
4. 阅读下列程序 (教材179) F=1.0
DO J=3,7,2 DO K=J-1,J F =F*K ENDDO ENDDO
WRITE(*,'(I3,F8.1)') J,F END
程序运行结果是 C 。
A. 3 6.0 B. 5 120.0 C. 9 5040.0 D. 9362880.0
5. 阅读下列程序 材265) A=3.5
CALL suna(A,A,A) WRITE(*,'(F4.1)') A CONTAINS
SUBROUTINE suba(X,Y,Z) Y=Y-2.0; Z=Z+X END SUBROUTINE END
程序运行的结果是 C 。
A. 7.0 B. 5.0 C. 3.0 D. 1.5
6. 阅读下列程序 材125)
CHARACTER A*4,B*5,C*4
DATA A,B,C/'BIG?,'MIDDLE','SMALL'/ WRITE(*,20) A,B,C 20 FORMAT(1X,A2,A3,A4) END
程序运行结果是 D 。
A. BIGMIDDLE B. ********* C. BIGMIDSMA D. BIMIDSMAL
7. 阅读下列程序 材248)
FUN(c,d)=a*c+b/d DATA a,b/1.0,-1.0/
WRITE(*,'(F4.1)')FUN(a,b)-FUN(b,a) END
程序运行结果是 B 。
A. 0.0 B. 4.0 C. 2.O D. 3.O
8. 阅读下列程序 材119)
READ(*,500)R,W WRITE(*,500)R,W 500 FORMAT(F5.2,F5.3)
(教(教(教(教 END
程序运行时输入初始值01234567899,结果显示的是 A 。
A. 12.34***** B. 12.3456.789 C. ********** D. 123.4567.899
9. 阅读下列程序 (教材216)
DIMENSION M(3,3)
DATA M/1,2,3,4,5,6,7,8,9/ WRITE(*,100) (M(3,J),J=1,3) 100 FORMAT(3I2) END
程序运行结果是 B 。
A. 2 5 8 B. 3 6 9 C. 4 5 6 D. 7 8 9
10. 阅读下列程序 材265)
DIMENSION S(3)
DATA S/1.0,2.0,3.0/ WRITE(*,*) LA(3,S) CONTAINS
FUNCTION LA(N,X) DIMENSION X(N) LA=0 L=2
DO I=1,N
LA=LA+X(I)/L ENDDO
END FUNCTION END
程序运行结果是 D 。
A. 1.0000000 B. 2.0000000 C. 1 D. 2
11. 阅读下列程序 材185)
DIMENSION N(2) DO I=1,2 N(I)=0 ENDDO K=2
DO I=1,K DO J=1,K N(J)=N(I)+1 ENDDO ENDDO
WRITE(*,100),N 100 FORMAT(I3,I3) END
程序运行结果是 B 。
A. 2 3 B. 3 3 C. 2 2 D. 3 2
12. 阅读下列程序 材137)
INTEGER A(3,3)
DATA A/9,8,7,6,5,4,3,2,1/
WRITE(*,10)((A(M,N),N=1,M),M=1,3)
(教(教(教 10 FORMAT(I2/,2I2/,3I2) END
程序运行结果是 C 。
A.9 6 3 B.9 8 7 C.9 D.9 5 2 5 4 8 5 6 5 1 1 7 4 1 3 2 1 CHARACTER*4 A,B,C*5
DATA A,B,C/'YOUR','BOYS','GIRLS'/ WRITE(*,'(1X,A4,A5,A6,A1)')A,B,C,'!' END
程序运行结果是 B 。
A. YOURBOYSGIRLS! B. YOUR凵BOYS凵GIRLS! C. YOUR凵BOYSGIRLS! D. YOURBOYS凵GIRLS!
14. 对用作实元的外部过程名,在调用程序单位必须用 A 加以说明。 (教材285)
A. EXTERNAL语句 B. INTRINSIC语句 C. FUNCTION语句 D. SUBROUTINE 语句
15. 在程序中有输出语句WRITE(1,REC=5)A,B,C 那么逻辑设备号1所连接的文件类型是 A 。
A. 有格式顺序文件 B. 无格式顺序文件 C. 有格式直接文件 D. 无格式直接文件 二.填空题(在空白处添入正确内容)
32
1. 阅读下列程序.其功能是求出方程2X-3X+4X-11=0在区间(1,5)中的一个实数根,运行结果是显示根值和对分次数.使用的是二分算法. 请在其中______处填入适当的内容.
FUN(X)=2.0*X**3-3.0*X**2+4.0*X-11.0 DATA XL,XR,N/1.O,5.0,0/ DO
_ (1)_ N=N+1 ___ X=(XL+XR)/2.0
___ (2) FX=FUN(X) __
IF (ABS(FX) < 1E-6 .OR. N>=1000)THEN
WRITE(*,'(A2,F12.7,A5,I4)') 'X=',X,'N=',N EXIT ELSE
IF(FUN( _ (3)XR )*FX>=0.0)THEN XR=X ELSE XL=X ENDIF ENDIF ENDDO END
2345
2. 阅读下列程序,其功能是当X=3.1时计算Y=1+1.1X+1.2X+1.3X+1.4X+1.5X的值,主程序调用了函数子程序。请在其中____处填入适当的内容. PROGRAM PVALUE INTERFACE
FUNCTION POLY(B,M,V)RESULT(P_result) DIMENSION B(M) INTEGER :: M END FUNCTION
END INTERFACE
___(4) REAL A(6) __
DATA A/1.0,1.1,1.2,1.3,1.4,1.5/,N,X/6,3.1/ __ (5) Y=POLY(A,N,X) ___
WRITE(*,'(A5,6F5.1)')'a(k)=',A
WRITE(*,'(A2,F5.1,A6,F8.2)')'X=',X,'; Y=',Y END
FUNCTION POLY(B,M,V)RESULT(P_result) DIMENSION B(M) INTEGER :: M REAL :: V P_result=B(1) FV=1.0 DO K=2,M FV=FV*V
__ (6) _P-result__= P_result+B(K)*FV ENDDO
END FUNCTION
3. 函数子程序dtoh能够将一个十进制正整数DEC转换为一个表示十六进制数的字符串,其长度不超过8.例如127转换为'7F'。
算法:将dec除16取余,将所得的商再除16取余,如此反复,直到商和零为止,最后按照逆序输出所得各余数。 请在其中____处填入适当的内容. MODULE Change
INTEGER :: decade
CHARACTER(LEN=8) ::HEX CONTAINS
FUNCTION dtoh(dec) RESULT(D_result) CHARACTER*8 D_result,dtoh INTEGER :: dec,R,pos pos=9 dtoh=''
DO WHILE ( (7)dec/=0 ) __ (8) pos=pos-1 ___ IF(pos>=1)THEN R=MOD(dec,16) IF(R<10)THEN
_ (9) D-result(pos:pos) ___=CHAR(ICHAR('0')+R ) ELSE
D_result(pos:pos)=CHAR(ICHAR('A')+R-10) ENDIF ELSE
D_result='**********' EXIT ENDIF
dec=dec/16 ENDDO
END FUNCTION END MODULE Change PROGRAM dechex
____ (10) USE change _
CHARACTER*8 hex1 READ(*,*) decade
___ (11) hexl=dtoh(decade) __ WRITE(*,*) hex1 END PROGRAM dechex
4. 阅读下列程序.其功能是使用筛法选出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(__ (12)MOD(A(K),2)__.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
____ (13) P(M)=A(K) _ M=M+1 ENDIF ENDDO
WRITE(*,'(1X,
5. 下列程序执行后,输出的第一行是____(15)__1234_____,abcd_____(16)_______。
SUBROUTINE ASSIGN(STR,INT)
CHARACTER(LEN=*),INTENT(OUT)::STR CHARACTER ::CHANGE(10) INTEGER(2)::INT INTEGER(2)::N,M,I N=0
DO WHILE(INT/=0) N=N+1
M=MOD(INT,10)
CHANGE(N)=CHAR(ICHAR('0')+M) INT=INT/10 ENDDO DO I=1,N
STR(I:I)=CHANGE(N+1-I)
第二行是 ENDDO
ENDSUBROUTINE ASSIGN
PROGRAMMAIN
INTERFACE ASSIGNMENT(=) SUBROUTINE ASSIGN(STR,INT) IMPLICIT NONE
CHARACTER(LEN=*),INTENT(OUT)::STR CHARACTER ::CHANGE(10) INTEGER(2),INTENT(IN)::INT INTEGER(2)::N,M,I ENDSUBROUTINE ASSIGN ENDINTERFACE
CHARACTER(LEN=4)::ch1(2) CHARACTER(LEN=4)::string1 INTEGER(2)::m1 m1=1234
string1='abcd' ch1(1)=m1
ch1(2)=string1 print*,ch1(1) print*,ch1(2) END
6. 下列程序执行后,输出的是_____(17)_10_____ PROGRAMMAIN PARAMETER(M=5) INTEGER::b(M) INTEGER::resu DATA b/5*2/ resu=SUM(b,M) PRINT*,resu
CONTAINS
FUNCTION SUM(A,N)RESULT(SUM_result) INTEGER::I,N,SUM_result INTEGER::S,A(N) POINTER(P,S) SUM_result=0 P=LOC(A) DO I=1,N
SUM_result=SUM_result+S P=P+4 ENDDO
END FUNCTION END
7. 下列程序执行后,输出的第一行是__(18)__3_,第二行是___(19)_1__,第三行是__(20)__5_。
PROGRAMMAIN
INTEGER::B=1,M=6 CALL SUB(B,M) END
RECURSIVE SUBROUTINE SUB(A,N) INTEGER::N,A,VALUE IF(A WRITE(*,FMT=\ CALL SUB(A,VALUE-1) CALL SUB(VALUE+1,N) ENDIF END SUBROUTINE 8. 下列程序执行后,输出的第一行是10002xiao zhang_ 1300.00__(21)___,第二行是_10001xiao wang__1200.00(22)___。 MODULE struct TYPE person INTEGER(2)::number CHARACTER(LEN=20)::name REAL::pay ENDTYPE person TYPE(person) ::worker(2) CONTAINS SUBROUTINE sub(A) TYPE(person)A(2),tmp tmp=A(1);A(1)=A(2);A(2)=tmp END SUBROUTINE ENDMODULE struct PROGRAMMAIN Use struct Worker(1)=person(10001,?xiao wang?,1200.0) Worker(2)=person(10002,?xiao zhang?,1300.0) Call sub(worker) Print*,worker(1) Print*,worker(2) END 9. 下列程序执行后,输出的是___(23)_72__。 PROGRAMMAIN INTEGER(2),DIMENSION(:),ALLOCATABLE::A INTEGER(2)::Y ALLOCATE(A(0:15)) A=(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16/) Y=FUN(A(1),3) WRITE(*,*) Y CONTAINS FUNCTION FUN(B,N) RESULT(L) INTEGER(2)::N,L,I,J,M INTEGER(2)::B(N,N) L=0 DO I=1,N M=1 IF (MOD(I,2).EQ.0) M=2 DO J=M,5,2 L=L+B(I,J) ENDDO ENDDO END FUNCTION END FORTRAN 90模拟测验六(笔试部分) 一. 选择题(从4个可选答案中选择一个正确答案添入空白处) 1.关于 FORTRAN90源程序中的注解行,以下四种说法中正确的是 。 (教材62) A. 第一列的字符是C或*的行是注解行 B. 注解行不可出现在PROGRAM语句的前面 C. 注解行不能出现在语句始行与续行之间 D. 任何以符号”!”开头的内容均是注解行 2.FORTRAN90源程序书写风格的正确说法是 。 (教材63) A. 自由格式,程序从任一列开始书写,但一行只能写一个语句 B. 自由格式,程序从任一列开始书写,一行可写多个语句,语句间用分号隔开 C. 必须是固定格式,程序从第7列开始写,但一行只能写一个语句 D. 必须是固定格式,程序从第7列开始写,一行可写多个语句,语句间用分号隔开 3.FORTRAN90使用的字将集中除字母和数字外,还有21个专用字符,但是以下四组字符中所有字将均不属于专用字符的 。 A. % ^ !?; B. & * ( ) : C. {}~^ # D. [ ] \”$ 4.FORTRAN90程序由若干(至少一)个独立的程序单位组成,以下四组中均不是独立的程序单位的是 。 A. 系统提供的内部函数、接口块、内部子程序过程 B. 函数辅程序单位、主程序单位 C. 模块、子程序辅程序单位、内部函数过程 D. 函数辅程序单位、子程序辅程序单位 5.数组说明语句为:REAL(4),DIMENSION(:,:),ALLOCATABLE::a,b(说明A,B是动态数组)以下四种说法中正确的是________ 。 A. a,b只能出现在内部过程的哑元表内,因为其大小不确定 B. a,b只能出现在外部过程的哑元表内,因为其大小不确定 C. a,b只能出现在主程序内,使用前应先分配内存空间 D. a,b可出现在主程序或辅程序内,使用前应先分配内存空间 6.数组说明语句为:REAL,DIMENSION(-1:1,-2:2,-3:3)::a (教材207) 数组元素以a(1,1,1)是第 个元素。 A. 71 B. 72 C. 73 D. 74 7 FORTRAN90引进的指针变量其意义是 。 (教材309) A. 指针变量的内容是地址 B. 指针变量是所指向的变量的别名 C. 指针变量就是所指向的变量,因为它们的值相同 D. 指针变量是不能参与运算的变量 8.说明语句为:CHARACTER(len=5)::khar CHARACTER(len=10),PARAMETER::line='Vive Chine' 下述语句中不正确的是 。 A. khar=line(6:10) B. khar=‘Chine? C. khar=line D. khar=line//'!' 9.以下涉及内部函数过程和内部子程序过程的有关说法中,不正确的是 。 (教材363) A.它们都可以不带哑元(又称形参),称为无参内部过程 B.它们可以带若干哑元(又称形参),这些哑元局部于内部过程 C.调用无参内部过程时,过程名后面的一对括号可有可无 D.内部过程只能在定义它的程序单位中被引用或调用 10.以下关于模块的说法中,不准确的是 。 (教材370) A.模块内定义的变量可供使用该模块的所有程序单位共享 B.模块内定义的变量在赋予初值后,使用该模块的程序单位可以改变这些变量的值且改变后的值仍可共享 C. 模块内可以定义内部过程,此类过程可供使用该模块的程序单位任意调用 D. 模块内既然能定义内部过程,因此不能说模块内不得包含可执行部分 二、填空题(在空白处添入正确内容) 1.下列程序执行后,magic(l,1)= (l),magic(2,3)= (2) ,magic(3,1)= (3)。 INTEGER(1),DIMENSION(1:3,1:3)::magic=0 INTEGER(1)::i=3,j=2,k magic(i,j)= 1 DO k= 2,9 i= i+1; j= j+1 IF(i>3.AND.j>3)THEN i= i-2; j = j-1 ELSEIF(i>3.AND.j<=3)THEN i= 1 ELSEIF(i<=3.AND.j>3)THEN j=1 ELSEIF(i<=3.AND.j<=3)THEN IF(magic(i,j )/= 0)THEN i=i-2;j = j-1 ENDIF ENDIF magic(i,j)=k ENDDO PRINT '(6X,3I3)',((magic(i,j),j= 1,3),i= 1,3) END 2.下列程序执行后,输出的第一行是 (4) ,第二行是 (5) 。 PROGRAM RECURS INTERFACE RECURSIVE FUNCTION F(n) RESULT(f_result) INTEGER::n,f_result END FUNCTION F END INTERFACE WRITE(* ,FMT=?(1X,”VALUE=”,I4)?) F(3),F(5) END PROGRAM RECURS RECURSIVE FUNCTION F(n) RESULT(f_result) INTEGER::n,f_result IF (n==0) THEN f_result=0 ELSEIF(n==1.OR.n==2)THEN f_result= 1 ELSE f_result=2*f(n-1)+f(n-2)+f(n-3) REAL,INTENT(in)::d(:) END FUNCTION average END INTERFACE END MODULE abc FUNCTION average(d) RESULT(mean) REAL::mean REAL,INTENT(in)::d(:) Mean=SUM(d)/SIZE(d) PRINT ?(1X,F7.2,I3)?,SUM(d),SIZE(d) END FUNCTION average PROGRAM Main USE abc REAL,DIMENSION(5)::a REAL::mean READ(*,*)a !输入10.0,20.0,30.0,40.0,50.0 Mean=average(a) PRINT?(1X,”Average is:”,F6.2)?,mean END PROGRAM main 8.构造一奇阶(本程序为9阶)旋转矩阵:中心是1,接着按逆时针方向旋转依次增加2,3,4等等。 例如,3阶时为 。 为算法简单起见,实现时从右下角元素具最大值处开始按顺时针方向旋转,依次减少其值,直至到达中心处为1时止。设i为行足标,j为列足标。程序按j减少,i减少,j增加,i增加的顺序逐个填入数组a的相应元素。程序内定义的函数spin_square(n)以数组为函数值,故主程序中必须用接口块加以说明。特别注意由外圈进入内圈的位置。完善下列程序,以实现以上要求的功能。 PROGRAM main INTERFACE (16) INTEGER,DIMENSI0N(1:n,1:n)::a END FUNCTION spin_square END INTERFACE INTEGER,DIMENSION(1:9,1:9)::a INTEGER::i,j a=spin_square(9) PRINT?(1X,9I3)?,((a(i,j),j=1,9),i=1,9) END PROGRAM main ! FUNCTI0N spin_square(n)RESULT(a) INTEGER::n,nsquare,nc,nr,i,j,k INTEGER,DIMENSION(1:n,1:n)::a nsquare=n*n nc=n; nr=l i=n; j=n (17) D0 k=nsquare-1,1,-1 IF (j>nr.AND.i==nc)THEN j=j-1 ELSEIF(j==nr.AND.i>nr)THEN i=i-1 ELSEIF(j ELSEIF(j==nc.AND.i IF(j==nc.AND.i==nc-1)THEN (18) !这里应填两个赋值语句,中间用 ;号隔开!! ENDIF ENDIF (19) ENDDO END FUNCTION spin_square 9.将电文译成密码。方法是:将一行电文(由英文字母、空格、标点符号组成的字符串)的每个字符的ASCII码值依次加上指定的密钥key(仅含有10个数)中的数后再进行处理:凡字母须再转换为字母且仍保持其大小写体;非字母(不作处理,因此)保持不变。字母经加上密钥可能不再是字母,故必须稍作处理使其仍为字母,例如,z的ASCII码值是122,加上19后为14l,它显然不是字母,但减去26后为115是字母s。实际要译成密码的一行可能不足80个字符。 PROGRAM main CHARACTER(len=80)::line INTEGER::i READ(*,FMT=?(A)?)line CALL encode(line) WRlTE(*,?(A)?)line END PROGRAM main ! 内部子程序过程upper_or_lower(x)用来判别字符x是否大小写字母 SUBROUTINE encode(line) INTEGER(1),DIMENSION(10)::key=(/19,21,2,18,15,21,20,9,14,5/) CHARACTER(1en=*)::line CHARACTER(len=1)::tmp LOGICAL(1)::upper,lower INTEGER::i,m,index D0 i= (20) tmp=line(i:i) (21) IF(upper)THEN index=MOD(i,10) (22) m=ICHAR(tmp)+key(index) IF( (23) ) m=m-26 line(i:i)=CHAR(m) ELSEIF(lower)THEN index=MOD(i,10) (24) m=ICHAR(tmp)+key(index) IF( (25) ) m=m-26 line(i:i)=CHAR(m) ENDIF ENDDO CONTAINS SUBROUTINE upper_or_lower(x) CHARACTER(len=1)::x upper=x>=?A?.AND.x<=?Z? lower=x>=?a?.AND.x<=?z? END SUBROUTINE upper_or_lower END SUBROUTINE encode 10.求解非线性方程 的一个实根的割线法(又名弦割法)是个常见的方法:若 分别在所求根的两侧,且使 取异号值,则用公式 获取或修正近似根,当时, 即为所求之近似根。以下程序采用递归子程序求解 的根。变量iter_count为允许的最大迭代次数,root为根: RECURSIVE SUBROUTINE secant(xleft,xright, iter_count,root,eps,f) REAL,INTENT (inout)::xleft,xright,root REAL,INTENT(in)::eps REAL,EXTERNAL::f REAL::xmodify,fleft,fright,fmodify INTEGER::iter_count fleft=f(xleft); fright=f(xright) (26) fmodify=f(xmodify) IF( (27) )THEN root=xmodify ELSE iter_count=iter_count-1 IF (iter_count<0)THEN root=xmodify PRINT *,?It is not so good。? ELSEIF (fleft*fmodify<0.0)THEN CALL secant(xleft,xmodify,iter_count,root,eps,f) ELSEIF (fmodify*fright<0.0)THEN (28) ENDIF ENDIF END SUBROUTINE secant ! g(x)=0是要求得根的方程 FUNCTI0N g(x) RESULT(g_result) REAL::g_result,x g_result=(x/2.)**2-cos(x)-exp(x) END FUNCTI0N g ! (a.b)是根所在区间,eps用于控制精度,maxiterate为允许的最大迭代次数 PROGRAM main REAL::a,b,eps,root (29) INTEGER::maxiterate READ(*,*)a, b, eps, maxiterate (30) WRITE(*,?(“ROOT=”,F8.4)?)root END PROGRAM main 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库FORTRAN90模拟测验在线全文阅读。
相关推荐: