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,'{',
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) )