福州大学至诚学院2008级《Fortran 90 程序设计教程》部分习题参考答案

说实话,Fortran不是什么我喜欢的语言,不过这是今年的课所以我也不得不做.这里提供的部分习题答案仅供我的同学复习参考之用.

本人水平有限,难免会有错误,如果发现请及时联系我,谢谢!(联系方式见AboutMe页面)

2010年11月25日修订


第65页第3题求余弦函数,原来的答案有错误,现在已经修改。
特别提示:希望大家不要打印出来看,编程最好的方式是通过上机练习,并且本页面的参考答案随时都会更新。



!第29页第7题
program main
    real c,f
    read(*,*),c
    f=9*c/5+32
    write(*,100) f
100 format(1x,f7.3)
end
!第29页第8题第1小题
program main
    integer a,b,c
    real average
    read(*,*)a,b,c
    average=(a+b+c)*1.0/3
    write(*,100) average
100 format(1x,f7.3)
end
!第29页第8题第2小题
program main
    real x,y,ans
    read(*,*) x,y
    ans=log(x*x+y)/(sin(x*y)**2+1)+32
    write(*,100) ans
100 format(1x,f7.3)
end
!第29页第8题第3小题
program main
    real r,s
    r=4.0
    s=4*3.14*r**2
    write(*,100)s
100 format(1x,f7.3)
end
!第29页第9题
program main
    real c,x,y,pi
    pi=3.14
    c=(52+15.0/60)*3.14/180
    x=sqrt(1+tan(c))
    y=exp(pi/2*x)+log( abs( sin(x)**2-sin(x*x) ) )
    write(*,100)y
100 format(1x,f7.3)
end
!第29页第10题第1小题
program main
    real x
    x=2**0.1-1
    write(*,100)x
100 format(1x,f7.5)
end
!第29页第10题第2小题
program main
    real x
    x=log(2.0)/log(1.09)
    write(*,100) x
100 format(1x,f7.5)
end
!第43页第5题
program main
    real freight,price,weight,s,d
    write(*,*) "Please input price,weight,s"
    read(*,*) price,weight,s
    if(s<250) then
        d=0
    else if(s<500) then
        d=0.025
    else if(s<1000) then
        d=0.045
    else if(s<2000) then
        d=0.075
    else if(s<2500) then
        d=0.09
    else if(s<3000) then
        d=0.12
    else
        d=0.15
    endif
    freight=price*weight*s*(1-d)
    write(*,*) freight
100 format(1x,f8.3)
end
!第43页第7题
program main
    integer m,t
    read(*,*) m
    t=m*m
    t=mod(t,100)
    if(t==m) then
        write(*,*) m,'是守形数'
    else
        write(*,*) m,'不是守形数'
    endif
end
!第43页第9题
program main
    real x,y
    read(*,*) x
    if(-15<x .and. x<0) then
        y=cos(x+1)
    else if(0<=x .and. x<10) then
        y=log(x*x+1)
    else if(15<x .and. x<20) then
        y=x**(1.0/3)
    else
        y=x*x
    endif
    write(*,*) y
end
!第65页第2题
program main
    integer i
    real sum,a,pi
    sum=0.0
    do i=1,1000
        a=1/(4.0*i-3)-1/(4.0*i-1)
        sum=sum+a
    enddo
    pi=sum*4.0
    write(*,*) pi
end
!第65页第3题
program main
    integer i;
    real tmp,sum,x;
    read(*,*)x
    sum=0.0
    tmp=1.0
    i=1
    do while(abs(tmp)>1E-6)
        sum=sum+tmp
        tmp=-1.0*tmp*x*x/(2*i*(2*i-1))
        i=i+1
    enddo
    write(*,*) sum
    !write(*,*) cos(x)
end
!第66页第4题
program main
    real f,s,x,y
    integer i,j,k
    s=0.0
    do i=1,5
        do j=1,10
            x=2*i-1
            y=2.0+1.0*j/10
            f=sin(x+y)/(1+x*y)
            s=s+f
            enddo
    enddo
    write(*,*) s
end
!第66页第5题
function isPrime(x)
    integer x
    integer i,t
    t=sqrt(1.0*x)
    do i=2,t
        if(mod(x,i)==0) exit
    enddo
    if(i>t) then
        isPrime=1!1表示x是素数
    else
        isPrime=0
    endif
    return
end
 
program main
    integer i,k1,k2,k3
    do i=2,999
        k1=i/100
        k2=mod(i/10,10) !或k2=i/10-k1*10
        k3=mod(i,10)
        if(mod(k1+k2+k3,2)==1 .and. isPrime(i)==1) write(*,100) i
    enddo
100 format(1x,I4)
end
!第66页第6题
program main
    integer i,t,k1,k2,k3
    do i=100,999
        t=i/9
        k1=i/100
        k2=mod(i/10,10)
        k3=mod(i,10)
        if(t==(k1*k1+k2*k2+k3*k3)) write(*,100) i
    enddo
100 format(1x,I4)
end

亲密数这题请参考http://icbc168.blog.163.com/blog/static/1270839842010101695449642/

!第66页第8题
function f(x)
     integer x
     integer i,k,sum
     sum=0
     k=x-1
     do i=1,k
        if(mod(x,i)==0) then
            sum=sum+i
        endif
     enddo
     f=sum
     return
end
 
program main
    integer i,m,n,D(2000)
    do i=2,2000
        D(i)=f(i)
    enddo
    do m=2,2000
        n=D(m);
        k=D(n);
        if(m==k .and. m<=n)then
            write(*,100)m,n
        endif
    enddo
100 format(1x,2I5)
end
!第66页第12题
function f(x)
    real x,f
    f=x**3-x**2-1
    return
end
 
program main
    real left,right,mid,last,cur
    left=0.0
    right=3.0
    mid=(left+right)/2
    last=f(left)
    cur=f(mid)
    do while(abs(last-cur)>=1E-6)
        if(cur>0) then
            right=mid
        else
            left=mid
        endif
        mid=(left+right)/2
        last=cur
        cur=f(mid)
    enddo
    write(*,*) mid
end
!第66页第15题
program main
    integer N,i,k,ans
    real sum,tmp
    read(*,*)N
    N=abs(N)
    ans=0
    do i=0,N
        ans=ans+2**i
    enddo
    write(*,100)ans
100 format(1x,I10)
    k=sqrt(1.0*ans)
    sum=0.0
    do i=1,k
        tmp=1.0*((-1)**(i+1))/i
        sum=sum+tmp
    enddo
    write(*,101) sum
101 format(1x,f7.3)
end
!第126页第3题
program main
    integer D(5),half,tmp,i
    data D/8,6,5,4,1/
    write(*,*)'原序列'
    write(*,100)(D(i),i=1,5)
    half=5/2
    do i=1,half
        tmp=D(i)
        D(i)=D(5-i+1)
        D(5-i+1)=tmp
    enddo
    write(*,*)'逆序输出'
    write(*,100)(D(i),i=1,5)
100 format(1x,5I4)
end
!第126页第4题
program main
    integer D(10)
    data D/3,1,4,1,5,9,2,-6,5,-3/
    integer i,k,min,max,tmp
    write(*,*)(D(i),i=1,10)
 
    max=D(1)
    k=1
    do i=2,10
        if(D(i)>max) then
            k=i
            max=D(i)
        endif
    enddo
    tmp=D(1)
    D(1)=D(k)
    D(k)=tmp
 
    min=D(1)
    k=1
    do i=2,10
        if(D(i)<min) then
            k=i
            min=D(i)
        endif
    enddo
    tmp=D(2)
    D(2)=D(k)
    D(k)=tmp
    write(*,100)(D(i),i=1,10)
100 format(1x,10I4)
end
!第126页第9题
program main
    real D(5,5)
    integer i,j,tmp
100 format(1x,5f7.2)
    do i=1,5
        read(*,*)(D(i,j),j=1,5)
    enddo
 
    do i=1,5
        write(*,100)(D(i,j),j=1,5)
    enddo
    write(*,*)
 
    do i=1,5
        tmp=D(2,i)
        D(2,i)=D(5,i)
        D(5,i)=tmp
    enddo
 
    do i=1,5
        write(*,100)(D(i,j),j=1,5)
    enddo
    write(*,*)
 
    do i=1,5
        tmp=D(i,i)
        do j=1,5
            D(i,j)=D(i,j)/tmp
        enddo
    enddo
 
    do i=1,5
        write(*,100)(D(i,j),j=1,5)
    enddo
end
!第126页第10题
program main
    integer D(4,5),min,p,i,j,tmp
100 format(1x,5I4)
    do i=1,4
        read(*,*)(D(i,j),j=1,5)
    enddo
 
    do i=1,4
        write(*,100)(D(i,j),j=1,5)
    enddo
    write(*,*)
 
    do i=1,5
        min=D(1,i)
        p=1
        do j=2,4
            if(D(j,i)<min) then
                p=j
                min=D(j,i)
            endif
        enddo
        tmp=D(p,i)
        D(p,i)=D(4,i)
        D(4,i)=tmp
    enddo
 
    do i=1,4
        write(*,100)(D(i,j),j=1,5)
    enddo
end
!第126页第12题
program main
    integer D(100,100),i,j,k,n
    write(*,*)'input a number N'
    read(*,*)n
    do i=1,100
        do j=1,100
            D(i,j)=0
        enddo
    enddo
    D(1,1)=1
    do i=2,n
        do j=1,i
            D(i,j)=D(i-1,j)+D(i-1,j-1)
        enddo
    enddo
 
    do i=1,n
        write(*,*)(D(i,j),j=1,i)
    enddo
end
!第176页第7题
function isPrime(x)
    integer x
    integer t,i
    t=sqrt(1.0*x)
    do i=2,t
        if(mod(x,i)==0) exit
    enddo
    if(i>t) then
        isPrime=1
    else
        isPrime=0
    endif
    return
end
 
program main
    integer i,j,k,n
    integer prime(150),ans(100)
    prime(1)=0
    prime(2)=1
    do i=3,150
        prime(i)=isPrime(i)
    enddo
 
    do i=100,120,2
        do j=2,i-1
            if(prime(j)==1 .and. prime(i-j)==1) then
                write(*,100)i,j,i-j
                exit
            endif
        enddo
    enddo
100	format(1x,3I4)
    write(*,*)
 
    k=1
    read(*,*)n
    do while(n/=1)
        do i=2,100
            if(prime(i)==1 .and. mod(n,i)==0) then
                ans(k)=i
                k=k+1
                n=n/i
                exit
            endif
        enddo
    enddo
    k=k-1
    write(*,101)(ans(i),i=1,k)
101 format(I4)
end
!第176页第10题
function gcd(n,m)
    gcd=mod(n,m)
    do while(gcd/=0)
        n=m
        m=gcd
        gcd=mod(n,m)
    enddo
    gcd=m
    return
end
 
program main
    integer n,m,r,s
    read(*,*)n,m
    s=n*m
    r=gcd(n,m)
    write(*,100)s/r
100 format(1x,I8)
end
» 本博客采用署名 2.5 中国大陆许可协议进行许可,本文版权归作者所有,欢迎转载,但必须在明显位置给出原文连接。
anyShare分享到:
发表评论?

2 条评论。

  1. 老师钩的那些编程题没有全部打出来啊,拜托完整一点吧...

发表评论

注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>