1、. .FORTRAN程序设计复习题一、 选择题B (1)以下各FORTRAN表达式中合法的是A) S+T*2P = 0.0B) .NOT. (A*B+C) C) A2+B2/(C+D) = D)算术运算符A (14以下语句函数的定义中正确的选项是AF(X,Y)(XY)/(X*Y)7.0BFUNCTIONFUN(I,J,K)3*I2*J0.5*KCH(A,B,C(I)SIN(A)SIN(B)C(I)D)S(A,B,C)A*BS(A*A,B,C)B15以下标识符中,不属于FORTRAN常量的是A.TRUE. BFALSE CROOT D123.0B16整型变量M能被整型变量K整除的FORTRAN7
2、7表达式是AMOD(M,K)0 MOD(M,K)= =0BMM/K*K .EQ.0CMOD(K,M)0 DMOD(M,K)0 = .TRUE.C17设有以下数组说明语句:REAL: A(1:10,1:10)该数组说明语句定义了数组A中的元素个数为A100 B110 C120 D121A(18)按隐含规那么默认为整型,语句IP=3.1415926执行之后,IP的值是A) 3 B) 3.1416C) 3.141592 D)3.141593D (19)以下数据中,不符合 FORTRAN常量表示法的是A) -25.6 B) 2.758D3C)FOOT= D) TRUEC(20)设C是复型变量,A与B为
3、有定义的实型变量,以下赋值语句中合法的是A) C=A+BB) C=(3.5,1.5*2)C) C=(2.0,3D-2)D) C=(AB,A-B)B(21)有矩阵(数组)以下DATA语句中正确的选项是A) DATA B/4*1.0,4*2.0/B) DATA(B(I,J), J=1,4), I=1,2)/4*1.0, 4*2.0/C) DATA B/4*(1.0,2.0)/D) DATA(B(I,J),I=1,2), J=1,4)/4*1.0, 4*2.0/C (21)在使用DO循环及循环嵌套时,以下表达中正确的选项是A) 不仅可以从循环体内转到循环体外,也可以从循环体外转到循环体内B) 外循环
4、与内循环的DO循环控制变量可以不同也可以一样C) 可以从循环体内转到循环体外,但不能从循环体外转到循环体内D) DO循环控制变量在循环体内可以再赋值,也可以被引用B (22)在FORTRAN表达式中,各种运算的顺序是A) 逻辑运算,关系运算,算术运算B) 算术运算,关系运算,逻辑运算C) 关系运算,逻辑运算,算术运算D) 关系运算,算术运算,逻辑运算D(23)赋值语句 X=4*(6/12)=4*0=1.0 执行后,实型变量X的值是A) 2 B) 2.0 C) 1 D) 1.0D (24)为了保证正确出数据,格式编辑符Ew.d中w与d的关系应该是A) wd B) wd+2 C) wd+4 D)
5、wd+6C(25)设以下各语句中用到的数组都已定义,那么以下语句中正确的选项是A) READ(*,*)(I,A(I),I=1,10)B)READ(*,*)(B,(I,J),I=1,10,J=1,10)C) READ(*,*)N,(A(I),I=1,N)D) READ(*,*)(I=1,10,A(I)A (26)以下DO语句中,不正确实现循环的是(I-N规那么:I-N会被视为整型)A) DO 10 S=-1.6,-5.3,-0.4 B) DO 10 K=-1.6,-5.3,-0.4C) DO 10 S=-5.3,-1.6,-0.4 D) DO 10 K=1.6,5.3,-1.4D (27)以下说
6、法中正确的选项是A) 块IF构造中的THEN块或ELSE块不能是空块B) 块IF构造中至少有一个ELSE IF 语句或ELSE语句C) 每个ELSE IF 语句要有一个对应的END IF语句D) 一个块 IF 构造中只能有一个END IF语句A (28)以下数组说明语句中正确的选项是A) INTEGER A(-1:5,0:6)B) REAL M(10:5)C) DOUBLE Y(1:N+1) D) DOUBLE Z(14)B (29)设有一个FORTRAN77子程序如下:SUBROUTINE SS(X,Y,S,T) S=X+YS,T为传出,即需要输出的相当于求圆的面积中的area,只能 T=X
7、*Y为确定的数;X,Y为传入相当于radius,可为表达式 END调用上述子程序的正确语句是A) CALL SS(2.4,W*W,5,5.9,Z)多了一个B) CALL SS(0.0,4.2,P,Q,R) 多了一个C) CALL SS(F,G,7.2,5.1) D) CALL SS(4.4*I,5.8*J,C,D)I,J可先赋值A (30)在以下语句函数的定义中正确的选项是A) F(X,Y)=(X+Y)/(X*Y)+7.0B) FUNCTION(I,J,K)=3*I+2*J+0.5*KC) H(A,B,C(I)=SIN(A)+SIN(B)+C(I)D) S(A,B,C)=A*B+S(A*A,B
8、,C)B(31)MON语句的功能是A) 给同一程序模块中的假设干变量分配同一存储单元B) 给不同程序模块中的变量分配一样的存储单元C) 给程序中任意两个变量分配一样的存储单元D) 给同一程序模块中的不同变量分配一样的存储单元B (32)以下表达式中值为整数4的是A) SQRT(16.0)B)27/6 C) 16*0.5D) 4*1.0C(34)语句K=2+3.0*2/2执行后,整型变量 K的值是A)6.5B) 5C) 6D)7C (36)适用于字符型I/O的 FORTRAN77格式编辑将是A) Fw.dB) Iw.dC) AD) Gw.dD (37)给定子例行程序如下SUBROUTINE SU
9、B(K,A)B=K+2K为整型,B错误;A不是整型,A错误;K为传入,可为表达式,A=A+BA为传出,不能为表达式END以下调用语句中正确的选项是A) CALL SUB(N,N) B) CALL SUB(X,X)C) CALL SUB(N+2,X)D) CALL SUB(N,X+3)C(38) 以下FORTRAN语句中,正确的选项是A) READ(*,*) (N,A(K),K=1,N) B) WRITE(*,*) (M(K,J),K=1,10, J=1,10) C) WRITE(*,*) (10,A(K),K=1,10) D) DATA A,B,C/2*0.0/ C (39)对于以下给定的FO
10、RTRAN说明和赋初值语句: INTEGER A(2,2) DATA A/3,4,5,6/ 数组元数A(2,1)的初值为 A) 3 B) 5 C) 4 D) 6 C(40)以下对公用区的说明语句中错误的选项是 A) MON A(5), B B) MON/AB/ A(5), B C) MON AB/A(5), B/ D) MON/A(5), BD (41)以下各逻辑IF语句中正确的选项是A) IF(X=0.0).AND.(X.LT.1.0)Y=2*X+1.0C) IF(0.0=X= 0.0.AND.X =500 .or. windspeed =10 ) thenwrite(*,*) 停顿上班上课
11、 else write(*,*) 照常上班上课 end ifstopend运行上述程序时,如果从键盘输入 Rain:505Wind: 8那么最后输出的结果为:停顿上班上课4、阅读以下FORTRAN程序:program exampleimplicit none real a,b,anscharacter operatorread(*,*) aread(*,(A1) operator read(*,*) b select case(operator)case(+)ans = a+bcase(-)ans = a-bcase(*)ans = a*bcase(/)ans = a/bcase defaul
12、t write(*,(Unknown operator ,A1) operatorstop end select write(*,(F6.2,A1,F6.2,=,F6.2) a,operator,b,ans stopend运行上述程序时,如果从键盘输入 100?200那么最后输出的结果为: Unknown operator ?5、阅读以下FORTRAN程序:program exampleimplicit noneinteger iinteger strleninteger, parameter : key = 2character(len=20) : stringwrite(*,*) Enco
13、ded string:read(*,*) stringstrlen = len_trim(string)do i = 1, strlenstring(i:i) = char( ichar(string(i:i) + key ) end dowrite(*,(String:,A20) stringstopendBCDIJK那么最后输出的结果为: DEFKLM6、阅读以下FORTRAN程序: programexampleimplicit none integer i,j do i=1, 2 do j=2, 3, 2 write(*, (I2,I2) i,jend dowrite(*,*) anot
14、her circle end do stopend程序运行的结果是:1 2 another circle2 2 another circle按输出格式,1、2前均有一空格。假设题目无特殊说明,不需表达出;假设有说明,那么空格用“表示7、阅读以下FORTRAN程序:program exampleimplicit none integer : dest = 6 integer floor do floor=1, dest if ( floor=2 .or. floor=4 ) cyclewrite(*,*) floor end do stopend程序运行的结果是:13568、阅读以下FORTRA
15、N77程序:program exampleimplicit none integer, parameter : limit=10 integer counter integer : ans = 0 counter = 1 do while( counter = limit ) ans = ans + counter counter = counter + 2 end do write(*,*) ans stopend程序运行的结果是:259、阅读以下FORTRAN程序:program exampleimplicit none integer, parameter : students = 5
16、integer : student(students) = (/ 80, 90, 85, 75, 95 /) integer i do while( .true. ) write(*,*) Query: read(*,*) i if ( istudents ) exit write(*,*) student(i) end do stopend运行上述程序时,如果从键盘输入 3那么最后输出的结果为: 8510、阅读以下FORTRAN程序:program exampleimplicit none integer, parameter : L=2, M=3, N=2 real : A(L,M) =
17、(/ 1,2,3,4,5,6/) real : B(M,N) = (/ 1,2,3,4,5,6/)real : C(L,N) integer : i,j,k do i=1,L do j=1,N C(i,j) = 0.0do k=1,M C(i,j) = C(i,j)+A(i,k)*B(k,j) end doend do end do do i=1,L write(*,*) C(i,:) end do stopend程序运行的结果是:22 4928 6411、阅读以下FORTRAN程序:program exampleimplicit none integer : i,j loop1: do i=
18、1,3 loop2: do j=1,3 if ( i=3 ) exit loop1 if ( j=2 ) cycle loop2 write(*, (,i2,i2,) ) i, j end do loop2 end do loop1 stopend程序运行的结果是:(1,1)(1,3)(2,1)(2,3)12、阅读以下FORTRAN程序:program exampleimplicit none real : a=1.0 call ShowInteger(a) call ShowReal(a) stopendsubroutine ShowInteger(num)implicit none int
19、eger : num write(*,*) num returnendsubroutine ShowReal(num)implicit none real : num write(*,*) num returnend程序运行的结果是:随机数 1.00000013、阅读以下FORTRAN程序:program exampleimplicit none integer, parameter : row = 2 integer, parameter : col = 2 integer : m(row, col)integer r integer c data (m(r,c), r=1, 2), c=1
20、,2) /1,2,3,4/write(*,(I3,I3,/,I3,I3) ( m(r,c), c=1,2 ), r=1,2) stopend程序运行的结果是:1 32 414、阅读以下FORTRAN程序:program ex0805implicit none integer : a = 1 integer : b = 2 write(*,*) a,b call add(a) call add(b) write(*,*) a,b stopendsubroutine add(num)implicit none integer : num num = num+1 returnend程序运行的结果是:
21、 1 2 2 315、阅读以下FORTRAN程序:program exampleimplicit none integer, parameter : size=10 integer : a(size) = (/ 5,3,6,4,8,7,1,9,2,10 /) integer : i,j integer : t do i=1, size-1 do j=i+1, size if ( a(i) a(j) ) then t=a(i) a(i)=a(j)a(j)=t end ifend do end do write(*,(10I4) a stopend程序运行的结果是: 1 2 3 4 5 6 7 8
22、 9 1016、阅读以下FORTRAN程序:program exampleimplicit none real : a=1real : b=2real, external : add write(*,*) add(a,b) stopendfunction add(a,b)implicit none real : a,b real : add add = a+b returnend程序运行的结果是:3.000000(类似的题目,写3.0亦可,但不可写3)17、阅读以下FORTRAN程序:program exampleimplicit none integer : a,b mon a,b a=1
23、b=2 call Showmon() write(*,*) a, b endsubroutine Showmon()implicit noneinteger : num1, num2 mon num1, num2 write(*,*) num1, num2 returnend程序运行的结果是:1 21 218、阅读以下FORTRAN程序:module global implicit nonereal a,bmon a,bend moduleprogram example use global implicit none a=1.0 b=2.0 call sub()end programsubr
24、outine sub() use global implicit none write(*,*) a,b returnend subroutine程序运行的结果是:1.000000 2.00000019、阅读以下FORTRAN程序: INTEGER A(3,3) DO K=1,3 DO L=1,3 A(K,L)=K*10+L END DOEND DOWRITE(*,(1X,3I3) A END 程序运行的结果是:11 21 3112 22 3213 23 3320、阅读以下FORTRAN程序: INTEGER F F(X,Y)=X+Y A=-2.5 B=4.0 B=1.0+F(A,B) WRI
25、TE(*,20) B 20 FORMAT(1X,F4.1) END 程序运行的结果是: 2.021、阅读以下FORTRAN程序: X=0 DO L=10, 5, 15 X=X+1.0 END DOEND 程序运行时执行循环体的次数是:022、阅读以下FORTRAN77程序: DIMENSION M(4,4) DATA M/1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6/ DO I=1,4 WRITE (*,100)(M(I,J),J=1,I) END DO100 FORMAT(1X,4I2) END 程序运行的结果是:1 2 63 7 1 4 8 2 6 23、阅读以下FORT
26、RAN程序: CHARACTER(LEN=10) A CHARACTER(LEN=6) BDO I=1,10 A(I:I)= END DO A(1:5)=ABCDE B=FGHIJK A(4:9)=B WRITE(*,100) A 100 FORMAT(1X,A) END 程序运行结果是:ABCFGHIJK24、 阅读以下FORTRAN程序: X=0.0 Y=2.0 CALL SUB(X,Y,Z,3.0) WRITE(*,(1X,3F5.1)X,Y,Z END SUBROUTINE SUB(A,B,X,Z) A=A+1 B=B+2.0 Y=1.0 X=X+Y END 程序运行结果是:1.0 4
27、.01.025、 阅读以下FORTRAN程序: INTEGER N(20) DO M=1,20 N(M)=0 END DOK=5 DO M=1,K DO J=1,K N(J)=N(M)+1 END DOEND DOWRITE(*,*)N(K) END 程序运行的结果是:926、 阅读以下FORTRAN程序: MON /M(5),N(4) CALL FIB WRITE(*,(1X,4I3) N END SUBROUTINE FIB MON /J(5),K(4) DO I=1,4 K(I)=J(I+1)-J(I) END DO END BLOCK DATA MON /K(5),L(4) DATA
28、K/8,7,10,4,13/ END 程序运行的结果是:-1 3 -6 927、阅读以下FORTRAN程序: N=0 DO K=30,0,-2 DO L=-10,10,1 N=N+1 END DOEND DOWRITE(*,*) N END 程序运行结果是:33628、阅读以下FORTRAN程序: READ(*,*) N X=1.0 IF (N.GE.0) X=2*X IF (N.GE.5) X=2*X+1.0 IF (N.GT.15) X=3*X-1.0 WRITE(*,*) X END 运行上述程序时,如果从键盘输入 15 那么最后输出的值为 :5.000000 29、阅读以下FORTRA
29、N程序: DIMENSION M(3,4) DATA M/4*2,4*1,4*-1/ N=0 DO K=1 ,4 N=N+M(1,K) END DOWRITE(*,*) N END 运行上述程序后,输出的N的值为 4 30、阅读以下FORTRAN77程序:READ(*,*) YIF (Y.LE.0.0) THENZ=0 .0ELSE IF (Y 5.0).AND.(Y /= 2.0) THENZ=1/(Y+2)ELSE IF (Y = 10.0) THENZ=1/YELSEZ=10.0END IF WRITE (*,*)ZEND在执行上述程序时,由键盘输入2.0最后输出的Z值为0.5000000写0.5即可,不同的编译器,输出的“0的个数可能会不同三、编程题教科书中:第四章第九章的习题。. .word.