江苏省高等学校非计算机专业学生
计算机基础知识和应用能力等级考试上机试卷(2008年春)
二级 FORTRAN90 语言 (试卷代号F01)
(本试卷完成时间 70分钟)
一、改错题(20分)
【题目】找到所有符合以下条件的4位正整数:⑴该数除以其后两位数字组成的数之商是完全平方数;⑵该平方数恰好等于前两位数字组成的数加1之平方;⑶该数本身不是完全平方数。例如1805÷5=(18+1)2,1805不是完全平方数,1805即为所需寻找的数之一。遍历所有四位整数,无参过程resolve将4位数分解成左右两个两位数。含有错误的源程序如下:
LOGICAL FUNCTION check(n) RESULT(log)
IMPLICIT NONE
LOGICAL::log
INTEGER::n,left,right,tmp1,tmp2
REAL::temp,eps=1E-15
CALL resolve
tmp1=n/right; tmp2=sqrt(n+eps)
log=.FALSE.
temp=SQRT(tmp1+eps)
IF(INT(temp)**2==tmp1 .OR. tmp2**2/=n)THEN
IF((left+1)**2==tmp1)THEN
log=.TRUE.
ENDIF
ENDIF
CONTAINS
SUBROUTINE resolve
right=MOD(n,100)
left=(n-right)/10
END SUBROUTINE resolve
END FUNCTION check
!
PROGRAM strange
IMPLICIT NONE
INTEGER::i
LOGICAL::check
OPEN(1,FILE='myf1.out')
DO i=1001,9999
IF(MOD(i,100)/=0)THEN
IF(check(i))THEN
WRITE(1,'(I5)')I; WRITE(*,'(I5)')i
ENDIF
ENDIF
ENDDO
END PROGRAM strange
【要求】1. 必须将上述源程序录入到文件 MYF1.F90中,然后根据题目的要求以及程序中前后语句
的逻辑关系改正程序中的错误。
2. 改错时可增加或删除说明语句,调换语句顺序,不允许增加或删除任何可执行语句。
3. 改正后的程序和运行结果分别用MYF1.F90和MYF1.OUT为文件名存入考试盘(盘符为T:)。
【注意】本题完成后必须将MYF1.F90、MYF1.OUT拷贝到T:的根目录下供阅卷用。
二、编程题(20分)
【题目】函数f(x)的展开式如下:
将上式右端编写成外部过程。当级数通项的绝对值小于eps=1E-10时停止计算。在同一行上,x用F7.4,计算所得的 用F10.6格式输出。计算所用的数据存放在文件MYF2.DAT中,从该文件输入的x的值分别为:
0.5887 0.9711 1.4231 1.5456 -1.4231 -0.9711 -0.5887
【要求】1. 源程序必须存放在文件MYF2.F90中。
2. 建立数据文件MYF2.DAT,所需输入数据即从该文件中读出。
3. 程序运行结果存于文件MYF2.OUT中。
4. 数据文件的打开、使用、关闭均要求采用FORTRAN语言文件管理语句实现。
【注意】本题完成后必须将MYF2.F90、MYF2.DAT、MYF2.OUT等文件拷贝到考试盘(盘符为T:)的根目录下供阅卷用。
江苏省高等学校非计算机专业学生
计算机基础知识和应用能力等级考试上机试卷(2008年春)
二级 FORTRAN90 语言 (试卷代号F02)
(本试卷完成时间 70分钟)
一、改错题(20分)
【题目】若p为素数,2p-1也是素数,则称2p-1为Mersenne数。除少数几个Mersenne数可以在计算机整型数范围内表示外,它们都比较大。可以模拟手工求乘幂的方法求较大的Mersenne数。子程序Power(……)模拟手工求2的乘幂。本程序求p=19,31,61时的Mersenne数。含有错误的源程序如下:
SUBROUTINE Power(m,last,term,length)
IMPLICIT NONE
INTEGER::m,last,length,i,j,k
INTEGER(2),DIMENSION(1:last)::term
term=0; term(last)=1
doi: DO i=1,m
DO j=1,last
IF(term(j)/=0)THEN
DO k=last,j,-1
term(k)=term(k)*2
ENDDO
EXIT
ENDIF
ENDDO
DO k=last,j-1,-1
term(k-1)=term(k-1)+term(k)/10
term(k)= term(k)-(10* term(k))/10
ENDDO
ENDDO doi
DO k=1,last
IF(term(k)/=0)THEN
length=k; CYCLE
ENDIF
ENDDO
END SUBROUTINE Power
!
PROGRAM Mersenne_Number
IMPLICIT NONE
INTEGER::m,n,k,i
INTEGER::max=20
INTEGER(2),DIMENSION(3)::p=(/19,31,61/)
INTEGER(2),DIMENSION(1:max)::term
OPEN(1,FILE='myf1.out')
DO i=1,3
m=p(i); CALL Power(m,max,term,n)
term(max)=term(max)-1
WRITE(*,'("p=",I3," Mersenne=",20I1)')p(i),(term(k),k=n,max)
WRITE(1,'("p=",I3," Mersenne=",20I1)')p(i),(term(k),k=n,max)
ENDDO
END PROGRAM Mersenne_Number
【要求】1. 必须将上述源程序录入到文件 MYF1.F90中,然后根据题目的要求以及程序中前后语句
的逻辑关系改正程序中的错误。
2. 改错时可增加或删除说明语句,调换语句顺序,不允许增加或删除任何可执行语句。
3. 改正后的程序和运行结果分别用MYF1.F90和MYF1.OUT为文件名存入考试盘(盘符为T:)。
【注意】本题完成后必须将MYF1.F90、MYF1.OUT拷贝到T:的根目录下供阅卷用。
二、编程题(20分)
【题目】函数f(x)的展开式如下:
将上式右端编写成外部过程。当级数通项的绝对值小于eps=1E-10时停止计算。在同一行上,x用F7.4,计算所得的 用F10.6格式输出。计算所用的数据存放在文件MYF2.DAT中,输入的x的值分别为:
0.8887 1.9711 2.4231 3.5456 -2.4231 -1.9711 -0.8887
【要求】1. 源程序必须存放在文件MYF2.F90中。
2. 建立数据文件MYF2.DAT,所需输入数据即从该文件中读出。
3. 程序运行结果存于文件MYF2.OUT中。
4. 数据文件的打开、使用、关闭均要求采用FORTRAN语言文件管理语句实现。
【注意】本题完成后必须将MYF2.F90、MYF2.DAT、MYF2.OUT等文件拷贝到考试盘(盘符为T:)的根目录下供阅卷用。
江苏省高等学校非计算机专业学生
计算机基础知识和应用能力等级考试上机试卷(2008年春)
二级 FORTRAN90 语言 (试卷代号F03)
(本试卷完成时间 70分钟)
一、改错题(20分)
【题目】由于FORTRAN90中没有八进制类型,因此无法将两个八进制正整数直接相加。可以自定义运算符.$.实现两个八进制正整数直接相加,方法是先(用separate(a))将八进制正整数分离成单个数字,然后从低位到高位按八进制规则(逢8进1)进行加运算。八进制表示形式上和十进制类似。程序中函数oct_plus(……)实现运算符.$.的功能。八进制正整数不超过十位。含有错误的源程序如下:
PROGRAM main
IMPLICIT NONE
INTERFACE OPERATOR(.$.)
FUNCTION oct_plus(a,b) RESULT(c)
INTEGER::a,b
INTEGER::c
END FUNCTION oct_plus
END INTERFACE
INTEGER::octa,octb,octc
OPEN(1,FILE='myf1.out')
octa=1357; octb=2446; octc=octa.$.octb
WRITE(1,*)octa,octb,octc
octa=1234567; octb=7654321; octc=octa.$.octb+1
WRITE(1,*)octa,octb,octc
END PROGRAM main
!
FUNCTION oct_plus(a,b) RESULT(c)
INTEGER,DIMENSION(1:10)::work1,work2,work3
INTEGER::a,b,c,i,k,temp,octcarry
octcarry=0; work1=separate(a); work2=separate(b)
DO i=10,1,-1
temp=work1(i)+work2(i)+octcarry
work3(i)=MOD(temp,10); octcarry=temp/10
ENDDO
DO i=1,10
IF(work3(i)/=0)THEN
k=i; EXIT
ENDIF
ENDDO
c=0
DO i=k,10
c=c*10+work3(i)
ENDDO
CONTAINS
FUNCTION separate(a) RESULT(work)
INTEGER::a,k,tmp,work(10)
work=0; tmp=a; k=10
DO WHILE(tmp/=0)
work(k)=MOD(tmp,8); tmp=tmp/8; k=k-1
ENDDO
END FUNCTION separate
END FUNCTION oct_plus
【要求】1.必须将上述源程序录入到文件 MYF1.F90中,然后根据题目的要求以及程序中前后语句
的逻辑关系改正程序中的错误。
2. 改错时可增加或删除说明语句,调换语句顺序,不允许增加或删除任何可执行语句。
3. 改正后的程序和运行结果分别用MYF1.F90和MYF1.OUT为文件名存入考试盘(盘符为T:)。
【注意】本题完成后必须将MYF1.F90、MYF1.OUT拷贝到T:盘的根目录下供阅卷用。
二、编程题(20分)
【题目】函数f(x)的展开式如下:
x≠0,±1,±2,…,±n……
事实上f(x)=near(x),其中near(x)表示x和最接近x的整数之间的距离。当级数通项的绝对值小于eps=1E-10时停止计算。将上式右端编写成外部过程。在同一行上,x用F8.4,计算所得的 和用于检验的near (x)用F7.4格式输出。计算所用的数据存放在文件MYF2.DAT中,从该文件输入的x的值分别为:
23.1235 4.5672 5.6791 9.5566 -3.4598 -5.2314 -18.9982
提示:ANINT(x)为最接近x的整数函数(类型为实型)。f(x)= near (x)=ABS(x-ANINT(x))
【要求】1. 源程序必须存放在文件MYF2.F90中。
2. 建立数据文件MYF2.DAT,所需输入数据即从该文件中读出。
3. 程序运行结果存于文件MYF2.OUT中。
4. 数据文件的打开、使用、关闭均要求采用FORTRAN语言文件管理语句实现。
【注意】本题完成后必须将MYF2.F90、MYF2.DAT、MYF2.OUT等文件拷贝到考试盘(盘符为T:)的根目录下供阅卷用。
江苏省高等学校非计算机专业学生
计算机基础知识和应用能力等级考试上机试卷(2008年秋)
二级 FORTRAN90 语言 (试卷代号F01)
(本试卷完成时间 70分钟)
一、改错题(20分)
【题目】在所有的7位奇整数中找出符合下列要求的数:⑴该数是素数;⑵每次删除末尾一位数后生成的数仍是素数,直到最后的一位数还是素数。例如2339933,每次删除末位数形成的数列:233993、23399、2339、233、23、2中每个数都是素数。prime(n)判断奇整数是否素数。含有错误的源程序如下:
FUNCTION get_next(n) RESULT(m)
IMPLICIT NONE
INTEGER::n,m,last
last=MOD(n,10); m=(n-last)/10
END FUNCTION get_next
!
PROGRAM main
INTEGER::k,n,get_next, first=1000001,last=9999999
LOGICAL::prime
OPEN(1,FILE='myf1.out')
DO n=first,last,2
k=n
in: DO WHILE(k>0)