1、河海大学春FORTRAN90资料2006年春季 FORTRAN 90笔试一、选择题(用答题卡答题,答案依次填在2130答题号内)21.以下关于FORTRAN90符号名的属性的四种说法中,错误的是 21 。A. DIMENSION:a(4,5)属性说明语句指明a是二维数组 B. TARGET:a(4,5) 属性说明语句指明a是二维数组,是指针指向的目的,可动态分配内存C. POINTER:a(:)属性说明语句指明a是指向数组的指针D. ALLOCATABLE:a(:)属性说明语句指明a是可动态分配的数组22. 下述四种关于外部过程属性EXTERNAL的用法中,错误的是 22 。A. EXTERN
2、AL: sub1 B. REAL, EXTERNAL,TARGET: func1C. EXTERNAL sin D. REAL, EXTERNAL: func123. 定义了三维向量类型,又将+、-、*超载定义为向量的和、差、向量积。以下说法中错误的是 23 。A. +、-、*可对纯量(即数量)进行运算,又可对向量进行运算,它们是类属运算符B. +、-、*既可以对变量、常数又可对数组进行运算,它们是类属运算符C. +、-、*对数组的运算虽然不同于对向量或矩阵的运算,但它们仍然是类属运算符D. +、-、*仅仅是程序中定义过的超载运算符,不能算是类属运算符24. 自定义一个称为逻辑异或运算的运算符
3、.XOR.:仅当逻辑量a、b之一为真时,表达式a.XOR.b 为真。以下四个逻辑表达式中符合上述定义的是 24 。A. (a .OR. b) .AND. .NOT.(a .AND. b) B. (a .OR. b) .OR. .NOT.(a .AND. b) C. (a .AND. b) .AND. .NOT.(a .OR. b) D. (a .AND. b) .OR. .NOT.(a .OR. b) 25 a,b都是数组。有关数组的赋值,以下四种说法中错误的是 25 。A. 数组构造符(/c,d,z/)只能用于对一维数组赋值B. 数组赋值语句a=b,只有a,b形状相同才能实现C. 数组赋值语
4、句a=b,不论何种情况都可以实现D. 过程内的可调维数组(例如REAL,DIMENSION(1:n):a)也可用数组构造符对其整体赋值26. 若数组说明语句为:COMPLEX(kind=4),DIMENSION(3:10,-1:3):a 则SIZE(a)等于 26 。A. 4 B. 160 C. 320 D. 4027. 以下选项所列的各程序块,全部属于独立的程序单位的是 27 。A. 主程序、内部函数过程、内部子程序过程、外部函数过程、系统提供的内部函数和子程序B. 主程序、接口块、外部函数过程、系统提供的内部函数和子程序C. 主程序、外部函数过程、外部子程序过程、模块、数据块辅程序D. 主
5、程序、外部函数过程、系统提供的内部函数和子程序、内部子程序过程28. 若程序块内定义了一个结构型数据(为22矩阵):TYPE matrixINTEGER,DIMENSION(2,2):A END TYPE matrix主程序中有说明语句:TYPE(matrix),DIMENSION(10):b以下说法中正确的是 28 。A. 此语句正确,因为派生(即自定义)类型可以作为数组的类型 B. 此语句不正确,因为派生类型本身就是数组,数组作为数组的类型逻辑上说不通C. 此语句不正确,应写成 matrix,DIMENSION(10):b才正确D. 此语句不正确,应写成 matrix(TYPE),DIME
6、NSION(10): b才正确29. 以下关于递归过程的说法中,错误的是 29 。A. 使用直接递归过程可求解n!问题,但使用间接递归过程却不能求解n!问题B. 递归过程定义中常常隐含着循环执行机制C. 用递归算法解决的Hanoi塔(汉诺塔,又名梵塔)问题很难用非递归算法解决D. 一个可用递归过程也可用非递归过程解决的问题,采用后者为好,它节省计算机的资源30.关于FORTRAN90文件系统的以下说法中,错误的是30 。 A. 无格式顺序存取文件不能是标准输入(键盘)、标准输出(显示器)文件,只能是磁盘文件B. 打开有格式顺序存取文件时,可以不写文件格式的选项FORM=FORMATTED C.
7、 打开有格式直接存取文件时,必须写上文件格式的选项FORM=FORMATTED D. 直接存取的有格式文件可以是标准输入(键盘)、标准输出(显示器)文件二、填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行)1.下列程序执行后,第一行是 (1) , 第二行是 (2) , 第三行是 (3) 。 PROGRAM main IMPLICIT NONE INTEGER,DIMENSION(1:3,1:3):a INTEGER:i,j,k,c a=RESHAPE(/36,34,15,18,20,9,6,6,3/),(/3,3/) DO i=3,2,-1 DO k=i-1,1,-1 c=a(k,
8、i)/a(i,i) DO j=i,1,-1 a(k,j)=a(k,j)-c*a(i,j) ENDDO ENDDO ENDDO PRINT (3I5.1),(a(i,j),j=1,3),i=1,3) END PROGRAM main 2 . 下列程序执行后,输出的第一行是 (4) ,第二行是 (5) 。RECURSIVE FUNCTION even_fact(n) RESULT(f) IMPLICIT NONE INTEGER:n,f f=2 IF(n=2) THEN f=even_fact(n-1)*(2*n) ENDIF END FUNCTION even_factPROGRAM main
9、IMPLICIT NONE INTEGER:even_fact PRINT (I7),even_fact(5), even_fact(7) END PROGRAM main3. 下列程序执行后,输出的第一行是 (6) ,第三行是 (7) 。 PROGRAM pointers IMPLICIT NONE REAL,POINTER:p1(:) REAL,ALLOCATABLE,TARGET:p2(:,:) ALLOCATE(p1(1:3) p1=3.6 WRITE(*,(1X,3F6.1)p1 ALLOCATE(p2(1:3,2) p2=2.4 p2(1:3:2,2)=6.8 WRITE(*,(1
10、X,3F6.1)p2 p1=p2(2:3,2) WRITE(*,(1X,3F6.1)p1 DEALLOCATE(p2) END PROGRAM pointers4. 下列程序执行后,输出的第一行是 (8) ,第三行是 (9) 。 PROGRAM array INTEGER:a(5)=9, b(3, 3)=7 INTEGER:i(3), j(2) i = (/5, 3, 2/) j = (/3, 1/) a(i) = 3 b(2,j) = 4 WRITE(*,(5I4)a WRITE(*,(3I4)b END PROGRAM array5. 下列程序执行后,输出的第一行是 (10) ,第二行是
11、(11) 。 MODULE data_of_bank TYPE costumer CHARACTER(len=10):date CHARACTER(len=8):name INTEGER:zhanghao REAL:credit,debit,balanceEND TYPE costumer END MODULE data_of_bank PROGRAM main USE data_of_bank TYPE(costumer),DIMENSION(3):kehu OPEN(1,FILE=bank) DO i=1,3 READ(1,*)kehu(i) ENDDO DO i=1,3 IF(kehu(
12、i).name=李森林) THEN PRINT(A,2X,A,2X,F9.2,(余额),kehu(i).date,kehu(i).name,kehu(i).balance ELSEIF(kehu(i).zhanghao=30517196) THEN PRINT (A,2X,A,2X,F9.2,(余额),kehu(i).date,kehu(i).name,kehu(i).balance ENDIF ENDDO END PROGRAM main文件bank中的内容是:2003-04-12 张国栋 30517165 200.43 0.00 2500.572003-07-18 李森林 30517178
13、 0.00 360.00 3530.782003-10-05 王凯庆 30517196 540.00 0.00 7630.456. 下列程序执行后,输出的第一行是 (12) ,第三行是 (13) 。 PROGRAM loop IMPLICIT NONE INTEGER:i,jloop1: DO i = 1, 3 IF (i2) EXIT loop1 WRITE(*,(A,I2)i=,iloop2: DO j = 1, 3 IF (j2) CYCLE loop2 IF (i=2 .and. j2) EXIT loop2 WRITE (*,(A,I2) j=,j ENDDO loop2 ENDDO
14、 loop1 END PROGRAM loop7. 下列程序执行后,输出的第一行是 (14) ,第二行是 (15) 。 PROGRAM main IMPLICIT NONE CHARACTER(len=5):x,y CHARACTER(len=2):z x=ABCDE; y=x; z=y(:2) y(:2)=y(4:); y(4:)=z PRINT *,x/z PRINT *,z/y END PROGRAM main 8. 利用黄金分割比例0.618,在指定的区间内逐步修正搜索点,寻找使函数达到最小(或极小)值的点。设指定区间为small,big,命delta=big-small,t1=sma
15、ll+0.618*delta,t2=big-0.618*delta。若f(t1)f(t2),修正t2,反之修正t1,直到deltaeps时搜索点修正结束,此时取函数值小的点为近似最小值点,相应的函数值为近似最小(或极小)值。本程序求三次多项式在区间0.0,2.0上的极小值。完善以下程序。 PROGRAM main IMPLICIT NONE REAL:smallnum,bignum,point,value,eps=1e-6 (16) WRITE(*,(A)输入相异的两个实数:0.0,2.0 READ(*,*)smallnum,bignum (17) WRITE(*,(minimum point is
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1