第1页/共页一、选择题1、下列关于SUBROUTINEMAP(X,Y)语句行的叙述中,不正确的是()A)这是子程序的第一个语句B)字符串MAP是子程序名C)变量X是子程序的形参D)子程序执行后,MAP将返回整型数据2、FORTRAN表达式2/4+0.5的值是()A)0.5B)1C)1.0D)03、阅读下列FORTRAN程序:PI=3.14159265WRITE(*,'(F7.4)')PIEND程序运行后输出结果是()A)3.142B)3.1415C)0.31416D)3.14164、圆的直径存放在整型变量K之中,下列计算圆面积的表达式中正确的是()A)3.1415926*K*K/4B)3.1415926*(K*K/4)C)3.1415926*(K/2)**2D)3.1415926*(K/2)*(K/2)5、要判断月收入M在2000元以上(含2000元)且5000元以下)不含5000元)的职工,应该使用的逻辑表达式是()A)M.GE.2000.AND.M.LE.5000B)M.GE.2000.OR.M.LE.5000C)M.GE.2000.AND.M.LT.5000D)M.GE.2000.OR.M.LT.50006、设FORTRAN子程序如下:SUBROUTINESUB(I,X)B=I+1X=X+BEND若主程序中的变量M,B已按I-N规则赋值,则调用上述子程序的语句中正确的是()A)CALLSUB(M,M)B)CALLSUB(M+4,B)C)CALLSUB(B,B)D)CALLSUB(M,B+4)7、下列不是FORTRAN常量的是()A)(3.0,4.0)B)3.1416D+00C)2/3D)'Verygood!'8、阅读下列FORTRAN程序:F=1.0DO20K=3,7,3DO20L=K-1,K20WRTTE(*,'(I3,F8.1)'K,F*KEND程序运行结果的最后一行是()A)36.0B)66.0C)6180.0D)7180.09、在FORTRAN中,下列运算符的优先顺序是()A)逻辑运算,关系运算,算术运算B)关系运算,逻辑运算,算术运算C)算术运算,关系运算,逻辑运算D)关系运算,算术运算,逻辑运算10、使用FORTRAN内部函数时,所给的自变量()A)只能是常量B)只能是变量C)只能是常量或者变量D)可以是常量、变量或者表达式11、设X=2.0,Y=8.0,Z=6.0,L=.TRUE.,则下列FORTRAN表达式中值为.TRUE.的是()A)X+Z.GT.Y.AND.LB).NOT.(Y.LT.Z+X).NEQV..NOT.LC).NOT.L.OR.(L.EQV.Y+X.EQ.Z)D)Y+X.GE.Z+X.AND.(L.AND..FALSE.)12、下列输出语句行中正确的是()A)WRITE(*,*)(A(K,L),K=1,3,L=1,3)B)WRITE(*,*)A(K,L),K=1,3,L=1,3C)WRITE(*,*)((A(K,L),K=1,3),L=1,3)D)WRITE(*,*)(A(K,L),K=1,3),L=1,313、给定下列FORTRAN子程序如下:SUBROUTINESUB(K,A)A=SQRT(K*K+1.0)END下列调用语句中正确的是()A)CALLSUB(N,N)B)CALLSUB(X,X)C)CALLSUB(N,X*X)D)CALLSUB(11,X)14、阅读下列FORTRAN程序:INTEGERAA(2,3)DATAAA/1,2,3,4,5,6/CALLS2D19(AA)CALLS2D19(AA(1,2))ENDSUBROUTINES2D19(BB)INTEGERBB(2,2)WRITE(*,'(1X,2I3)')BB(1,1),BB(2,2)END程序运行结果是()A)14B)15C)14D)1236262534第2页/共页15、阅读下列FORTRAN程序:INTEGERA(3,3)DO10K=1,3DO10L=1,310A(K,L)=K*10+LWRITE(*,'(1X,3I3)')AEND程序运行结果是:()A)112131B)111213C)313233D)33323112223221222321222332222113233331323311121331211116、阅读下列FORTRAN程序:WRITE(*,10)'YEAR:',199610FORMAT(/3X,A,I4)END程序运行结果是(^代表空格,下同)()A)^^^^^YEAR:1996B)^^YEAR:1996C)空白行D)空白行^^^^^YEAR:1996^^YEAR:199617、某函数子程序中使用了IMPLICIT、READ、COMPLEX和FUNCTION四种语句,其中属于可执行语句的是:()A)FUNCTIONB)READC)COMPLEXD)IMPLICIT18、阅读下列FORTRAN程序:DIMENSIONM(4,4)DATAM/1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6/DO10I=1,4WRITE(*,100)(M(I,J),J=1,I)10CONTINUE100FORMAT(1X,4I2)END程序运行的结果是()A)1234B)1593C)1D)167860426266121537193711664826344826619、阅读下列FORTRAN程序:CHARACTER*10A,B*6DO10I=1,10A(I:I)=''10COUNTINUEA(1:5)='ABCDE'B='FGHIJK'A(4:9)=BWRITE(*,100)A100FORMAT(1X,A)END程序运行结果是:()A)ABCDEFGHIJB)ABCDEGHIJKC)ABCFGHIJKD)BCDEFGHIJK20、阅读下列FORTRAN程序:INTRINSICSIN,COSWRITE(*,*)FUN(SIN,30.0)/FUN(COS,30.0)ENDFUNCTIONFUN(F,X)X=X*3.14159/180FUN=F(X)END程序运行结果是()A)sin30°的值B)cos30°的值C)tg30°的值D)ctg30°的值二、填空题1、下列FORTRAN子程序的功能是用以下公式计算一组数据Z1,Z2,…,Zn的标准差σ:σ2=(Z12+Z22+…+Zn2)/n-[(Z1+Z2+…+Zn)/n]2请在程序中的下划线处填入合适的内容。【1】SIGMA(Z,N)REALZ(N)SUMX=0.0SUMX2=0.0DO10K=1,N【2】SUMX=SUMX+XSUMX2=SUMX2+X*X10CONTINUEAV=SUMX/NAV2=SUMX2/NS2=AV2-AV*AVSIGMA=【3】2、下列FORTRAN程序的功能是将30个学生的考试成绩读入数组A,然后统计并且输出最高的分数以及小于60分、60~80分与大于80分的三个分数段的学生数。请在程序中的下划线处填入合适的内容。END【4】A(30),B,C(3)DATAC/3*0/READ(*,*)A【5】DO10K=2,30IF(A(K).GT.B)B=A(K)第3页/共页10CONTINUEDO30K=1,30IF(A(K).LT.60)C(1)=C(1)+1IF(A(K).GT.80)C(3)=C(3)+1IF(A(K).LE.80【6】A(K).GE.60)C(2)=C(2)+130CONTINUEWRITE(*,*)B,CEND3、下列FORTRAN程序的功能是用对分法求出方程4.1x3-5.2x=11.8在区间(1,5)中的一个实数根,要求输出根的近似值和对分次数。请在程序中的下划线处填入合适的内容。【7】=4.4*X**3-5.2*X-11.8DATAXL,XR,N/1.0,5.0,0/10N=N+1X=(XL+XR)/2.0FX=FUN(X)IF(ABS(FX).LT.1E-6.OR.N.GE.1000)THENWRITE(*,'(1X,A2,F12.7,A5,I4)')'X=',X,'N=',NELSEIF(FUN(XR)*FX.GE.0.0)THENXR=X【8】XL=XENDIF【9】ENDIFEND4、下列FORTRAN程序的功能是计算多项式y=2+2.1x+3.2x3+5.4x5在x=1.7时的值。主程序调用了函数子程序POLY。请在程序中的下划线处填入合适的内容。PROGRAMPVALUEREALA(6)DATAA/【10】/DATAN,X/6,1.7/Y=POLY(A,N,X)WRITE(*,'(1X,A5,6F5.1)')'a(k)=',AWRITE(*,'(1X,A2,F5.1,A6,F8.2)')'X=',X,';Y=',YENDFUNCTIONPOLY(B,M,V)【11】POLY=B(1)FV=1.0DO10K=2,MFV=FV*V10POLY=POLY+【12】5、下列FORTRAN程序的功能是使用筛法筛选出N以内的所有素数并输出。其算法如下:在N以内的自然数列中先筛除2的倍数(不包括2);在2之后未筛去的第一个数是3,于是再筛除3的倍数;在3之后未筛去的第一个数是5,于是再筛除5的倍数;如此重复下去,直到遇见筛剩下的第一个数是最接近N的平方根的那个数为止。请在程序中下划线处填入合适的内容。PARAMETER(N=100)END【13】A(N),P(N)A(1)=0DO10K=2,N10A(K)=KDO20K=3,N20IF(MOD(A(K),2).EQ.0)A(K)=0ISR=SQRT(FLOAT(N))DO30M=3,ISR,2DO30K=M+2,N30IF(A(K).NE.0.AND.MOD(A(K),M).EQ.0)【14】M=1DO40K=1,NIF(A(K).NE.0)THENP(M)=【15】【1】FUNCTION【2】X=Z(K)【3】SQRT(S2)【4】INTEGER或者REALM=M+1ENDIF40CONTINUEWRITE(*,'(1X,10I8)')(P(K),K=1,M-1)END三、编写程序题1、以循环来计算1/1!+1/2!+1/3!+1/4!+……+1/10!的值。2、编写一个程序计算圆面积,输入两个参数,一个参数为输入圆的半径长,另一个参数用来返回圆面积。3、利用选择排序法编制程序,将数组A中所有的数值(5,3,6,4,8,7,1,9,2,10)从小到大排列。参考答案及评分标准一、选择题1、D2、A3、D4、A5、C6、B7、C8、B9、C10、D11、B12、C13、D14、A15、A16、D17、B18、C19、C20、C二、填空题第4页/共页【5】B=A(1)【6】.AND.【7】FUN(X)【8】ELSE【9】GOTO10【10】2.0,2.10.0,3.2,0.0,5.4(注:顺序不可颠倒,小数点前后的0可以省略其中的一个。)【11】DIMENSIONB(M)或者REALB(M)【12】B(K)*FV或者FV*B(K)【13】INTEGER【14】A(K)=0或者A(K)=0.0【15】A(K)三、编写程序题1、解题程序:programmainimplicitnoneinteger,parameter::max=10integerirealitemrealansans=1.0item=1.0doi=2,maxitem=item/real(i)ans=ans+itemenddowrite(*,*)ansstopendprogram2、解题程序:programmainimplicitnonerealradius,areawrite(*,*)请输入半径长read(*,*)radiuscallCircleArea(radius,area)write(*,('面积='F8.3))areastopendprogramsubroutineCircleArea(radius,area)implicitnonereal,parameter::PI=3.141