循环结构1
program ex1 implicit none integer i real sum,tave,t,tmax sum=0.0 tmax=0.0 do i=1,7 read*,t sum=t+sum if(t>tmax) then tamx=t end if end do tave=sum/7 print*,'tave=',tave print*,'tmax=',tmax end
程序源码:
program main real precip print *,'输入每六小时降水量' read *,precip do while(precip>=0.and.precip<=1000) !或者是(precip.ge.0.and.precip.le.1000) print *,'降水量(mm)为:',precip read *,precip end do print *,'输入数据异常' end
运行截图:
program ex08_08 implicit none integer i,n real ::s=0,t read*,n do i=1,n t=1./(i*(i+1)) s=s+t if(abs(t)<=1.E-5) exit !如果把exit另起一行,运行不正确 end do if(i==n+1) i=i-1 !逻辑IF语句一般IF条件和语句放到一行,若把i=i-1放到下一行,则运行也不正确 print*,'sum=',s,'term=',i end
program ex08_08 implicit none integer i do i=1,10 if(i==9) cycle print *,i end do end
代码一:
program main implicit none integer num,i real t,tsum,tave tsum=0.0 num=0 do i=1,31 read*, t if(t==999.0) cycle tsum=tsum+t num=num+1 end do tave=tsum/num print*,tave end
代码二:
program main
implicit none
integer num,i
real t,tsum,tave
tsum=0.0
num=0
do i=1,31
read*, t
if(t/=999.0) then
tsum=tsum+t
num=num+1
end if
end do
tave=tsum/num
print*,tave
end
程序源码:
program main implicit none integer ::i real ::r=6371,delta,dx,pi parameter(pi=3.1215926) delta=pi/180 do i=-90,90 dx=r*cos(i*delta)*(1.*delta) if(i<0) then ! 南半球 print *,i*(-1),'S:',dx,'km' else if (i==0) then ! 赤道 print *,'Equator:',dx,'km' else if (i>0) then ! 北半球 print *,i,'N:',dx,'km' end if end do end
运行截图:
程序源码:
program ex03_14 implicit none integer iy,im character year*4,mo*2 character dir*100 !dir变量由于其有效长度是变化的,故定义一个足够唱的字符串 do iy=1979,1990 write(year(1:4),'(i4)') iy !一般有格式输出为write(*,'格式'),iy 是年的循环变量,它会从1979年变化到1990年,如果write(*,'i4') iy的话,那么是把iy输出到屏幕上面,但是现在不是要把它输出到屏幕,而是把iy作为一个字符型的数值输出给红色字体所表示的year中去,而year是所定义的具有四个字符长度的字符型变量,所以就是把1979四个字符长的数值变成了一个字符型的数据,输出给了变量,所以write就是把iy变量的值赋值给了year(1:4),iy是个整型,year是个字符型,但是iy在赋值的时候是按照year的形式来进行最后的这个变量的数据类型,所以1979在iy那里是整型,但是在year那里就变成了字符型,且字符长度有四个,所以它是把year的1-4的四个字符按照1979来开始存放,第一次循环是1979,第二次循环就是1980了 mo=' ' !月比年特殊一点,因为它有可能是一位数的月,也有可能是两位数的月,所以在循环之前,给mo进行空格的保留,将mo赋值为2个或者1个空格均可以 do im=1,12 if(im<10)then write(mo(1:1),'(i1)')im !i1格式是针对写的变量的类型,即i1 else write(mo(1:2),'(i2)')im end if dir='e:\data\'//trim(year)//'\'//trim(mo)//'\precip' !trim是去掉字符型变量中所有的空格,此时尤其针对mo,如果当时给它赋了两个空格,它如果只有一位数的月,那么它其实会多出来一个空格的,所以用trim把空格给去掉 print*,trim(dir) !保证输出的时候没有空格 end do end do end
运行截图:
方法一:
方法二:
program ex03_14 implicit none integer iy,im character year*4,mo*2 character dir*100 !dir变量由于其有效长度是变化的,故定义一个足够唱的字符串 do iy=1979,1990 write(year(1:4),'(i4)') iy !一般有格式输出为write(*,'格式'),iy 是年的循环变量,它会从1979年变化到1990年,如果write(*,'i4') iy的话,那么是把iy输出到屏幕上面,但是现在不是要把它输出到屏幕,而是把iy作为一个字符型的数值输出给红色字体所表示的year中去,而year是所定义的具有四个字符长度的字符型变量,所以就是把1979四个字符长的数值变成了一个字符型的数据,输出给了变量,所以write就是把iy变量的值赋值给了year(1:4),iy是个整型,year是个字符型,但是iy在赋值的时候是按照year的形式来进行最后的这个变量的数据类型,所以1979在iy那里是整型,但是在year那里就变成了字符型,且字符长度有四个,所以它是把year的1-4的四个字符按照1979来开始存放,第一次循环是1979,第二次循环就是1980了 mo=' ' !月比年特殊一点,因为它有可能是一位数的月,也有可能是两位数的月,所以在循环之前,给mo进行空格的保留,将mo赋值为2个或者1个空格均可以 do im=1,12 write(mo(1:2),'(i2.2)') im !i2.2格式是针对写的变量的类型,即im dir='e:\data\'//trim(year)//'\'//trim(mo)//'\precip' !trim是去掉字符型变量中所有的空格,此时尤其针对mo,如果当时给它赋了两个空格,它如果只有一位数的月,那么它其实会多出来一个空格的,所以用trim把空格给去掉 print*,trim(dir) !保证输出的时候没有空格 end do end do end
上一次作业已经利用选择结构语句,根据人体舒适度指数数值,判断人体舒适度指数等 级。本次作业进一步优化程序,利用循环结构语句简化程序。 按照武汉,深圳,温州,北京,哈尔滨的循环顺序,计算 2 月 23 日人体舒适度指数数 值,判断人体舒适度指数等级,按城市名、指数等级、体感输出结果。 体感只输出 ,前的文字即可,例如:寒冷。
1、人体舒适度计算公式:
其中:温度 T 设定为日平均气温(单位:℃),RH 为相对湿度(单位:%),V 为日平均风 速(单位:m/s)。
我的程序源码:
PROGRAM main IMPLICIT NONE REAL T,RH,V,I INTEGER n CHARACTER(8) city print*,'请输入温度 相对湿度 日平均风速' do n=1,5 READ*,T,RH,V I=(1.8*T+32)-0.55*(1-RH/100)*(1.8*T-26)-3.2*(V**(1./2.)) if(n==1) city='武汉' if(n==2) city='深圳' if(n==3) city='温州' if(n==4) city='北京' if(n==5) city='哈尔滨' if(I<=25)then print*,city,'1',' ','寒冷' else if (25<I.and.I<=38)then print*,city,'2',' ','冷' else if (38<I.and.I<=50)then print*,city,'3',' ','凉' else if (50<I.and.I<=55)then print*,city,'4',' ','凉爽' else if (55<I.and.I<=70)then print*,city,'5',' ','舒服' else if (70<I.and.I<=75)then print*,city,'6',' ','暖和' else if (75<I.and.I<=80)then print*,city,'7',' ','热' else if (80<I.and.I<=85)then print*,city,'8',' ','炎热' else if (I>85)then print*,city,'9',' ','酷热' END IF END DO END
我的运行截图:
标准答案:
标准答案运行截图: