文档库 最新最全的文档下载
当前位置:文档库 › Fortran模拟试卷1-8

Fortran模拟试卷1-8

Fortran模拟试卷1-8
Fortran模拟试卷1-8

FORTRAN90模拟测验一(笔试部分)

一.选择题(从4个可选答案中选择一个正确答案添入空白处)

1.FORTRAN 90规定程序中名称的长度不能超过个字符。

A.8 B.15 C.31 D.63

2.关于FORTRAN 90程序单元,以下四种说法中正确的是。

A.一个FORTRAN 90程序由多个程序单元组成,其中有一个且只能有一个主程序单元

B.一个FORTRAN 90程序由多个程序单元组成,其中有一个且只能有一个模块单元

C.一个FORTRAN 90程序允许有多个程序单元,但每类程序单元只能有一个

D.一个FORTRAN 90程序允许有多个程序单元,但主程序单元和模块单元只能有一个

3.FORTRAN 90程序中允许使用的三个通用标志符是。

A.!% & B.@ , ; C.! ; & D.; & *

4. 下列中,所指的FORTRAN 90表达式都是正确的。

①∣A*x+B*y+C*z∣② b*b+4*a*c

③.NOT. .TRUE. .AND. .FALSE. ④…A?<= ch <= …Z?

⑤ X>100 = = .TRUE. ⑥ SQRT(A2+B2)

⑦π*R**2 ⑧…HAPPY ?+…NEW ?+…YEAR.?

A. ①②⑤B.②③④⑧C.②③⑤D.②⑤⑥⑦

5. FORTRAN 90规定,变量类型声明从高到低的优先顺序是。

A.隐含约定(I-N规则)、IMPLICIT声明、类型声明

B.类型声明、隐含约定(I-N规则)、IMPLICIT声明

C.类型声明、IMPLICIT声明、隐含约定(I-N规则)

D.IMPLICIT声明、类型声明、隐含约定(I-N规则)

6.数组声明语句为:INTEGER,DIMENSION(-5:-1,-3:3,11:15) ::num 数组元素num(-2,1,13)是存储结构中第个元素。

A.70 B.85 C.90 D.94

7.类型声明语句为:INTEGER(2) I 数据输出语句为:PRINT *,I

变量I中数据输出域宽是字符。

A.4 B.6 C.9 D.11

8.类型声明语句为:CHARACTER*4 string

CHARACTER*14,PARAMETER :: line=?happy new year?

下列语句中不正确的是。

A. string=line(11:14)

B. string=?year?

C.string=?happy birthday? D. line=line//?.?

9. 数组声明语句为:INTEGER num(9)=(/1,2,3,4,5,6,7,8,9/),mm(5)

下列语句中不正确的是。

A. mm=num(5:9)

B. mm=num(5:) C.mm=num(:5) D. mm=num(:)

10.下列关于子程序的有关说法中,不正确的是。

A.对于无参函数子程序,调用时函数名后括号可取消

B.对于无参子例行程序,调用时子例行程序名后的括号可取消

C.对于有参子程序,形式参数可以是子程序名

D.对于有参子程序,形式参数可以是星号“*”

11.下列关于接口块的说法中,正确的是。

A.在程序单元中,如果要使用外部子程序,则必须用接口块进行声明

B.在程序单元中,如果要使用模块子程序,则必须用接口块进行声明

C.在程序单元中,对于形式参数为普通变量的外部子例行程序不必用接口块进行声明

D.在程序单元中,对于形式参数为数组片段的外部子例行程序不必用接口块进行声明

12.下列关于外部子程序的说法中,正确的是。

A.外部子程序允许单独放在一个源程序文件中,并与主程序分别编译

B.外部子程序允许单独放在一个源程序文件中,并与主程序单元一起编译

C.外部子程序可与主程序单元放在一个源程序文件中,但必须放在PROGRAM语句之前

D.外部子程序可与主程序单元放在一个源程序文件中,但必须放在END语句之后

13.下列关于模块的说法中,正确的是。

A.模块内声明的私有变量,不允许主程序单元存取,但允许外部子程序单元存取

B.模块内声明的私有变量,允许主程序单元存取,但不允许外部子程序单元存取

C.模块内声明的公有变量,允许除模块单元以外的其它任何程序单元存取

D.模块内声明的公有变量,允许所有程序单元存取

14.指针声明语句为:INTEGER,POINTER ::P1,P2

目标变量声明语句为:INTEGER,TARGET ::I=20,J=30

下列语句执行后,I、J的值分别为。

P1=>I; P2=>J; P1=>P2; P2=>P1

A. 20、20

B. 20、30

C. 30、20

D. 30、30

15.下列语句函数声明中,正确的是。

A.FUN1(I,I)=5*I-10*I**2 B. FUN2(MAT(5),A)=5*A+MAT(5)

C. FUN3(X,Y,5.0)=X**2+Y**2+5.0**2

D. FUN4(X,Y)=SQRT(X**2+Y**2+5.0**2) 二.填空题(在空白处添入正确内容)

1.下列程序执行后,num(1,3)= (1) ,num(2,3)= (2) ,num(3,1)= (3)。 INTEGER(1),DIMENSION(1:3,1:3)::num=0

INTEGER(1)::i=1,j=2,k

num(i,j)= 1

DO k= 2,9

i= i-1 ; j= j-1

IF(I<1.AND.j<1)THEN

i=i+2; j=j+1

ELSEIF(i<1.AND.j>=1)THEN

i=3

ELSEIF(i>=1.AND.j<1)THEN

j=3

ELSEIF(i<=3.AND.j<=3)THEN

IF(num(i,j )/= 0)THEN

i=i+2; j=j+1

ENDIF

ENDIF

num(i,j)=k

ENDDO

PRINT '(6X,3I3)',((num(i,j),j= 1,3),i= 1,3)

END

2. 下列程序执行后,输出的第一行是(4),第二行是(5)。

PROGRAM main

INTERFACE

RECURSIVE FUNCTION gcd(m,n) RESULT(g_result)

INTEGER::m,n,g_result

END FUNCTION gcd

END INTERFACE

WRITE(* ,FMT=?(1X,”VALUE=”,I4)?) gcd(14,21),gcd(21,18)

END PROGRAM main

RECURSIVE FUNCTION gcd(m,n) RESULT(g_result)

INTEGER::m,n,g_result

IF (n==0) THEN

g_result=m

ELSE

g_result=gcd(n,mod(m,n))

ENDIF

END FUNCTION gcd

3. 下列程序执行后,输出的第一行是(6),第二行是(7)。

PROGRAM main

INTEGER(2),DIMENSION(:),ALLOCATABLE::a,b

INTEGER(2),DIMENSION(:,:),ALLOCATABLE::x,y,z

LOGICAL,DIMENSION(:),ALLOCATABLE::log

INTEGER(4)::c,i,j

ALLOCATE(a(1:9),b(1:9),log(1:9))

a=(/1,2,3,4,5,4,5,6,7,8,9/); b= (/7,30,20,11,25,16,9,12,5/)

log=(/.TRUE.,.FALSE.,.TRUE.,.TRUE.,(.FALSE.,i=5,9)/)

c=SUM(a,1,log)*MAXVAL(b)

WRITE(* ,FMT='(I5)') c

ALLOCATE(x(1:3,1:2),y(1:2,1:3),z(1:3,1:3))

x=RESHAPE((/1,2,1,1,2,1/),(/3,2/)); y=RESHAPE((/2,1,2,2,1,2/),(/2,3/)) z= MATMUL(x,TRANSPOSE(y))

WRITE(* ,FMT='(3I4)')((z(i,j ),j =1,3),i=1,3)

END

4. 下列程序执行后,输出的第一行是(8),第二行是(9)。

PROGRAM main

COMPLEX(4)::a(2)=(/(3.0,2.0),(4.0,1.0)/),z

z=f(a(1),a(2)); z=f(a(2),a(1))

WRITE(* ,FMT='(1X,"(",F5.1,",",F5.1,")")')a(1)+a(2),z

CONTAINS

FUNCTION F(x,y) RESULT(f_result)

COMPLEX(4)::x,y,f_result

x=x+2*a(1); y=y-2*a(2); f_result=x-y

END FUNCTION F

END PROGRAM main

5. 下列程序执行后,输出的第一行是(10),第二行是(11)。 PROGRAM main

INTEGER(2),POINTER::p1,p2

INTEGER(2),TARGET::a=4,b=5,c

p1=>a; p2=>b ;c=2*p1+3*p2

WRITE(* ,FMT='(I4)') c

CALL sp(p1,p2)

c=2*p1+3*p2; WRITE(* ,FMT='(I4)') c

END PROGRAM main

SUBROUTINE sp(p1,p2)

INTEGER(2),POINTER::p1,p2,p3

p3=>p1; p1=>p2; p2=>p3

END SUBROUTINE sp

6. 下列程序执行后,输出的第一行是(12),第二行是(13)。 FUNCTION s_sum(str1,str2) RESULT(s_result)

CHARACTER(len=* ),INTENT(in)::str1,str2

INTEGER ::s_result,i1,j1,i2,j2

i1=1 ; j1=len(str1)

DO WHILE (str1(i1:i1)==' ')

i1=i1+1

ENDDO

DO WHILE (str1(j1:j1)==' ')

j1=j1-1

ENDDO

i2=1; j2=len(str2)

DO WHILE (str2(i2:i2)==' ')

i2=i2+1

ENDDO

DO WHILE (str2(j2:j2)==' ')

j2=j2-1

ENDDO

s_result=j1-i1+1+j2-i2+1

END FUNCTION s_sum

PROGRAM Main

INTERFACE OPERATOR(+)

FUNCTION s_sum(str1,str2) RESULT(s_result)

CHARACTER(len=*),INTENT(in)::str1,str2

INTEGER ::s_result

END FUNCTION s_sum

END INTERFACE

CHARACTER(len=80)::string1,string2

INTEGER::m=20,mresult,sresult

string1=' I am a teacher. '; string2='He is a student. ' sresult=string1+string2; mresult= sresult+m

print*,sresult; print*,mresult

END PROGRAM Main

7. 下列程序执行后,输出的第一行是 (14) ,第二行是 (15) 。 MODULE student_record TYPE student

CHARACTER(len=20)::name INTEGER(2)::score(2) END TYPE student

END MODULE student_record PROGRAM Main

USE student_record

TYPE(student)::students(2),s REAL a1,a2

https://www.wendangku.net/doc/6810188261.html,=…Wang gang ?; s.score(1)=70; s.score(2)=80 students(1)=s

https://www.wendangku.net/doc/6810188261.html,=…Zhao wei ?; s.score(1)=50; s.score(2)=90 students(2)=s

a1= (students(1).score(1)+students(1).score(2))/2 a2= (students(2).score(1)+students(2).score(2))/2 PRINT* ,?a1=?,a1 PRINT* ,?a2=?,a2 END PROGRAM main

8. 为了提高精度,采用如下迭代公式求解非线性方程f(x)的近似根。 迭代公式:

其中:

当|f(x n+1)|<10-7

时,则可取此x n+1为近似根。使用语句函数定义g(x , y)函数。x1、x2、x3为

给定的三个初始近似根,从键盘输入。本程序求f(x)=e x

+3x-2的根。 PROGRAM Main INTERFACE

FUNCTION f(x) RESULT(g_result) REAL(4)::x,g_result (16) END INTERFACE

PARAMETER(eps=1E-7)

REAL(4)::x1,x2,x3,root,y READ* , x1,x2,x3 y=root(x1,x2,x3,f)

WRITE(* ,FMT= …(1X,”root=”,F9.6)?) y

END PROGRAM Main

FUNCTION root(x1,x2,x3,f) RESULT(root_result)

y

x )y (f )x (f )y ,x (g --=

h

)x (f x x )x (f x x n 2

n n n n 1n --?-=-+)

x ,x (g )

x ,x (g )x (f h 2n 1n 1n n 2n ----?=

g(x,y)= (17)

REAL(4)::x1,x2,x3,root_result

h=f(x1)*g(x3,x2)/g(x2,x1)

xnew=x3-f(x3)*(x3-x1)/(f(x3)-h)

DO WHILE ( (18) )

x1=x2;x2=x3;x3= (19)

h=f(x1)*g(x3,x2)/g(x2,x1)

xnew=x3-f(x3)*(x3-x1)/(f(x3)-h)

ENDDO

(20)

END FUNCTION Root

FUNCTION f(x) RESULT(f_result)

REAL(4)::x,f_result

f_result=EXP(x)+3*x-2

END FUNCTION f

9. 有M只猴子要选猴王,选举办法为:所有猴子排成一列,从头到尾1、2、3、……报数,所报数

能被N整除者留下,其余退出。留下者再从头到尾报数,所报数能被N整除者留下,其余退出。

按上述规则反复报数,直到留下不足N只猴子时,则此时报1者为猴王。选举猴王程序如下:PROGRAM main

EXTERNAL king

INTEGER,PARAMETER :: max=50

INTEGER(2) king,num(max),m,n

READ *,m,n

DO i=1,m

(21)

ENDDO

PRINT "(1X,'猴王为编号是',I2,' 的猴子。')",king( (22) )

END PROGRAM main

FUNCTION king(k,m,n)

INTEGER(2) king,k(m),k1(m),m1,n,p

m1=m

DO WHILE ( (23) )

P=0

DO i=1,m1

IF ( (24) ) THEN

p=p+1; k1(p)=k(i)

ENDIF

ENDDO

DO I=1,p

k(I)=k1(I)

ENDDO

(25)

ENDDO

m=m1; king=k(1)

END FUNCTION king

10.数据文件”score.dat”中有某班学生成绩数据,每个学生的数据有:学号、姓名、成绩。学号为

字符串,域宽7位,姓名为字符串,域宽8位,成绩为整数,域宽为3位,数据之间紧密排列,一行一个学生记录。从数据文件中读取数据,统计参加补考的学生人数,并从屏幕上输出补考学生人数及名单。使用学生信息派生类型studen_record,有三个成员:学号、姓名、成绩。定义班级结构体数组class。内部子例行程序统计补考人数并输出有关信息。模块student_data 定义派生类型、结构体数组及内部子程序。

MODULE student_data

TYPE student_record

CHARACTER :: number*7,name*8

INTEGER :: score

(26)

PRIVATE max,class,input

PARAMETER(max=50)

(27) class(max)

INTEGER :: n=0

CONTAINS

SUBROUTINE input()

OPEN(1,FILE=?score.dat?)

DO WHILE (.NOT. EOF(1))

(28)

READ (1,"(A,A,I3)") class(n).number,class(n).name,class(n).score

ENDDO

END SUBROUTINE input

SUBROUTINE search()

INTEGER :: m=0

CALL input

DO i=1,n

IF ( (29) ) THEN

m=m+1

PRINT “(1X,A,2X,A,2X,I3)”, class(i).number,class(i).name,&

& class(I).score

ENDIF

ENDDO

PRINT*,'本班共有学生',n,' 人'

PRINT*,?补考人数有:?, m,?人?

END SUBROUTINE search

END MODULE student_data

PROGRAM main

(30)

CALL search

END PROGRAM main

FORTRAN90模拟测验一(上机部分)

一.改错题

【题目】用一个一维整型数组表示一个整数集合,数组元素值为集合元素值,集合大小为最多50个元素,集合元素个数不定,集合元素取值范围为[-100,100]。子例行程序intersect求两集合的交集。已知两集合元素值内部生成,要考虑集合中可能出现相同元素,计算结果输出到数据文件myf1.out中。

如:{15,20,25,15,28,30,33}∩{18,20,20,28,32}={20,28}

含错误的源程序如下:

PROGRAM main

IMPLICIT NONE

INTEGER(1) ::max=50

INTEGER(1),DIMENSION(max) :: set1,set2,set3

INTEGER(1) :: m1=7

DATA set1\15,20,25,15,28,30,33\

DATA set2\18,20,20,28,32\

intersect(set1,set2,set3)

OPEN(1,FILE='myf1.out')

PRINT "(1X,'{',(I3,:','\))", (set3(i),i=1,m3)

PRINT*,'}'

CONTAINS

SUBROUTINE intersect(set1,set2,set3,m1,m2,m3)

INTEGER(1) m1,m2,m3,i,j,k

INTEGER(1) set1(m1),set2(m2),set3(max)

DO i=1,m1

m3=0

DO j=1,m2

IF (set1(i)) THEN

DO k=1,m3

IF (set2(i)==set3(k)) EXIT

IF (k>m2) THEN

set3(m2)=set1(i)

m3=m3+1

ENDIF

ENDDO

ENDIF

ENDDO

ENDDO

END SUBROUTINE intersect

END PROGRAM main

【要求】1.必须将上述源程序录入到文件myf1.f90中,然后根据题目的要求以及程序中语句的逻辑关系改正程序中的错误。

2.改错时除增加说明语句和调换语句顺序外,不允许增加和删除任何语句。

3.改正后程序和运行结果分别用myf1.f90和myf1.out为文件名存入考试盘。

【注意】本题完成后必须将myf1.f90、myf1.out 和myf1.exe 拷贝到考试盘中。

二.编程题

【题目】已知函数f(x)的级数式为:

其中:(2n-1)!!=1×3×5×7×……×(2n-1) (2n)!!=2×4×6×8×……×(2n) 函数g(x)的解析式为:

x 的取值范围为:-1

在主程序中输入四组x 和精度eps 数据如下:

①0.452,1E-8 ②-0.853,1E-9 ③0.159,1E-10 ④-0.015,1E-7 当满足以下关系时认为f(x)与g(x)相等:

级数计算通过内部函数子程序完成,当级数通项绝对值小于eps 时,停止计算。 按格式F8.4输出x 、f(x)和g(x),及判断结果(相等,不相等)。

【要求】1.按要求编写程序,并将源程序录入到文件myf2.f90中。

2.建立数据文件myf2.dat ,将四组输入数据在程序运行前输入到该文件中,程序从该文件中读取数据。

3.将程序运行结果存放于myf2.out 文件中。

4.数据文件的打开、读写、关闭均要求用FORTRAN 90语言文件操作语句实现。

【注意】本题完成后必须将myf2.f90、myf2.dat 、myf2.out 和myf2.exe 拷贝到考试盘中。

-+=∞

=1n n

x

!

)!n 2(!)!1n 2(1)x (f x

11)x (g -=

7

10)

x (g )x (f )

x (g )x (f -<+-

FORTRAN90模拟测验二(笔试部分)

一、选择题(从4个可选答案中选择一个正确答案添入空白处)

1.关于FORTRAN90源程序行的续行,以下四种说法中错误的是(21)。

A.标准规定一条语句最多可有39个续行

B.非注释行末出现续行符&,则下一行为续行

C.续行符&在注释行中无效,即注释行无续行

D.在语句中单词符号外续行,接续行首字符必须是续行符&

2.FORTRAN90类型说明中关于种类(或称种别)参数,例如REAL(KIND=n),错误的说法是(22)。 A.n根据需要可以取任何整数值

B.n描述数据能占用的内存大小(数值类型还描述精度或可表示范围的大小)

C.整数n的取值受到限制,不能随意

D.整数n能取什么值由编译器实现时决定

3.对于CYCLE语句的下述说法中错误的是(23)。

A.CYCLE只可在循环结构内使用 B. CYCLE终止执行当前循环体

C.CYCLE终止执行当前循环体内位于它之后的语句,但不终止执行当前循环体

D.内循环名为in:,外循环名为out:,则循环in:内的CYCLE out将终止执行内循环in:4.有关过程定义中变元的INTENT(意图)属性,下列说法中错误的是(24)。

A.只有哑元表内的变元才具有INTENT属性

B.哑元表内的不论何种变元均可具有INTENT属性

C.具有INTENT(in)属性的变元,在过程内不得赋值

D.具有INTENT(out)属性的变元,其相应实元不能是表达式

5.关于FORTRAN90的派生(即自定义)类型,以下四种说法中错误的是(25)。

A.派生类型定义从“TYPE 派生类型名”开始到“END TYPE'’结束

B.派生类型名不得和系统内定类型同名,在同一程序单位内也不得重复定义

C.派生类型的分量(或称成员)不能是派生类型名,即派生类型不允许嵌套定义

D.引用派生类型变量的成员可用“%”号或“.”号,例如abc%a,或abc.a均可

6.若数组说明语句为:REAL,DIMENSION(-2:2,-1:1,-3:3)::a则数组元素a(2,1,0)是

第(26)个元素。

A.59 B.60 C.6l D.62

7.关于FORTRAN90的CASE结构,以下说法中正确的是(27)。

A.在非嵌套的CASE结构中根据需要可随意使用CASE DEFAULT语句

B.CASE结构的情况表达式的类型可以是整型、实型、复型、逻辑型、字符型

C.CASE结构的情况表达式和情况选择器的取值类型必须相同

D.CASE结构的不同情况选择器取值可以重复

8.FORTRAN90的数组片断(即数组的一部分)可用下标三元组描述。若有数组说明如下

REAL,DIMENSION(1:10,1:6,1:4)::b 则数组片断b(8:11:2:5,2:3:1) (28)。

A.是形状为(2,2)、秩为2的二维数组结构

B.是形状为(2,2,2)、秩为3的三维数组结构

C.是秩为1的一维数组结构,即向量

D.是形状为(4,4,2)、秩为3的三维数组结构

9. 以下关于模块引用的USE语句的说法中,正确的是 (29) 。

A. USE语句可以出现在程序单位的任何位置

B.用USE语句访问的实体不能重新命名

C.带ONLY选项的USE语句可访问模块中的全部实体

D. 一个程序单位内可以有多个USE语句

10. 以下关于FORTRAN90过程调用时变元哑实结合的说法中,不确切的是 (30) 。

A.哑元表和实元表内的变元必须无条件地在类型、个数、顺序上保持一致

B.一般来说,哑元表和实元表内的变元应在类型、个数、顺序上保持一致

C.具有OPTIONAL属性的哑元,其相应的实元可不出现在实元表内,故哑、实元个数允许不一致

D. 若过程为类属过程,则哑、实元类型允许不—致

二. 填空题(在空白处填入正确内容)

1.下列程序执行后,array(4,1)= (1) ,array(1,3)= (2) ,array(2,3)= (3)

PROGRAM rotate

INTEGER(1),DIMENSION(1:4,1:4)::array=0

INTEGER(1)::i=l,j=l,na=1,nc=4,k

DO k=1,16

array(i,j)=k

IF(i

i=i+l

ELSEIF(i==nc .AND.j

j=j+l

ELSEIF(i>na .AND.j==nc)THEN

i=i-1

ELSEIF(i==na .AND.j>na+1)THEN

j=j-1

IF(i==na .AND.j==na+1)THEN

nc=nc-1;na=na+1

ENDIF

ENDIF

ENDDO

PRINT …(4X,4I3)?,((array(i,j),j=1,4),i=l,4)

END PROGRAM rotate

2.下列程序执行后,输出的第一行是 (4) ,第二行是 (5) 。

PROGRAM main

INTEGER::n,k

n=5; k=f(n)

PRINT *,k

n=6; k=f(n)

PRINT *,k

CONTAINS

RECURSIVE FUNCTION f(n) RESULT(f_result)

INTEGER,INTENT(in)::n

INTEGER::f_result

IF(n= =1 .0R. n==2) THEN

f_result=1

ELSE

f_result=n*f(n-1)*f(n-2)

END IF

f_result=f_result —1

END FUNCTION f

END PROGRAM main

3.下列程序执行后,输出的第一行是 (6) ,第三行是 (7) 。

FUNCTION min_array(array1,array2) RESULT(array)

INTEGER,DIMENSION(:,:),INTENT(in) :: array1,array2

INTEGER,DIMENSION(1:SIZE(array1,1),1:SIZE(array1,2))::array

array=MIN(array1,array2)

END FUNCTION min_array

PROGRAM main

INTERFACE

FUNCTION min_array(array1,array2) RESULT(array)

INTEGER,DIMENSION(:,:),INTENT(in):: array1,array2

INTEGER,DIMENSION(1:SIZE(array1,1),1:SIZE(array1,2)):: array

END FUNCTION min_array

END INTERFACE

INTEGER,DIMENSION(1:3,1:4):: a1,a2,a

INTEGER:: d, I

a1=RESHAPE((/1,3,5,7,9,11,2,4,6,8,10,12/),(/3,4/))

a2=RESHAPE((/2,4,6,8,10,12,1,3,5,7,9,11/),(/3,4/))

a=min_array(a1,a2)

WRITE(*,'(1X,4I4)') ((a(I,d),d=1,4),I=1,3)

END PROGRAM main

4.下列程序执行后,输出的第一行是____(8)_______,第三行是_____(9)___________。 PROGRAM example

INTEGER,DIMENSION(1:4) :: a=20, b=15

LOGICAL,DIMENSION(1:4) :: log=.FALSE.

INTEGER:: reduce=8,increse=2

a(1:4:2)=25

b(2:4:2)=10

WHERE(a>20)a=a-reduce

WHERE(b<15)

b=b+increse

a=a-5

ELSEWHERE

log=.TRUE.

END WHERE

WRITE(*,'(1X,4I6)')a,b

WRITE(*,'(1X,4L6)') log

END PROGRAM example

5.下列程序执行后,输出的第一行是_____(10)______,第二行是_____(11)_______。

PROGRAM pointer

INTEGER,POINTER::arrow(:)

INTEGER,ALLOCATABLE,TARGET::bullseye(:,:)

ALLOCATE(arrow(1:4))

Arrow=5

WRITE(*,‘(1x,414)’)arrow

ALLOCATE(bullseye(1:5,3))

bullseye=1

bullseye(1:5:2,2)=8

arrow=bullseye(2:5,2)

WRITE(*,‘(1x,414)’) arrow

DEALLOCATE(arrow,bullseye)

END PROGRAM pointer

6.下列程序执行后,输出的第一行是____(12)______,第四行是_____(13)______。

PROGRAM character_dummy_actual

CHARACTER(len=3),DIMENSION(1:2,1:4) :: letter

letter=RESHAPE((/'abc','def','ghi','jkl','mno','pqr','stu','vwx'/),(/2,4/)) CALL test(letter)

END program character_dummy_actual

SUBROUTINE test(sub_letter)

CHARACTER(len=6),DIMENSION(1:4):: sub_letter

INTEGER(1):: i

DO i=1,4

WRITE(*,'(1X,"sub_letter(",I1,"):",A)') i,sub_letter(i)

ENDDO

END SUBROUTINE test

7.下列程序执行后,输出的第一行是____(14)______,第二行是____(15)_____。

MODULE abc

TYPE pair

CHARACTER(len=15) ::name

INTEGER::age,phone_number

END TYPE pair

END MODULE abc

PROGRAM main

USE abc

TYPE(pair)::point

point=pair(…Micheal Jones?,32,83365620)

CALL jones(point)

WRITE(*,?(1X,A,I4,I10)?) point

END PROGRAM main

SUBROUTINE jones(p)

USE abc

TYPE(pair)::p

WRITE(*,?(1X,A,I4,I10)?) p

https://www.wendangku.net/doc/6810188261.html,=?Jhon Williams?

p.age=35

p.phone_number=83597735

END SUBROUTINE jones

8.插入排序(在输入过程中完成排序)。以任意次序读入20个数,先将第一个数放入数组a的第

一个元素中,以后读入的数应与已存入数组中的数进行比较,确定它在从小到大的排列中应放置的位置。将该位置及其后面的元素都向后挪一个位置,把新读入的数据填入空出的位置中,这样在数组a中的数始终保持从小到大排列。20个数据处理完后输出数组a。变量num描述第几次插入,pos描述插入数组的第几个元素,num的初值直接影响插入的位置pos。请完善以下程序实现所要求的功能。

PROGRAM main

INTEGER,PARAMETER::n=20

REAL(4),DIMENSION(n)::a

REAL(4)::x

INTEGER(1)::i,num

num= (16)______

D0 i=l,n

READ(*,*) x

CALL insert(x,a,num)

ENDDO

WRITE(*,?(1X,5F7.2)?) (a(i),i=l,n)

CONTAINS

SUBROUTINE insert(x,a,num)

IMPLICIT NONE

REAL(4),DIMENSION(:) ::a

REAL(4)::x

INTEGER(1)::num,i,pos

LOGICAL::search

pos=l

search=.TRUE.

!下列循环找出该数在数组中应处的位置

D0 WHILE( (17) )

IF(x

search=.FALSE.

ELSE

(18)____

ENDIF

ENDDO

!下列循环把该位置及以后的数往后移

D0 i=num,pos,-l

(19)_____

ENDDO

a(pos)=x

(20)

END SUBROUTINE insert

END PROGRAM main

9.下列程序用来寻找输入字符串string中互不相同的字符,并按升序存放到字符串stringl中。

寻找互不相同字符的方法是:逐个取出string中的字符,用二分法查找该字符在stringl中的插入位置,若该字符在stringl中出现,就不插入,否则插入到stringl中并使stringl始终保持升序。string,stringl的实际长度可能小于80。请完善以下程序以实现所要求的功能。

PROGRAM find_different_character

CHARACTER(len=80)::string,stringl

CHARACTER(1en=1)::ch

INTEGER(1)::n,k,left,right.middle,i

WRITE(*,*) …Enter a string:?

READ(*,?(A)?) string

n=1

stringl(1:1)=string(1:1)

d1:DO k=______(21)________

ch=string(k:k)

left=l

right=n

d2:D0 WHILE(left<=right)

middle=(1eft+right)/2

IF(ch

right=middle-1

ELSEIF(ch>stringl(middle:middle))THEN

Left=_______(22)_______

ELSE

_______(23)________

ENDIF

ENDDO d2

1F(ch>stringl(middle:middle)) middle=middle+l

d3:D0 i=_______(24)________

stringl(i+1:i+1):stringl(i:i)

ENDDO d3

stringl(middle:middle)=ch

________(25)_________

ENDDO d1

WRITE(*,*) string

WRITE(*,*) (stringl(i:i),i=1,n)

END PROGRAM find_different_character

10.连续函数f(x)若在区间(a,b)两端取异号值则必有实根。寻找f(x)在(a,b)上的实根的二分

法是个很常见的方法:将(a,b)分成长度相等的两小区间,再找到f(x)在两端取异号值的小区间,再将其对分,如此进行到某小区间之长度小于eps时,该小区间左端点加上小区间长度的一半即为近似实根。以下程序采用递归子程序bisect寻找g(x)=x/2+2*COS(x)—e x的零点。变量iter_count为允许的最大迭代次数,zero为零点,delta为小区间长度的一半,xleft,xright 分别为小区间左、右端点。请完善以下程序实现所要求的功能。

RECURSIVE SUBROUTINE bisect(xleft.xright,iter_count,zero,eps,f)

REAL,INTENT(out)::xleft.xright,zero

REAL,INTENT(in)::eps

REAL,EXTERNAL::f

REAL::xmean,delta

INTEGER::iter_count

delta=______(26)___________

IF(xright-xleft

_________(27)_____________

ELSE

iter_count=iter_count-1

IF(iter_count<0)THEN

zero=xleft+delta

PRINT *,?It is not a good root.?

ELSE

xmean=______(28)______________

IF(f(xleft)*f(xmean)<0.0)THEN

CALL bisect(xleft,xmean,iter_count,zero,eps,f)

ELSE

_________(29)_________________

ENDIF

ENDIF

END SUBROUTINE bisect

! g(x)是要求得实根的连续函数

FUNCTION g(x) RESULT(g_result)

REAL::g_result,x

g_result=(x/2.+2*cos(x)-exp(x)

END FUNCTION g

! (a,b)是零点所在区间,eps用于控制精度,maxiterate为允许的最大迭代次数

PROGRAM main

REAL::a,b,eps,root

____________(30)_____________

INTEGER ::maxiterate 、

READ(*,*) a,b,eps,maxiterate

CALL bisect(a,b,maxiterate,root,eps,g)

WRITE(*,?(“root=”,F8.4)?) root

END PROGRAM main

FORTRAN90模拟测验二(上机部分)

一、改错题

【题目】本程序的功能是: 利用对分查找法在给定的一维有序数组A中查找给定元素X,若找到,则返回该元素在数组中的下标;否则返回0。含有错误的源程序为:

PROGRAM MAIN

PARAMETER(N=10)

INTEGER(2):: A(N),B, R1

DATA A(11,12,13,14,15,16,17,18,19,20)

OPEN(1,FILE=?MFY1.OUT?)

B=14

CALL Y(A,B,N, R1)

WRITE(1,*)?RESULT=?,R1

ENDPROGRAM

SUBROUTINE Y(S,W,M,R)

INTEGER(2):: M,I,J,R

INTEGER(2):: S(M),W,F

F=0,I=1,J=M

DO WHILE (I<=J.AND.F==0)

N=(I+J)/2

IF(S(N)/=W)THEN

F=1

ELSE IF (S(N)>W) THEN

I=N+1

ELSE

I=N-1

ENDIF

ENDDO

R=N

k

k 1)1(312111

+-+???-+-END SUBROUTINE

【要求】1、必须将上述源程序录入到文件MYF1.F90中,然后根据题目的要求以及程序中前后

语句的逻辑关系,改正程序中的错误

2、改错时,除可以增加说明语句和可调换语句顺序外,不允许增加或删除任何语句.

3、改正后的程序存放在考试盘MYF1.F90文件中。

【注意】本题完成后必须将文件MYF1.F90、MYF1.OUT 、MYF1.EXE 拷贝到考试盘中供阅卷使用

二、编程题

【题目】编写程序计算 其中K 是

s 的整数部分(使用INT( )函数求整数部分)

s 是

的和, N 的值通过创建的数据文件MYF2.DAT 读入,输入N 的值为:3,5 【要求】1. 必须将源程序存到文件MYF2.F90中。

2. 建立数据文件MYF2.DAT ,所需N 的值通过该数据文件读入。

3. 用文件操作语句,存入结果文件MYF2.OUT 中。

【注意】本题完成后必须将文件MYF2.F90、MYF2.DAT 、MYF2.OUT 、MYF2.EXE 拷贝到考试盘中供阅卷使用。

)0N (2221N

2

1

>+???+++

FORTRAN90模拟测验三(笔试部分)

一、选择题(从4个可选答案中选择一个正确答案添入空白处)

1.下列字符串中可用作FORTRAN90变量名的是 。 A .ABC B. A-BCD C. 2ABC D. AB.C

2.下列数据中不符合FORTRAN90常数表示的为 。 A. 21.50 B. +0.0D0 C. .TRUE. D. $1000

3.执行WRITE(8,'(1X,2I4)')(I,I=1,3)后生成 个记录。 A. 1 B. 2 C. 3 D. 12

4.数学表达式

的FORTRAN 表达式为 。

A. SQRT(X)**3)*LOG(X**2+Y**2)/X

B. SQRT(X**3)*LOG((X**2+Y**2)/X)

C. (SQRT(X))**3*LN((X**2+Y**2)/X)

D. SQRT(X**3)*LN(((X**2)+Y**2)/X) 5.表达式:-B+SQRT(B*B-4.0*A*C).L

E.3E-5值的类型是 。 A. 逻辑型 B. 整型 C. 实型 D. 字符型

6.下面格式输入语句 READ(*,‘(3F3.1)’)X 如果输入 1234.567 则X 的值为 。

A. 123.0

B. 12.3

C. 1234.

D. 1234.567

7.FORTRAN90语言中变量名长度为 个字符。 A. 1-8 B. 8 C. 1-31 D. 31

8.按隐含约定,设X=2.5,Y=1.0,Z=3.0 执行赋值语句I=X+Y/Z 后I 的值为 。 A. 2.0 B. 2 C. 3 D. 3.0

9.下列语句中那个语句是错误的是 。 A. READ(*,*)X B. READ*,X C. PRINT(*,*)X D. PRINT *,X

10.说明语句REAL A(1:2,-1:10)说明数组A 的元素个数为 。 A. 11 B. 12 C. 22 D. 24

11.M 能被N 整除的FORTRAN 表达式为 。 A. (M/M)=0 B. (M MOD N).EQ.0 C. (M/N).EQ.0 D. MOD(M,N).EQ.0 12.以下关于接口块的说法中,不正确的是 。 A .通知编译程序主调程序调用过程时所需要的接口信息。 B. 可用于重载赋值 C. 接口块中可以包含可执行语句 D.可用于自定义运算符

13.以下关于FORTRAN90中有关哑元(形参)、实元(实参)说法中,不正确的是 。 A .实元和哑元个数一定要相等 B .实元和哑元个数可以不相等

C .哑元可以用可调数组

D .哑元可以用假定形状数组

14.下列关键字中不能用于说明变量属性的是 。 A .SAVE B .OPTIONAL C .CYCLE D .INTENT

15.以下关于派生类型的说法中,不正确的是 。

A . 派生类型说明中,不能有任何可执行语句

B . 可将一个派生类型变量的值整体赋给另一个派生类型变量

C . 派生类型成员为字符型时,长度可以不确定

D . 派生类型成员可以是自身同类型的指针

)x

y x ln(x 2

23

二、填空题(在空白处添入正确内容)

1.阅读以下程序:

FUNCTION fac(A) RESULT(rfac)

INTEGER A,rfac

INTEGER,SAVE::C=3

B=1

C=C+1

rfac=A+B+C

END FUNCTION

PROGRAM main

INTEGER::A=3,J,fac

DO J=0,2

PRINT*,fac(J)

ENDDO

END PROGRAM main

执行以上程序后,输出的第一行是(1),第三行是(2)。

2. 阅读以下程序:

SUBROUTINE swap(S1,S2)

CHARACTER(*) S1,S2

CHARACTER(3)T

T=S1;S1=S2;S2=T

END SUBROUTINE

PROGRAM MAIN

CHARACTER(3) :: S1='BD',S2='BC',S3='AB'

IF (S1>S2) CALL swap(S1,S2)

IF (S2>S3) CALL swap(S2,S3)

IF (S1>S2) CALL swap(S1,S2)

PRINT*,S1; PRINT*,S2; PRINT*,S3

END PROGRAM MAIN

执行以上程序后,输出的第一行是(3),第二行是(4),第三行是(5)。3.阅读以下程序:

MODULE aa

INTEGER::J=2

END MODULE aa

SUBROUTINE p()

USE aa

DO I=1,3

J=J+1

PRINT'(I3\)',J

ENDDO

PRINT*

END SUBROUTINE

PROGRAM MAIN

USE aa

DO I=0,2

相关文档