write(*,200) m
100 format(1x,'i=',i3,5x,'x1='f15.7)
200 format(1x,'computation has not converged after',i4,'iteration') End
5.二分法: read*,x1,x2 f1=(x1)**2-4.0*x+1.0 f2=(x2)**2-4.0*x+1.0 10 x=(x1+x2)/2.0 f=x**2-4.0*x+1.0 if(sign(f,f1).eq.f) then x1=x f1=f else x2=x f2=f end if if((abs(x1-x2).gt.1e-05).and.abs(f).gt.1e-06) then goto 10 else if(abs(f).gt.1e-06) then x=(x1+x2)/2.0 end if write(*,100) x
100 format(1x,'x=',f15.7) end
弦截法: 10 read*,x1,x2 f1=(x1)**2-4.0*x1+1.0 f2=(x2)**2-4.0*x2+1.0 if(sign(f1,f2).eq.f1) goto 10 f=1.0
20 if((abs(x1-x2).gt.1e-05).and.(abs(f).gt.1e-06)) then x=x2-(x2-x1)/(f2-f1)*f2 f=x*x-4.0*x+1.0
if(sign(f,f1).eq.f) then
x1=x f1=f else x2=x f2=f end if goto 20 end if if(abs(f).gt.1e-06) then x=(x1+x2)/2.0 end if write(*,100) x
100 format(1x,'x=',f15.7) end
一、逆序编程
! 逆序输出 real temp integer m(20) read(*,100)(m(i),i=1,20) 100 format(5i3) do 10,i=1,10 temp=m(i) m(i)=m(21-i) m(21-i)=temp 10 continue
write(*,200) m 200 format(1x,10i4) End
第九章
二、三种方法打印方阵
(1)
parameter(n=5) integer m(n) data m/1,2,8,2,10/ write(*,100)m(1),m(2),m(3),m(4),m(5) write(*,100)m(2),m(3),m(4),m(5),m(1) write(*,100)m(3),m(4),m(5),m(1),m(2) write(*,100)m(4),m(5),m(1),m(2),m(3) write(*,100)m(5),m(1),m(2),m(3),m(4) 100 format(1x,5i6) End
(2)
integer m(0:5) data m/10,1,2,8,2,10/ do 10,j=1,5 write(*,100)(m(mod(i,5)),i=j,j+4) 10 continue
100 format(1x,5i6) End
(3)
integer m(5,5) do 10,i=1,5 do 20,j=1,5 if(mod(i+j,5).eq.2)m(i,j)=1 if(mod(i+j,5).eq.3)m(i,j)=2 if(mod(i+j,5).eq.4)m(i,j)=8 if(mod(i+j,5).eq.0)m(i,j)=2 if(mod(i+j,5).eq.1)m(i,j)=10 20 continue 10 continue write(*,100)((m(i,j),j=1,5),i=1,5) 100 format(1x,5i6)
End
三、统计成绩
parameter(n=20) integer m(6) data m/6*0/ do 10,i=1,20 read(*,*)g if(g.lt.60) then m(1)=m(1)+1 elseif(g.lt.70) then m(2)=m(2)+1 elseif(g.lt.80) then m(3)=m(3)+1 elseif(g.lt.90) then m(4)=m(4)+1 elseif(g.lt.100) then m(5)=m(5)+1
elseif(g.eq.100) then m(6)=m(6)+1 end if 10 continue write(*,*)\各分数段人数:60下,60-70,70-80,80-90,90-100,100\ write(*,100)m 100 format(1x,6i5) End
四、顺序查找
integer m(20),n logical f f=.false. data m/11,12,13,14,15,16,17,18,19,20,51,52,53,54,55,56,57,58,59,60/ i=1 read(*,*)n do 100,while(i.le.20.and..not.f) if(m(i).eq.n) then f=.true. else i=i+1 end if 100 continue
if(f) write(*,*)'找到',n,'位置',i if(.not.f) write(*,*)'未找到' end