河海大学春FORTRAN90.docx
- 文档编号:14889654
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:19
- 大小:38.77KB
河海大学春FORTRAN90.docx
《河海大学春FORTRAN90.docx》由会员分享,可在线阅读,更多相关《河海大学春FORTRAN90.docx(19页珍藏版)》请在冰点文库上搜索。
河海大学春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",F8.4,",value=",F9.6)')point,value ENDPROGRAMmain SUBROUTINEgolden_search(small,big,point,value,eps,f) REAL: : small,big,delta,point,value,eps,f,t1,t2 delta=big-small t1=small+0.618*delta;t2=big-0.618*delta DOWHILE(delta>eps) IF(f(t1)>f(t2))THEN big=t1;t1=t2 (18) t2=big-0.618*delta ELSE small=t2;t2=t1 delta=big-small t1=(19) ENDIF ENDDO IF((20))THEN point=t2;value=f(t2) ELSE point=t1;value=f(t1) ENDIF ENDSUBROUTINEgolden_search FUNCTIONg(x)RESULT(g_result) IMPLICITNONE REAL: : g_result,x g_result=(3.0*x-5.0)*x**2+2.0 ENDFUNCTIONg 9.将辗转相除法求两个整数的最大公约数的过程编写成递归过程。 求若干个整数的最大公约数,可先求出两个整数的最大公约数,再求出公约数和第三个数的最大公约数,如此等等,直到最后一个整数,即可求出若干个整数的最大公约数。 本程序求出k个整数的最大公约数。 完善以下程序。 PROGRAMmain IMPLICITNONE INTEGER,DIMENSION(20): : a INTEGER: : k,n,i READ(*,*)k,(a(i),i=1,k) CALLgys(a,k,n)! n是k个整数的最大公约数 WRITE(*,*)n ENDPROGRAMmain ! 在子程序gys中,n用来存放k个整数的最大公约数 SUBROUTINEgys(a,k,n) IMPLICITNONE INTEGER,DIMENSION(20): : a INTEGER: : k,i,m,n,gcd n=(21) DOi=3,k m=a(i) (22) ENDDO ENDSUBROUTINEgys ! 外部函数gcd求出两个整数的最大公约数 (23) gcd(m,n)RESULT(g) IMPLICITNONE INTEGER,INTENT(inout): : m,n INTEGER: : remainder,g remainder=MOD(m,n) IF((24))THEN g=n ELSE g=gcd((25)) ENDIF ENDFUNCTIONgcd 10.子程序encode(line)给电文line加密的方法如下: 采用两个密钥r1,r2(它们都是26个英文字母的任意排列,见以下程序)。 输入line。 若line中某单词的某字母是英文字母表的第n个字母,且若该字母在line内处于奇数位,则从r1中取第n个字母,否则从r2中取第n个字母替代之。 字母的大小写、空格和标点符号不变,例如电文LongLive翻译成VggrScbs。 完善以下程序。 PROGRAMmain IMPLICITNONE CHARACTER(len=80): : line,rst,encode INTEGER: : i READ(*,FMT='(A)')line rst=encode(line) WRITE(*,'(A)')rst ENDPROGRAMmain FUNCTIONencode(line)RESULT(rst) IMPLICITNONE CHARACTER(len=26),PARAMETER: : r1='qazwsxedcrfvtgbyhnujmikolp' CHARACTER(len=26),PARAMETER: : r2='poiuytrewqasdfghjklmnbvcxz' CHARACTER(len=*): : line,rst CHARACTER(len=1): : tmp INTEGER: : i,n,k=32! n为某字母在英文字母表中的序号,k为同一字母大小写的ASCII码值之差 rst='' DOi=(26) tmp=line(i: i) IF(tmp>='A'.AND.tmp<='Z')THEN n=(27) IF(MOD(i,2)/=0)THEN rst(i: i)=(28) ELSE rst(i: i)=CHAR(ICHAR(r2(n: n))-k) ENDIF ELSEIF(tmp>='a'.AND.tmp<='z')THEN n=(29) IF(MOD(i,2)/=0)THEN rst(i: i)=r1(n: n) ELSE rst(i: i)=r2(n: n) ENDIF ELSE rst(i: i)=(30) ENDIF ENDDO ENDFUNCTIONencode FORTRAN90笔试部分答案(2006年春) 21B22B23D24A25C 26D27C28A29A30D 1600 2420 31593 43840 5645120 63.63.63.6 76.82.46.8 893393 9777 102003-07-18李森林3530.78(余额) 112003-10-05王凯庆7630.45(余额) 12i=1 13j=2 14ABCDEAB 15ABDECAB 16REAL,EXTERNAL: : g 17CALLgolden_search(smallnum,bignum,point,value,eps,g) 18delta=big-small 19small+0.618*delta 20f(t1)>f(t2) 21gcd(a (1),a (2)) 22n=gcd(m,n) 23RECURSIVEFUNCTION 24remainder==0 25n,remainder 261,LEN_TRIM(line) 27ICHAR(tmp)-ICHAR('A')+1 28CHAR(ICHAR(r1(n: n))-k) 29ICHAR(tmp)-ICHAR('a')+1 30tmp FORTRAN90上机试卷(2006年春) 一、改错题(20分) 【题目】正整数n的所有不同因子(含1和n)之和记为 。 正整数m,n称为互为亲和数如果 , 同时成立。 显然,此条件等价于 。 以下程序试图找出介于40和3000之间的全部亲和数(个数很少)。 函数sum_of_factor用于求整数的不同因子之和。 主程序内数组sum_of_fact内存放介于40和3000之间整数的因子和。 含有错误的源程序如下: FUNCTIONsum_of_factor(n)RESULT(sum) IMPLICITNONE INTEGER: : sum,i,n,halfn sum=1+n DOi=2,n/2 IF(MOD(n,i)==0)sum=sum+i ENDDO ENDFUNCTIONsum_of_factor ! PROGRAMMain IMPLICITNONE INTEGER: : i,j,sigmai,sigmaj INTEGER,PARAMETER: : first=40,last=3000 INTEGER,DIMENSION(first: last): : sum_of_fact OPEN(1,FILE='myf1.out') DOi=first,last sum_of_fact(i)=sum_of_factor(i) ENDDO WRITE(1,'(A)')'IJSIGMAiSIGMAj' out: DOi=first,last-1 j=i+1 in: DO sigmai=sum_of_fact(i);sigmaj=sum_of_fact(j) IF(j<=last)THEN IF(sigmai==i+j.OR.sigmaj==i+j)THEN WRITE(1,'(4I6)')i,j,sigmai,sigmaj EXITin ELSE j=j+1 ENDIF ELSE CYCLEin ENDIF ENDDOin ENDDOout ENDPROGRAMMain 【要求】1.必须将上述源程序录入到文件MYF1.F90中,然后根据题目的要求以及程序中前后语句的逻辑关系改正程序中的错误。 2.改错时可增加或删除说明语句,调换语句顺序,不允许增加或删除任何可执行语句。 3.改正后的程序和运行结果分别用MYF1.F90和MYF1.OUT为文件名存入考试盘。 【注意】本题完成后必须将MYF1.F90、MYF1.OUT、MYF1.EXE拷贝到T盘的根目录下供阅卷用。 二、编程题(20分) 【题目】n次Legendre多项式函数 将上式右端编写成外部过程。 将求和公式的系数记为 ,显然 ,一般地有 …… 。 在同一行上,n用I3,x用F6.3,计算所得的 用F12.4格式输出。 计算所用的数据存放在文件MYF2.DAT中,从该文件输入的n,x的值分别为: 3,2.000;2,3.000;3,-4.000;5,0.258;6,1.333;7,-2.854;4,-3.907 【要求】1.源程序必须存放在文件MYF2.F90中。 2.建立数据文件MYF2.DAT,所需输入数据即从该文件中读出。 3.程序运行结果存于文件MYF2.OUT中。 4.数据文件的打开、使用、关闭均要求采用FORTRAN语言文件管理语句实现。 【注意】本题完成后必须将MYF2.F90、MYF2.DAT、MYF2.OUT、MYF2.EXE等文件拷贝到T盘的根目录下供阅卷用。 FORTRAN90上机试卷参考答案(试卷代号F01) 一、改错题(20分) FUNCTIONsum_of_factor(n)RESULT(sum) IMPLICITNONE INTEGER: : sum,i,n,halfn sum=1+n DOi=2,n/2 IF(MOD(n,i)==0)sum=sum+i ENDDO ENDFUNCTIONsum_of_factor ! PROGRAMMain IMPLICITNONE INTEGER: : i,j,sigmai,sigmaj/*加上外部函数的说明,sum_of_factor*/ INTEGER,PARAMETER: : first=40,last=3000 INTEGER,DIMENSION(first: last): : sum_of_fact OPEN(1,FILE='myf1.out') DOi=first,last sum_of_fact(i)=sum_of_factor
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 FORTRAN90