FORTRAN90上机试题.docx

上传人:b****5 文档编号:4317554 上传时间:2022-11-29 格式:DOCX 页数:24 大小:21.36KB
下载 相关 举报
FORTRAN90上机试题.docx_第1页
第1页 / 共24页
FORTRAN90上机试题.docx_第2页
第2页 / 共24页
FORTRAN90上机试题.docx_第3页
第3页 / 共24页
FORTRAN90上机试题.docx_第4页
第4页 / 共24页
FORTRAN90上机试题.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

FORTRAN90上机试题.docx

《FORTRAN90上机试题.docx》由会员分享,可在线阅读,更多相关《FORTRAN90上机试题.docx(24页珍藏版)》请在冰豆网上搜索。

FORTRAN90上机试题.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1