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

### 2010年11月25日修订

```!第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```

```!第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 中国大陆许可协议进行许可，本文版权归作者所有，欢迎转载，但必须在明显位置给出原文连接。

## 2 条评论。

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

• 我记得已经全部做好了，还有哪一没做？你把页码和题号写出来，我去看看