- 积分
- 678
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2013-5-13
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
用fortran算月平均值,结果出现有一行没有值(就是说等于0),其他行都有值,不知道那一步错了,看了半天也没看出来,望哪位大神指教一下下,如下图为输出文件的截图(第一列为月份,080100代表08年一月;第二列为所求的平均值,最后一行的值为什么是0)
程序如下(有点长,不太会编):
program main
implicit none
integer n,nn
parameter(n=1578240,nn=36)
integer j,jj,f
integer cs1(n),su(nn),sum,dat(nn),s
real ave(nn)
real cs2(n)
real cs3(n)
real cs4(n)
real d
character hh,cha(n)
open(1,file='d:\gbno2.txt',status='old',form='formatted')
do j=1,n
read(1,'(I7,A10,f8.5,A8,f8.5,A8,f8.5)') cs1(j),cha(j),cs2(j),hh,cs3(j),hh,cs4(j)
end do
close(1)
j=1
do jj=1,nn
if(cs1(j)>80200.and.cs1(j)<80300) then
su(jj)=29
dat(jj)=cs1(j)-1
j=j+29*1440
else if(cs1(j)>90200.and.cs1(j)<90300) then
su(jj)=28
dat(jj)=cs1(j)-1
j=j+28*1440
else if(cs1(j)>100200.and.cs1(j)<100300) then
su(jj)=28
dat(jj)=cs1(j)-1
j=j+28*1440
else if(cs1(j)>80400.and.cs1(j)<80500) then
su(jj)=30
dat(jj)=cs1(j)-1
j=j+30*1440
else if(cs1(j)>80600.and.cs1(j)<80700) then
su(jj)=30
dat(jj)=cs1(j)-1
j=j+30*1440
else if(cs1(j)>80900.and.cs1(j)<81000) then
su(jj)=30
dat(jj)=cs1(j)-1
j=j+30*1440
else if(cs1(j)>81100.and.cs1(j)<81200) then
su(jj)=30
dat(jj)=cs1(j)-1
j=j+30*1440
else if(cs1(j)>90400.and.cs1(j)<90500) then
su(jj)=30
dat(jj)=cs1(j)-1
j=j+30*1440
else if(cs1(j)>90600.and.cs1(j)<90700) then
su(jj)=30
dat(jj)=cs1(j)-1
j=j+30*1440
else if(cs1(j)>90900.and.cs1(j)<91000) then
su(jj)=30
dat(jj)=cs1(j)-1
j=j+30*1440
else if(cs1(j)>91100.and.cs1(j)<91200) then
su(jj)=30
dat(jj)=cs1(j)-1
j=j+30*1440
else if(cs1(j)>100400.and.cs1(j)<100500) then
su(jj)=30
dat(jj)=cs1(j)-1
j=j+30*1440
else if(cs1(j)>100600.and.cs1(j)<100700) then
su(jj)=30
dat(jj)=cs1(j)-1
j=j+30*1440
else if(cs1(j)>100900.and.cs1(j)<101000) then
su(jj)=30
dat(jj)=cs1(j)-1
j=j+30*1440
else if(cs1(j)>91100.and.cs1(j)<91200) then
su(jj)=30
dat(jj)=cs1(j)-1
j=j+30*1440
else
su(jj)=31
dat(jj)=cs1(j)-1
j=j+31*1440
end if
end do
d=0
s=su(1)*1440
jj=1
f=0
do j=1,n
d=d+cs2(j)
if(cs2(j)==0) then
f=f-1
end if
if(j==s) then
sum=su(jj)*1440
ave(jj)=d/(sum+f)
jj=jj+1
s=s+su(jj)*1440
d=0
f=0
end if
end do
open(2,file='d:\avemonth.txt',form='formatted',status='new')
do jj=1,36
write(2,'(I10,A5,f20.15)') dat(jj),hh,ave(jj)
end do
close(2)
end
|
-
图
|