河海大学春FORTRAN90资料.docx
《河海大学春FORTRAN90资料.docx》由会员分享,可在线阅读,更多相关《河海大学春FORTRAN90资料.docx(16页珍藏版)》请在冰豆网上搜索。
河海大学春FORTRAN90资料
2006年春季FORTRAN90笔试
一、选择题(用答题卡答题,答案依次填在21~30答题号内)
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.EXTERNAL:
:
sub1
B.REAL,EXTERNAL,TARGET:
:
func1
C.EXTERNALsin
D.REAL,EXTERNAL:
:
func1
23.定义了三维向量类型,又将+、-、*超载定义为向量的和、差、向量积。
以下说法中错误的是 23 。
A.+、-、*可对纯量(即数量)进行运算,又可对向量进行运算,它们是类属运算符
B.+、-、*既可以对变量、常数又可对数组进行运算,它们是类属运算符
C.+、-、*对数组的运算虽然不同于对向量或矩阵的运算,但它们仍然是类属运算符
D.+、-、*仅仅是程序中定义过的超载运算符,不能算是类属运算符
24.自定义一个称为逻辑异或运算的运算符.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.数组赋值语句a=b,不论何种情况都可以实现
D.过程内的可调维数组(例如REAL,DIMENSION(1:
n):
:
a)也可用数组构造符对其整体赋值
26.若数组说明语句为:
COMPLEX(kind=4),DIMENSION(3:
10,-1:
3):
:
a
则SIZE(a)等于26。
A.4B.160C.320D.40
27.以下选项所列的各程序块,全部属于独立的程序单位的是27。
A.主程序、内部函数过程、内部子程序过程、外部函数过程、系统提供的内部函数和子程序
B.主程序、接口块、外部函数过程、系统提供的内部函数和子程序
C.主程序、外部函数过程、外部子程序过程、模块、数据块辅程序
D.主程序、外部函数过程、系统提供的内部函数和子程序、内部子程序过程
28.若程序块内定义了一个结构型数据(为2×2矩阵):
TYPEmatrix
INTEGER,DIMENSION(2,2):
:
A
ENDTYPEmatrix
主程序中有说明语句:
TYPE(matrix),DIMENSION(10):
:
b
以下说法中正确的是 28 。
A.此语句正确,因为派生(即自定义)类型可以作为数组的类型
B.此语句不正确,因为派生类型本身就是数组,数组作为数组的类型逻辑上说不通
C.此语句不正确,应写成matrix,DIMENSION(10):
:
b才正确
D.此语句不正确,应写成matrix(TYPE),DIMENSION(10):
:
b才正确
29.以下关于递归过程的说法中,错误的是29。
A.使用直接递归过程可求解n!
问题,但使用间接递归过程却不能求解n!
问题
B.递归过程定义中常常隐含着循环执行机制
C.用递归算法解决的Hanoi塔(汉诺塔,又名梵塔)问题很难用非递归算法解决
D.一个可用递归过程也可用非递归过程解决的问题,采用后者为好,它节省计算机的资源
30.关于FORTRAN90文件系统的以下说法中,错误的是 30。
A.无格式顺序存取文件不能是标准输入(键盘)、标准输出(显示器)文件,只能是磁盘文件
B.打开有格式顺序存取文件时,可以不写文件格式的选项FORM='FORMATTED'
C.打开有格式直接存取文件时,必须写上文件格式的选项FORM='FORMATTED'
D.直接存取的有格式文件可以是标准输入(键盘)、标准输出(显示器)文件
二、填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行)
1. 下列程序执行后,第一行是
(1),第二行是
(2),第三行是(3)。
PROGRAMmain
IMPLICITNONE
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/))
DOi=3,2,-1
DOk=i-1,1,-1
c=a(k,i)/a(i,i)
DOj=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)
ENDPROGRAMmain
2.下列程序执行后,输出的第一行是(4),第二行是(5)。
RECURSIVEFUNCTIONeven_fact(n)RESULT(f)
IMPLICITNONE
INTEGER:
:
n,f
f=2
IF(n>=2)THEN
f=even_fact(n-1)*(2*n)
ENDIF
ENDFUNCTIONeven_fact
PROGRAMmain
IMPLICITNONE
INTEGER:
:
even_fact
PRINT'(I7)',even_fact(5),even_fact(7)
ENDPROGRAMmain
3.下列程序执行后,输出的第一行是(6),第三行是(7)。
PROGRAMpointers
IMPLICITNONE
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(*,'(1X,3F6.1)')p2
p1=>p2(2:
3,2)
WRITE(*,'(1X,3F6.1)')p1
DEALLOCATE(p2)
ENDPROGRAMpointers
4.下列程序执行后,输出的第一行是(8),第三行是(9)。
PROGRAMarray
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
ENDPROGRAMarray
5.下列程序执行后,输出的第一行是 (10),第二行是 (11)。
MODULEdata_of_bank
TYPEcostumer
CHARACTER(len=10):
:
date
CHARACTER(len=8):
:
name
INTEGER:
:
zhanghao
REAL:
:
credit,debit,balance
ENDTYPEcostumer
ENDMODULEdata_of_bank
PROGRAMmain
USEdata_of_bank
TYPE(costumer),DIMENSION(3):
:
kehu
OPEN(1,FILE='bank')
DOi=1,3
READ(1,*)kehu(i)
ENDDO
DOi=1,3
IF(kehu(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
ENDPROGRAMmain
文件bank中的内容是:
2003-04-12张国栋30517165200.430.002500.57
2003-07-18李森林305171780.00360.003530.78
2003-10-05王凯庆30517196540.000.007630.45
6.下列程序执行后,输出的第一行是 (12),第三行是 (13)。
PROGRAMloop
IMPLICITNONE
INTEGER:
:
i,j
loop1:
DOi=1,3
IF(i>2)EXITloop1
WRITE(*,'(A,I2)')'i=',i
loop2:
DOj=1,3
IF(j>2)CYCLEloop2
IF(i==2.and.j>2)EXITloop2
WRITE(*,'(A,I2)')'j=',j
ENDDOloop2
ENDDOloop1
ENDPROGRAMloop
7.下列程序执行后,输出的第一行是 (14),第二行是 (15)。
PROGRAMmain
IMPLICITNONE
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
ENDPROGRAMmain
8.利用黄金分割比例0.618,在指定的区间内逐步修正搜索点,寻找使函数达到最小(或极小)值的点。
设指定区间为[small,big],命delta=big-small,t1=small+0.618*delta,t2=big-0.618*delta。
若f(t1)>f(t2),修正t2,反之修正t1,直到delta本程序求三次多项式
在区间[0.0,2.0]上的极小值。
完善以下程序。
PROGRAMmain
IMPLICITNONE
REAL:
:
smallnum,bignum,point,value,eps=1e-6
(16)
WRITE(*,'(A)')"输入相异的两个实数:
0.0,2.0"
READ(*,*)smallnum,bignum
(17)
WRITE(*,'("minimumpointis"