FORTRAN90上机试题.docx
《FORTRAN90上机试题.docx》由会员分享,可在线阅读,更多相关《FORTRAN90上机试题.docx(24页珍藏版)》请在冰豆网上搜索。
FORTRAN90上机试题
试卷1
下面程序的功能是用指针的方法将整型变量A,B的内容互换,请改错。
PROGRAMEX
IMPLICITNONE
INTEGER:
:
A,B,C!
<==ERROR1integer,target:
:
a,b,c
INTEGER,POINTER:
:
P1,P2,P3
READ*,A,B
C=B
P1=>C!
<==ERROR2p1=>a
P2=>B
P3=B!
<==ERROR3p3=>c
PRINT*,A,B
P2=P1
P1=P3
PRINT*,A,B
END
下面程序的功能是用折半法查找方法在给定的一维有序数组(升序)中查找给定的元素X,返回该元素在数组中的下标。
如果数组中没有该元素,则返回‘NOFOUND’,请填空。
PROGRAMEX
IMPLICITNONE
INTEGER,DIMENSION(6):
:
A
INTEGER:
:
X,K,J,L,S
READ*,X
A=(/2,4,6,9,15,24/)
K=1
J=6
DOWHILE(K<=J)
L=(K+J)/2
IF(A(L)==X)THEN!
<==BLANK1
S=L
EXIT
ELSEIF(A(L)>X)THEN
J=L-1
ELSE
K=L+1!
<==BLANK2
ENDIF
ENDDO
IF(K<=J)THEN!
<==BLANK3
PRINT*,S
ELSE
PRINT*,'NOFOUND'
ENDIF
END
编程,求500-700之间各位数字之和等于12的整数的个数及和。
PROGRAMTEST
IMPLICITNONE
INTEGER:
:
N,S!
N是存放个数的变量,S是存放和的变量
!
!
考生做题开始
!
!
************BEGIN*******************
INTEGER:
:
A,B,C,I
S=0;N=0
DOI=500,700
A=I/100
B=MOD(I/10,10)
C=MOD(I,10)THEN
N=N+1
S=S+I
ENDIF
ENDDO
PRINT*,N,S
!
!
************END*******************
CALLOUTPRINT(N,S)!
N为符合条件的结果
!
!
考生做题结束,以下部分请勿修改
CONTAINS
SUBROUTINEOUTPRINT(X,Y)
CHARACTER(LEN=10):
:
FILENAME
INTEGER:
:
X,Y
FILENAME='RESULT.TXT'
OPEN(UNIT=1,FILE=FILENAME,ACCESS='SEQUENTIAL',STATUS='REPLACE')
WRITE(1,"(1X,'N=',I4,3X,'S=',I6)")X,Y
ENDFILE(UNIT=1)
CLOSE(UNIT=1)
ENDSUBROUTINEOUTPRINT
END!
程序结束
试卷2
下面程序的功能是从键盘输入任意10个整型数,使其按从小到大的鼠须排列并输出(冒泡法),请改错。
PROGRAMEX
IMPLICITNONE
INTEGER,DIMENSION(10):
:
A
INTEGER:
:
I,J,TEMP
READ*,A
DOI=1,9
DOJ=10,I!
<==ERROR1DOJ=1,10-I
IF(A(J)>A(J+1))THEN
TEMP=A(J)
A(J+1)=A(J)!
<==ERROR2A(J)=A(J+1)
A(J)=A(J+1)!
<==ERROR3A(J+1)=TEMP
ENDIF
ENDDO
ENDDO
PRINT'(1X,10I4)',(A(I),I=1,10)
END
下面程序的功能是计算FIBONACCI数列(1,1,2,3,5,8,13,……,从第三项起,每一项都是其前两项之和)前50项之和。
请填空。
PROGRAMEX
IMPLICITNONE
INTEGER:
:
I!
计数器
REAL:
:
J,K,M!
M是累加器
I=1
J=1;K=1!
第一项、第二项的值
M=0
DOWHILE(DOWHILE(I<=25))!
<==BLANK1
M=M+J+(K)!
<==BLANK2
I=I+1
J=J+K
K=K+(J)!
<==BLANK3
ENDDO
PRINT*,M
END
一个大于300的正整数,减去2是7的倍数,减去5是9的倍数,编程,求满足这个条件的最小正整数N。
PROGRAMEX
IMPLICITNONE
INTEGER:
:
N
N=300
!
!
考生做题开始
!
!
************BEGIN*****************
DO
IF(MOD(N-2,7)==0.AND.MOD(N-5,9)==0)EXIT
N=N+1
ENDDO
PRINT’(1X,”N=”I4)’,N
!
!
************END*******************
!
!
考生做题结束
CALLOUTPRINT(N)!
N为符合条件的结果
CONTAINS
SUBROUTINEOUTPRINT(X)
CHARACTER(LEN=10):
:
FILENAME
INTEGER:
:
X
FILENAME='RESULT.TXT'
OPEN(UNIT=1,FILE=FILENAME,ACCESS='SEQUENTIAL',STATUS='REPLACE')
WRITE(1,"(1X,'N=',I4)")X
ENDFILE(UNIT=1)
CLOSE(UNIT=1)
ENDSUBROUTINEOUTPRINT
ENDPROGRAMEX!
程序结束
试卷3
下面程序的功能是从键盘上输入一个数据X,按下述关系,计算表达式Y的值:
当X>10时,Y=1
当2当-1当X<=-1时,Y=2X
请改错。
PROGRAMEX
IMPLICITNONE
INTEGER:
:
X,Y
READ*,X
IF(X>=10)THEN!
<==ERROR1X>10
Y=1
ELSEIF(X>2)THEN
Y=X/2
ELSEIF(X>=-1)THEN!
<==ERROR2X>-1
Y=X-1
ELSE
Y=2X!
<==ERROR3Y=2*X
ENDIF
PRINT*,X,Y
ENDPROGRAMEX
下面程序的功能是判断数字N是否在整数M中,若在则输出YES,否则输出NO。
请填空。
PROGRAMEX
IMPLICITNONE
INTEGER:
:
I,N,M,K
LOGICAL:
:
F
READ*,M,N
I=M
F=.FALSE.
DOWHILE(I>0)
K=MOD(I,10)
IF(K==N)THEN!
<==BLANK1
F=.TRUE.
EXIT
ENDIF
I=(I/10)!
<==BLANK2
ENDDO
IF(F)THEN!
<==BLANK3
PRINT*,'YES'
ELSE
PRINT*,'NO'
ENDIF
END
编写外部函数子程序MUL,其功能是求正整数N所有因子之积。
PROGRAMEX
IMPLICITNONE
INTEGER:
:
N,S,MUL!
S为存放累乘结果变量
N=65
S=MUL(N)
PRINT*,'S=',S
CALLOUTPRINT(S)!
S为符合条件的结果
CONTAINS
SUBROUTINEOUTPRINT(X)
CHARACTER(LEN=10):
:
FILENAME
INTEGER:
:
X
FILENAME='RESULT.TXT'
OPEN(UNIT=1,FILE=FILENAME,ACCESS='SEQUENTIAL',STATUS='REPLACE')
WRITE(1,"(1X,'S=',10I4)")X
ENDFILE(UNIT=1)
CLOSE(UNIT=1)
ENDSUBROUTINEOUTPRINT
ENDPROGRAMEX!
程序结束
!
!
考生做题开始。
!
!
************BEGIN*******************
FUNCTIONMUL(N)RESULT(RES)
INTEGER:
:
N,RES,I
RES=1
DOI=1,N
IF(MOD(N,I)==0)RES=RES*I
ENDDO
ENDFUNCTION
!
!
************END*******************
!
!
考生做题结束
PROGRAMEX
IMPLICITNONE
INTEGER:
:
N,S,MUL!
S为存放累乘结果变量
N=65
S=MUL(N)
PRINT*,'S=',S
CALLOUTPRINT(S)!
S为符合条件的结果
CONTAINS
SUBROUTINEOUTPRINT(X)
CHARACTER(LEN=10):
:
FILENAME
INTEGER:
:
X
FILENAME='RESULT.TXT'
OPEN(UNIT=1,FILE=FILENAME,ACCESS='SEQUENTIAL',STATUS='REPLACE')
WRITE(1,"(1X,'S=',10I4)")X
ENDFILE(UNIT=1)
CLOSE(UNIT=1)
ENDSUBROUTINEOUTPRINT
ENDPROGRAMEX!
程序结束
试卷4
下面程序的功能是通过字符型数组P输出如下图形,请改错。
*
**
**
**
**
**
*******
PROGRAMEX
IMPLICITNONE
CHARACTER,DIMENSION(7,7):
:
P
INTEGER:
:
I,J
P=''
DOI=1,6
P(I,I)='*'
P(1,I)='*'!
<==ERROR1P(I,1)=’*’
ENDDO
DOJ=1,7
P(J,7)='*'!
<==ERROR2P(7,J)=’*’
ENDDO
DOI=1,7
PRINT10,(P(I,J);J=1,7)!
<==ERROR3PRINT10,(P(I,I),J=1,I)
ENDDO
10FORMAT(1X,10A)
END
下面程序的功能是输出矩阵:
1
12
123
1234
12345
PROGRAMEX
IMPLICITNONE
INTEGER:
:
I,J!
I表示行下标,J表示列下标
INTEGER,DIMENSION(5,5):
:
A
DOI=1,5
DOJ=1,I!
<==BLANK1
A(I,J)=J!
<==BLANK2
ENDDO
ENDDO
DOI=1,5
PRINT'(1X,5I2)',(A(I,J),J=1,I)!
<==BLANK3
ENDDO
ENDPROGRAMEX
输入一个字符串STR,然后将它的逆序仍放入字符串STR中并输出。
例如输入的是FORTRAN90,它的逆序是09NARTROF。
PROGRAMEX
IMPLICITNONE
CHARACTER(LEN=10):
:
STR='ASDFGHJKLZ'
!
!
考生做题开始
!
!
************BEGIN*******************
INTEGER:
:
I
CHARACTER:
:
C
DO I=1,5
C=STR(I:
I)
STR(I:
I)=STR(11-I:
11-I)
STR(11-I:
11-I)=C
ENDDO
PRINT*,’STR的逆序为:
’,STR
!
!
************END*******************
!
!
考生做题结束,以下部分请勿修改
CALLOUTPRINT(STR)!
STR为符合条件的结果
CONTAINS
SUBROUTINEOUTPRINT(X)
CHARACTER(LEN=10):
:
FILENAME
CHARACTER(LEN=10):
:
X
FILENAME='RESULT.TXT'
OPEN(UNIT=1,FILE=FILENAME,ACCESS='SEQUENTIAL',STATUS='REPLACE')
WRITE(1,"(1X,'STR的逆序为:
',A)")X
ENDFILE(UNIT=1)
CLOSE(UNIT=1)
ENDSUBROUTINEOUTPRINT
END!
程序结束
输出格式:
STR的逆序为:
09NARTROF
试卷5
下面程序的功能是判断输入字符串STR(长度不超过20)是否是“回文”,(即顺读和倒读一样,如LEVEL,12321等),请改错。
PROGRAMEX
IMPLICITNONE
CHARACTER(LEN=20):
:
STR,A*1
INTEGER:
:
I,N
LOGICAL:
:
FLAG
READ*,STR
N=LEN_TRIM(STR)
FLAG=.TRUE.
DOI=1,N/2
A=STR(N+1-I:
N+1-I)
IF(STR(I:
I)=A)THEN!
<==ERROR1IF(STR(I:
I)==A)THEN
ELSE
FLAG=.FALSE.
EXIT
ENDIF
ENDIF!
<==ERROR2 END DO
IF(FLAG=.FALSE.)THEN!
<==ERROR3 IF(.NOT.FLAG)THEN
PRINT*,"该字符串不是回文",STR
ELSE
PRINT*,"该字符串是回文",STR
ENDIF
ENDPROGRAMEX
下面程序的功能是求4行4列整型矩阵中的两条对角线上元素的最小值及其所在的位置。
PROGRAMEX
IMPLICITNONE
INTEGER,DIMENSION(4,4):
:
A
INTEGER:
:
I,MINA,H,L
READ*,A
MINA=A(1,1)
H=1;L=1
DOI=1,4!
<==BLANK1
IF(A(I,I)MINA=A(I,I)
H=I;L=I
ENDIF
IF(A(I,5-I)MINA=A(I,5-I)!
<==BLANK2
H=I
L=5-I!
<==BLANK3
ENDIF
ENDDO
PRINT*,MINA,H,L
END
将一维整型数组A中的所有数据循环左移一位,即将第一个数据移至最右边,第二个数据移至第一个数据的位置,第三个数据移至第二个数据的位置,依次类推。
(要用循环结构)
输出格式:
3 2 1 4 5 6 12 14 17 9
PROGRAMEX
IMPLICITNONE
INTEGER:
:
I!
I为循环变量
INTEGER,DIMENSION(10):
:
A=(/23,32,30,40,45,25,50,37,28,39/)
!
!
考生做题开始。
!
!
************BEGIN*******************
INTEGER:
:
TEMP
TEMP=A(I+1)
DOI=1,9
A(I)=A(I+1)
ENDDO
A(10)=TEMP
PRINT’(1X,10I4)’,(A(I),I=1,10)
!
!
************END*******************
!
!
考生做题结束
CALLOUTPRINT(A)!
A为符合条件的结果
CONTAINS
SUBROUTINEOUTPRINT(X)
CHARACTER(LEN=10):
:
FILENAME
INTEGER,DIMENSION(10):
:
X
FILENAME='RESULT.TXT'
OPEN(UNIT=1,FILE=FILENAME,ACCESS='SEQUENTIAL',STATUS='REPLACE')
WRITE(1,"(1X,10I4)")X
ENDFILE(UNIT=1)
CLOSE(UNIT=1)
ENDSUBROUTINEOUTPRINT
ENDPROGRAMEX!
程序结束
试卷6
(改错)题目:
有4个学生的记录,每个学生有学号、姓名、3门课成绩。
下面程序的功能是输出这4位学生的学号、姓名、3门课成绩和每位学生的总分,请改错。
PROGRAMEX
IMPLICITNONE
TYPESTUDENT
INTEGER:
:
XH
CHARACTER(LEN=10):
:
NAME
REAL,DIMENSION(4):
:
CJ
ENDTYPESTUDENT
DIMENSION(4):
:
A!
<==ERROR1TYPE(STUDENT),DIMENSION(4):
:
A
INTEGER:
:
I,J
REAL:
:
S
DOI=1,4
READ*,A(I)%XH,A(I)%NAME
S=0
DOJ=1,4!
<==ERROR2DOJ=1,3
READ*,A(I)%CJ(J)
S=S+A(I)%CJ(J)
ENDDO
CJ=S!
<==ERROR3A(I)%CJ(4)
ENDDO
DOI=1,4
PRINT10,A(I)%XH,A(I)%NAME,(A(I)%CJ(J),J=1,4)
ENDDO
10FORMAT(1X,I6,2X,A10,2X,4F6.1)
END
(填空)题目:
已知整型数组A中有10个元素,已经按从小到大的次序输入。
今插入任一整数P,使插入后的数组仍然保持有序,请填空。
PROGRAMEX
IMPLICITNONE
INTEGER,DIMENSION(11):
:
A
INTEGER:
:
P,K
READ*,(A(K),K=1,10)
READ*,P
K=10
DOWHILE(K>=1.AND.A(K)>P)!
<==BLANK1
A(K+1)=A(K)
K=K-1!
<==BLANK2
ENDDO
A(K+1)=P!
<==BLANK3
PRINT*,A
END
(编程)题目:
编写递归子例行子程序,其功能是求某整数N是几位数。
PROGRAMEX
IMPLICITNONE
INTERFACE
RECURSIVESUBROUTINEF(N,M)
INTEGER:
:
N,M
ENDSUBROUTINEF
ENDINTERFACE
INTEGER:
:
N,M=0!
M存放数的位数
N=2343
CALLF(N,M)
PRINT'(1X,"M=",I4)',M
CALLOUTPRINT(M)!
M为符合条件的结果
CONTAINS
SUBROUTINEOUTPRINT(X)
CHARACTER(LEN=10):
:
FILENAME
INTEGER:
:
X
FILENAME='RESULT.TXT'
OPEN(UNIT=1,FILE=FILENAME,ACCESS='SEQUENTIAL',STATUS='REPLACE')
WRITE(1,"(1X,'M=',I4)")X
ENDFILE(UNIT=1)
CLOSE(UNIT=1)
ENDSUBROUTINEOUTPRINT
END!
程序结束
RECURSIVESUBROUTINEF(N,M)!
N是正整数,M是数的位数
!
!
考生做题开始
!
!
************BEGIN*******************
INTEGER:
:
N,M
IF(N>0)THEN
M=M+1
CALLF(N/10,M)
ENDIF
!
!
************END*******************
ENDSUBROUTINEF
程序运行结果:
M=4
试卷7
改错:
下面程序的功能是判断大于1的自然数N是否是素数,若是输出YES,否则输出NO
PROGRAMEX
IMPLICITNONE
INTEGER:
:
N,K,M
READ*,N
IF(N>=1)THEN!
<==ERROR1IF(N>1)THEN
DOK=2,N/2
M=MOD(N,K)
IF(M=0)EXIT!
<==ERROR2IF(M==0)EXIT
ENDDO
IF(K>=N/2)THEN!
<==ERROR3IF(K.>N/2)THEN
PRINT*,'YES'
ELSE
PRINT*,'NO'
ENDIF
ELSE
PRINT*,'数据输入不正确!
'
ENDIF
ENDPROGRAMEX
程序设计:
该程序功能是求4行4列的外围元素之和
PROGRAMEX
IMPLICITNONE
REAL,DIMENSION(4,4):
:
A
REAL:
:
S
INTEGER:
:
I
READ*,A
S=__0.0____!
<==BLANK1
DOI=1,4
S=S+A(1,I)+A(I,1)+_A(4,i)+A(i,4)________!
<==BLANK2
ENDDO
S=S-A(1,1)-A(4,4)-_A(1,4)-A(4,1)______!
<==BLANK3
PRINT*,S
ENDPROGRAMEX
对固有函数SIN进新行超载,使得参数为整数时,也能够使用SIN函数,返回的类型为实新,调用该函数,求SIN
(2)的值.
MODULEEXP_MODULE
IMPLICITNONE
INTERFACESIN
MODULEPROCEDURESIN_INT
ENDINTERFACE
CONTAINS
!
!
考生做题开始
!
!
************BEGIN*******************
FUNCTIONSIN_INT(X)FE