FORTRAN90上机试题.docx
- 文档编号:6610379
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:24
- 大小:20.19KB
FORTRAN90上机试题.docx
《FORTRAN90上机试题.docx》由会员分享,可在线阅读,更多相关《FORTRAN90上机试题.docx(24页珍藏版)》请在冰豆网上搜索。
FORTRAN90上机试题
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)
ENDSUBROUTINEOUTPRINTENDPROGRAMEX!
程序结束
试卷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) ENDSUBROUTINEOUTPRINTENDPROGRAMEX! 程序结束 ! ! 考生做题开始。 ! ! ************BEGIN******************* FUNCTIONMUL(N)RESULT(RES) INTEGER: : N,RES,I RES=1 DOI=1,N IF(MOD(N,I)==0)RES=RES*IENDDO 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) ENDSUBROUTINEOUTPRINTENDPROGRAMEX! 程序结束 试卷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 12345PROGRAMEX 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,,,,, ,,,,(,: ,) ,,(,: ,),,,,(,,,,: ,,,) ,,(,,,,: ,,,),, ,,,, 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 下面程序的功能是判断输入字符串,,,(长度不超过,,)是否是“回文”,(即顺读和倒读一样,如,,,,,,,,,,,等),请改错。 PROGRAMEX IMPLICITNONE CHARACTER(LEN=20): : STR,A*1INTEGER: : I,N LOGICAL: : FLAGREAD*,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! <==ERROR1,,(,,,(,: ,),,,),,,, ELSE FLAG=.FALSE. EXIT ENDIF ENDIF! <==ERROR2,,,,,IF(FLAG=.FALSE.)THEN! <==ERROR3IF(.NOT.FLAG)THEN PRINT*,"该字符串不是回文",STR ELSE PRINT*,"该字符串是回文",STR ENDIF ENDPROGRAMEX 下面程序的功能是求,行,列整型矩阵中的两条对角线上元素的最小值及其所在的位置。 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 将一维整型数组,中的所有数据循环左移一位,即将第一个数据移至最右边,第二个数据移至第一个数据的位置,第三个数据移至第二个数据的位置,依次类推。 (要用循环结构)输出格式: ,,,,,,,,,,,,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) ENDSUBROUTINEOUTPRINTEND! 程序结束 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,否则输出NOPROGRAMEX 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 ! ! 考生做题开始
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FORTRAN90 上机 试题