大学FORTRAN语言试题
一、 选择题(15×1分=15分)
1. Fortran程序设计语言允许使用的专用字符集是 。 A.(),.;[]+-*/=:空格 B.(),.αβ+-*/=:空格 C.(),.+-*/$'=:空格 D.{},.;?+-*/=:空格 2.按隐含规则确定变量的数据类型,Fortran表达式
(A112/BC1+15.123456789.0_8)-(1000.0_4/3.0+ABI*ABJ) 的值的数据类型为 。
A.复型 B.整型 C.实型(种别为8) D.实型(种别为4)
3. 执行循环语句DO I=0.5,4.5,1.5,正常退出循环后,循环执行的次数和循环变量I的值分别为 。
A.4和4.5 B.5和5 C.4和6 D.5和6 4. 语句A(M(I))=MOD(I,7)是 。
A.函数定义语句 B.赋值语句 C.非法语句 D.说明语句 5.下列不合法的是:_____
A.AB.EQV.C>D D.A.AND.B.AND.C 6. 若数组说明符ARRAY(-5:5,-10:0)的元素个数为 。 A.144 B.121 C.110 D.100
7. 设循环初值、终值和增量分别为M1,M2和M3,循环次数的计算公式是 。 A.INT((M2-M1)/M3) B.INT((M2-M1)/M3)+1
C.MAX(INT(M2-M1+M3)/M3,0) D.MIN(INT(M2-M1+M3)/M3,0) 8. 下列字符表达式中正确的是 。 A.’ABCD’+’MN’’D’ B.’ABCD’//’MN’’D’ C.CHAR(65)+’N’//’CH’ D.’123 45’-’5’ 9.语句integer,dimension(1:-1)::a,下列说法中正确的是:_____ A.a数组的元素个数为0 B.a数组的元素个数为3 C.a数组的元素个数为1 D.该说明语句是错误的
10.子程序的虚元可以是:
A.变量名、数组名、过程名 B.变量名、数组名、过程名和符号常量名 C.变量名、数组名、数组片段、过程名 D.任意符号名 11.c为复型量,下列正确的是:
A.c=(1/2,1/5) B.c=sqrt((0.1,4.5)) C.c=1.0+4i D.c=(x,y) 12.数学式 的FORTRAN表达式是( )
A.2/3*SIN(3.14/4) B.2SIN(3.14/4)/3 C.2.0*SIN( /4.0)/3.0 D.2*SIN(3.14/4)/3 13.执行下列赋值语句后,变量X的值为( ) X=4+36**(7/14)
A.10.0 B.5.0 C.10 D.5 14.下列不合法的是:
A.AB.EQV.C>D D.A.AND.B.AND.C 15.执行下列程序时由键盘输入13579.2468,输出结果为: READ’(2(F4.1,2X))’,A,B PRINT’(2(F4.1,2X))’,A,B
A.135.7 246.8 B.13.5 24.6 C.**** **** D.*** ****
二、 填空题(15×1分=15分)
1.FORTRAN90自由格式的程序续行标记为______字符,一般写在_____位置;自由格式的程序注释标记为____字符。
2.下列FORTRAN常量表示正确的是_______。
①1/2 ②.T. ③’A/2’ ④(1.2,3.4) ⑤0D0 ⑥2E+0.5 ⑦1+2i 3.执行程序段
CHARACTER*4::A A=’12345’ C=12345 PRINT ‘(A4,F5.1)’ ,A,C END
则输出的A值为_____,输出的C的值为_____。 4.下列循环执行结束后,SUM的值为_____,J的值_____,语句DO I=1,5的执行次数为____。 DO I=1,5 SUM=0 DO J=I,4,-1 SUM=SUM+I+J ENDDO
ENDDO
5.虚元数组与相应的实元数组,元素个数可以不相同的说法是否正确____(是/否)。 6.READ(*,*)(C1,C2,K(I),I=1,2) 如输入1,2,3,4,5,6,7则C1的值为____。
7.如有派生类型变量PERSON,则引用其成员NAME的表示方式是____。 8.调用子程序时,实元表与对应的虚元表应做到__________________一致。 9.INTEGER A(-1:1,2,0:1)
A=RESHAPE((/1,2,3,4,5,6,7,8,9,10,11,12/),(/3,2,2/)) 则原来A(-1,2,0)与A(1,1,1)的值为_______。 10.K=0
DO A=0.5,4.5,1.5 DO I=1,A K=K+1 ENDDO ENDDO
循环正常结束时K的值为_________。
四、 阅读程序,写出程序运行结果(5×4分=20分) 1. INTEGER,DIMENSION (2, 3)::M INTEGER::IS
M=reshape(( /1, 2, 3, 4, 5, 6 /),(/2,3/)) L=IS ( M (1, 2 ), 3 ) WRITE(*, *) L END
FUNCTION IS ( N, K ) RESULT(IS_RES) INTEGER::K,IS_RES
INTEGER,DIMENSION( K )::N IS_RES=0 DO I=1, K, 2
IS_RES=IS_RES+N ( I ) ENDDO
END 输出结果为:
2. CHARACTER*9:: LINE D0 I=1, 5 DO J=6-I, 4+I LINE(J: J)=’ *’ ENDDO PRINT *, LINE LINE=’ ’
ENDDO
END 输出结果为: 3. X=3.5 Y=1.8
CALL SUB(X+Y,X-Y,Z) WRITE(*,’(F5.2)’)Z END
SUBROUTINE SUB(A,B,C) X=2.0 Y=3.0
IF(A>B)THEN C=X+Y ELSE
C=X-Y ENDIF
END 输出结果为:
4. k=0 II: DO I=1,2 JJ: DO J=1,2 K=K+I*J ENDDO JJ
MM:DO M=1,2 PRINT*,K*M
ENDDO MM ENDDO II END
则输出结果的最后一行值为: 5.阅读下列FORTRAN程序: INTEGER,PARAMETER::L=3 INTEGER,DIMENSION(L)::N N=(/3*0/) DO I=1,L DO J=1,L N(J)=N(I)+1 ENDDO ENDDO
WRITE(*,*)N(L)
END 输出结果为: 三、 程序填空(4×5分=20分)
1. 将20个整数中能被3整除的偶数,有序的放入数组B中输出。
INTEGER,DIMENSION(M)::A, READ(*,*)A K=1
DO I=1,M
IF THEN B(K)= ENDIF ENDDO
WRITE(*,*)(B(I), ) END
2.下列FORTRAN程序的功能是:利用对分查找法在给定的一维有序数组中查找给定的元素X,并返回该元素在数组中的下标,如果数组中没有该元素,则返回0。 FUNCTION S(A,N,X) RESULT(S_RES) INTEGER,DIMENSION(N)::A,X INTEGER::P,S_RES P=0;K=1;J=N DO
IF(K<=J.AND.P= =0)THEN L=(K+J)/2
IF(A(L) X)THEN P=1
ELSE IF (A(L)>.X)THEN J=L ELSE
K=L ENDIF
ENDIF ENDDO S_RES=L
IF( )S_RES=0 END
3.下列FORTRAN程序的功能是:计算并输出100~200之间所有素数的平方根之和。 SUM=0.0 DO N=100,200
Q=SQRT(1.0*N) M=Q K=2
DO IF((K IF(L/=0.OR.K>=M) ENDDO IF (L= =0) SUM=SUM+SQRT(1.0*N) ENDDO WRITE(*,100)SUM 100 FORMAT(F9.3) END 4.下面是一个字符串数组排序程序,用于将任意10个英语单词按照字母顺序从小到大排序,每个单词最多20个字母。要求数组元素由一行输入。 CHARACTER(LEN=20)::TEMP,TEMP1,WORD READ(*,10)WORD 10 FORMAT( ) DO I=1,9 TEMP=WORD(I) L=I DO J=I+1,10 IF (TEMP.GT.WORD(J))THEN TEMP=WORD(J) ENDIF ENDDO TEMP1=WORD(I) WORD(L)=TEMP1 ENDDO WRITE(*,40)WORD 40 FORMAT(A20) END 五、 编程题(10分×3=30分) 1. 编写判断素数的函数子程序,在主程序中输入2个整数M1和M2,并输出[M1,M2]上的全部素数。 2. 用牛顿迭代法求方程 X3+9.2X2+16.7X+4=0 在X=0附近的根,迭代精度为1E-5。若在M次内还未达到精度,则输出发散信息。 3.给出一个年号(如1996),判断它是否闰年。是闰年时,输出“XXXX年是闰年”的信息,否则输出“XXXX年不是闰年”的信息。判断是否闰年的标准是: (1)年数不能被4整除的不是闰年; (2)年数能被4整除但不能被100整除的是闰年 (3)能被100整除但不能被400整除的不是闰年,能被400整除的是闰年。