例题1 循环输入一周日最高气温,判断最高气温,并计算一周平均最高气温。求出这几天的哪一天的气温最高?2014年3月23日-29日南京日最高气温如下:16.0 17.0 17.0 18.0 16.0 22.0 24.0 (单位:℃)
program main integer i,j,ri real t,tmax,tave,sum real::wendu(7) tmax=0.0 sum=0.0 do i=1,7 read *,wendu(i) sum=sum+wendu(i) if(wendu(i)>=tmax) then tmax=wendu(i) j=i end if end do tave=sum/7.0 ri=23+j-1 print*,‘tmax=‘,tmax print*,‘tave=‘,tave write(*,200) ‘最高气温是第‘, j,‘天‘ write(*,200) ‘最高气温是3月‘, ri,‘日‘ 200 format(A17,I2,A5) 100 format(A20,I2,A6) end
分析:上述j只能保留最后一次i的值,不能保留所有i的值,所以要想完成拓展例一,就要对程序进行改进。
拓展例一:例题1 循环输入一周日最高气温,判断最高气温,并计算一周平均最高气温。求出这几天的哪一天的气温最高?如果一周有多天温度一样,都是最高,那应该怎么办?2014年3月23日-29日南京日最高气温如下:23.0 31.0 25.0 31.0 24.0 31.0 27.0 (单位:℃)
方法一:
program main integer i,j real jishu,ri real t,tmax,tave,sum real::wendu(7) tmax=0.0 sum=0.0 m=1 do i=1,7 read *,wendu(i) sum=sum+wendu(i) if(wendu(i)>=tmax) then tmax=wendu(i) end if end do do i=1,7 if(tmax==wendu(i)) then jishu(m)=i m=m+1 end if end do do j=1,m-1 ri(j)=23+jishu(j)-1 end do print *,‘tmax=‘,tmax print *,‘tave=‘,tave write(*,*) ‘最高气温是:‘ do j=1,m-1 write(*,100) ‘第‘,jishu(j),‘天‘ end do write(*,*) ‘最高气温的日期是:‘ do j=1,m-1 write(*,200) ‘3月‘,ri(j),‘日‘ end do 100 format(A10,I3,A5) 200 format(A20,I3,A6) end
(代码有误,记得修改)
方法二: program ex0309 real t(7),tmax,sum,tave integer i,m tmax=0.0;sum=0.0;m=1 do i=1,7 read *,t(i) sum=t(i)+sum if(t(i)>=tmax) then tmax=t(i) m=i end if end do tave=sum/7.0 print*,‘tmax=‘,tmax print*,‘气温最高日有:‘ do i=1,7 if(t(i)==tmax) write(*,"(1X,‘3月‘,I2,‘日‘)") i+22 end do print*,‘tave=‘,tave end
例2 求同一条经线上,相同格点的距离
PROGRAM MAIN IMPLICIT NONE INTEGER ::i REAL ::r=6371,delta,dy,pi PARAMETER(pi=3.14159) delta=pi/180 DO i=0,180 !i代表经度 dy=r*1*delta PRINT*,i,dy,‘km‘ END DO END
例4 根据所给 5 个气象标准站的纬度、经度数据,利用顺序结构设计、循环结 构设计和选择结构设计的知识,编写程序判断其是否位于江淮地区(109?E 以东, 28?~34?N)的站点。要求如下:
(1)站号需说明为 8 位字符型,因为在 GrADS 软件绘图中站点数据有一定的 书写规则;
(2)表控输入气象标准站站号及其纬度、经度数据;
(3)在屏幕上输出站点号和是否位于江淮地区的判断信息。
我的程序源码:
PROGRAM main IMPLICIT NONE INTEGER I REAL N,E CHARACTER(LEN=8) str PRINT*,‘请输入经度 纬度‘ DO I=1,5 READ*,N,E IF(I==1) str=‘57865‘ IF(I==2) str=‘58626‘ IF(I==3) str=‘57328‘ IF(I==4) str=‘58251‘ IF(I==5) str=‘54714‘ IF(E>109)THEN SELECT CASE(INT(N)) CASE(28:34) PRINT*,str,‘属于江淮地区‘ CASE DEFAULT PRINT*,str,‘不属于江淮地区‘ END SELECT ELSE PRINT*,str,‘不属于江淮地区‘ END IF END DO END
我的运行截图:
标准答案:
program main integer,parameter::ist=5 real lat,lon character*8 id integer i do i=1,ist write(*,"(‘输入站点的站号、纬度和经度:‘,\)") read(*,*)id,lat,lon if(lon>109.0)then if(lat>=28.0.and.lat<=34.0)then write(*,*)id,‘站位于江淮地区‘ else write(*,*)id,‘站不位于江淮地区‘ endif else write(*,*)id,‘站不位于江淮地区‘ endif enddo End
标准运行截图:
原文:https://www.cnblogs.com/lxl720/p/12748359.html