第2章FORTRAN90基础知识:程序单元的概念、语言元素、数据类型、变量名的命名规则第3章基本语句:类型说明语句、种别、p38页属性表、算术表达式、P40页函数表、输入输出(表控格式、有格式I,F)第4章选择结构程序设计:关系与逻辑表达式(关系运算符==与/=)(逻辑运算符P61)、混合运算符的优先级别(P62表4-2)、IF语句与IF结构的区别、CASE结构第5章循环结构程序设计:三种循环结构:不带循环变量的DO、带循环变量的DO、DOWhile结构、隐DO循环、P80页EXIT和CYCLE语句第6章程序单元和过程:函数子程序、子例子程序、接口块(P116必须使用接口块的情况)、虚实结合、虚过程、模块、递归、P136页其他部分(内部过程、类属过程、超载运算符、自定义运算符、超载赋值号)P142:进行超载赋值运算时,必须编写子例子程序形式;要实现超载运算符功能时,必须编成函数子程序形式。第7章数组:数组的基本概念(P154数组片段与数组构成器)、二维数组按列存放、数组函数、P165RESHAPE函数、数组形式(常、可调、假定形状、动态、假定大小)、数组做变元、P191页数组运算第8章字符型数据:字符常量、变量、子串、表达式、P208页字符函数第9章派生类型和指针:派生类型、指针(P229页注意问题)第10章数据文件:文件P260页各参数的含义、文件的操作(上机)82010秋二级FORTRAN笔试试卷选择题921、FORTRAN90标准规定有五个逻辑运算符,以下不属于规定但可以自定义的逻辑运算符是21。A..NOT.B..EQV.C..XOR.D..NEQV.1022、语句CHARACTER(len=15)::str说明str是长度为15的字符变量,下述赋值语句中正确的是22。A.str=abcd+26B.str=Iama//studentC.str=2*3+61D.str=AB1123、若有说明语句REAL(4)::x=123.4567,则下述表达式能将x的值舍入成123.46的是23。A.(x*100.0+0.5)/100.0B.(x/100.0+0.5)*100.0C.((x+0.5)/100.0)*100.0D.INT(x*100.0+0.5)/100.01224、有程序片断:INTEGER::a(2,2),b(5)a=RESHAPE((/2,4,6,8/),(/2,2/))b=(/RESHAPE(a,(/4/)),9/)那么数组b的内容是24。A.24689B.2229C.44689D.44449A数组的值:26481325、关于动态数组(假定数组名为a)的以下说法中,错误的是25。A.要说明标识符a为动态数组,必须在数组说明中标明ALLOCATABLE属性B.动态数组既可以作过程的哑元,也可以在调用过程时作实元C.动态数组a用执行ALLOCATE(a(10))语句获得内存空间D.动态数组a用执行DEALLOCATE(a)语句释放已占内存空间1426、含有目标变量和指针变量的程序片断如下:INTEGER,POINTER::p1,p2INTEGER,TARGET::x=10p1=x以下赋值语句中错误的是26。A.x=2*p1+1B.p1=2*x+1C.p2=2*p1+1D.p1=2*p1+11527、FORTRAN90提供的内部函数其名称分为通用名(即类属名)和专用名。以下说法中错误的是27。A.通用名无须考虑其函数值的类型,它决定于变元的类型,使用方便B.专用名必须让函数值的类型,和它的变元的类型相一致,否则出错C.在进行过程哑、实结合时只能用专用名,并用INTRINSIC属性加以说明D.在进行过程哑、实结合时只能用通用名,并用INTRINSIC属性加以说明1628、函数或子程序辅程序的哑元是数组,调用时实行数组哑、实结合。以下说法中错误的是28。A.实元(实参)可以是同类型的数组名或数组元素名B.实元数组与哑元(形参)数组必须有相同的维数C.实元数组(从结合点开始)的长度不能小于哑元数组长度D.若实元为数组名则从该数组的首元素开始,否则从该数组元素名指定的元素开始哑、实结合1729、以下关于内部函数过程说法中正确的是29。A.内部函数过程可以放在程序单位中的任何地方B.内部函数过程必须通过执行它的ENDFUNCTION语句才能完成引用C.内部函数过程不能递归定义D.内部函数过程可以作为函数引用而出现在该程序单位内任何表达式内1830、以下关于FORTRAN文件系统中操作的叙述中,错误的是30。A.执行BACKSPACE(UNIT=2,IOSTAT=i)操作,从文件的当前位置退至文件始端B.执行REWIND(UNIT=2,IOSTAT=i)操作,从文件的当前位置退至文件始端C.执行BACKSPACE(UNIT=2,IOSTAT=i)操作,从文件的当前位置后退一个记录D.执行ENDFILE(UNIT=2,IOSTAT=i)操作,在文件的当前位置写上文件结束符191、各种运算符及其优先级2、数组的函数3、程序结构,内部函数问题4、派生类型问题、指针变量5、变量的数据类型6、哑元7、文件操作…选择题注意:20填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行)21读程序写结果:1、数组元素的赋值(各种语句结构的嵌套、函数)2、递归程序的调用3、字符类型与字符子串的使用、字符函数4、派生类型的定义与使用5、自定义运算符或运算符超载6、类属过程、模块、内部过程7、指针赋值8、数组函数、程序的功能保证正确的方法:逐语句运行、画图表!22RECURSIVEFUNCTIONf(a,b)RESULT(s)IMPLICITNONEINTEGER::a,b,sIF(b==1)THENs=aELSEs=a+f(a,b-1)ENDIFPRINT*,a,bENDFUNCTIONf例1:填空题2、以下程序执行后,输出的第一行是,主程序中函数f(x,y)的值是。递归问题PROGRAMmainIMPLICITNONEINTEGER::x,y,fx=5;y=3PRINT*,f(x,y)ENDPROGRAMmain511523PROGRAMpointerIMPLICITNONEINTEGER,POINTER::a,b,cINTEGER,TARGET::x,y,zx=33;y=55;z=88a=x;b=y;c=zPRINT'(3I5)',a,b,ca=b+c;b=c+a;c=a+bPRINT'(3I5)',a,b,ca=b;b=c;c=aPRINT'(3I5)',a,b,cENDPROGRAMpointer例2:填空题4、以下程序执行后,输出的第二行是,第三行是。指针问题14323137423137423124PROGRAMmainIMPLICITNONEINTEGER::i,n,maxl(1),array(3,3)INTEGER,ALLOCATABLE::ar1(:)array=RESHAPE((/7,9,-1,-2,5,0,3,6,9/),(/3,3/))n=SIZE(SHAPE(array))PRINT'(A,I2)','n=',nALLOCATE(ar1(n))ar1=MAXLOC(array,MASK=array.LT.7)PRINT'(4I3)',(ar1(i),i=1,n)ENDPROGRAMmain例3:填空题5、以下程序执行后,输出的第一行是,第二行是。数组函数n=223Array的值:7-23956-109程序填空:1、变量类型的说明、初值;2、条件表达式的构造;3、循环的出口语句;4、派生类型的定义;5、函数或子例子程序的调用,模块引用;5、表达式的书写;7、mod与整数相除的搭配使用。保证正确的方法:弄清每个变量的含义,逐语句对照算法的中文描述!26FORTRAN上机考试的得分点(1)改错题:20分源程序存在:2分录入完毕:2分结果文件存在:2分结果正确:2分改正错误:4分×3错=12分(其中语法错1处,语义错2处)注意:结果文件MYF1.OUT文件。27(2)编程题:20分源程序存在:2分数据文件存在:1分数据文件正确:2分结果文件存在:2分结果文件正确:2分主辅结构正确:2分OPEN语句正确:1分读/写语句正确:1分循环语句正确:1分调用子程序正确:1分虚实结合:2分算法正确:3分二、编程题(20分)【题目】函数f(x)的展开式如下:将f(x)展开式的右端编写成外部过程。当级数通项的绝对值小于eps(eps=10-10,即1E-10)时停止计算。在同一行上,x用F6.4格式输出,计算所得的f(x)和用F8.6格式输出。计算所用的数据存放在文件MYF2.DAT中,从该文件输入的x值为:5.5887,1.5708,2.7635,3.2536,3.8633,4.3256,4.498821221)2(2,3,2,1,)2()1()22)(12(xunnnnnuunn122)2()!()!2()1(11)(nnnxnnxxf1x211)(xxf事实上若通项记为Un,则211x【要求】1.源程序必须存放在文件MYF2.F90中。2.建立数据文件MYF2.DAT,所需输入数据即从该文件中读出。3.程序运行结果存于文件MYF2.OUT中。4.数据文件的打开、使用、关闭均要求采用FORTRAN语言文件管理语句实现。【注意】本题完成后必须将MYF2.F90、MYF2.DAT、MYF2.OUT等文件拷贝到考试盘(盘符为T:)的根目录(不要自己创建文件夹)下供阅卷用。PROGRAMMainIMPLICITNONEREAL::x,f,y,zINTEGER::icharacter(len=50)::fmtfmt='(x=,F6.4,f(x)=,F8.6,g(x)=,F8.6)'OPEN(1,FILE='myf2.dat')OPEN(2,FILE='myf2.out')DOi=1,7READ(1,*)xy=f(x)z=1.0/SQRT(1+x**2)WRITE(2,fmt)x,y,z;WRITE(*,fmt)x,y,zENDDOENDPROGRAMMainFUNCTIONf(x)RESULT(s)IMPLICITNONEREAL(4)::n,x,xsqr_inver,sum,s,un,eps=1E-10xsqr_inver=1./(2*x)**2n=1un=-2*xsqr_inversum=0.0DOWHILE(ABS(un)=eps)sum=sum+unun=-un*((2*n+1)*(2*n+2)/(n+1)**2)*xsqr_invern=n+1ENDDOs=(1+sum)/xENDFUNCTIONf