Fortran菜鸟一个,一个简单的程序 竟然有31个错误,求大神指教
系统版本win8.164位,编译环境microsoftvisualstudio2010Intel.Visual.Fortran.Composer.XE.2011下面小弟的...
系统版本 win8.1 64位,编译环境microsoft visual studio2010 Intel.Visual.Fortran.Composer.XE.2011
下面小弟的代码 错误一箩筐 求指教
program tajing
implicit none
real,external::H,LV
real,external::W,C,Ci
real L,V,Rl,Rv,Ht,hli,st
call sub_di(V,W)
end
subroutine sub_di(V,W)
implicit none
real,external::W,Ci
real L,V,Rl,Rv,Ht,hli,st
read Ht,hli
read L,V,Rl,Rv
read st
call W(C,Rl,Rv)
Di=(V/0.785/W(C,Rl,Rv))**0.5
print *,"初步估计塔径Di:",Di
end subroutine
subroutine W(C,Rl,Rv)
implicit none
real,external::C
real Rl,Rv,W
call C(Ci,st)
W=0.8*C*((Rl-Rv)/Rv)**0.5
print *,"选取计算空速W:",W
end subroutine
subroutine C(Ci,st)
implicit none
real,external::Ci
real st,C
read st
call Ci(H,LV)
C=Ci/(20/st)**0.2
print *,"经验系数C:",C
end subroutine
subroutine Ci(H,LV)
implicit none
real,external::H,LV
real Ci
Ci=exp(-4.531+1.6562*H+5.5496*H**2-6.4695*H**3+&
(-0.474675+0.079*H-1.39*H**2+1.3212H**3)*log(expr)LV&
+(-0.07291+0.088307*H-0.49123*H**2+0.43196*H**3)*(log(expr)LV)**2)
print *,"标准系数Ci:",Ci
end subroutine
function H(Ht,hli)
implicit none
real Ht,hli
real H
read Ht,hli
H=Ht-hli
end function
function LV(L,V,Rl,Rv)
implicit none
real L,V,Rl,Rv
real LV
read L,V,Rl,Rv
LV=L*(Rl/Rv)**0.5/V
end function 展开
下面小弟的代码 错误一箩筐 求指教
program tajing
implicit none
real,external::H,LV
real,external::W,C,Ci
real L,V,Rl,Rv,Ht,hli,st
call sub_di(V,W)
end
subroutine sub_di(V,W)
implicit none
real,external::W,Ci
real L,V,Rl,Rv,Ht,hli,st
read Ht,hli
read L,V,Rl,Rv
read st
call W(C,Rl,Rv)
Di=(V/0.785/W(C,Rl,Rv))**0.5
print *,"初步估计塔径Di:",Di
end subroutine
subroutine W(C,Rl,Rv)
implicit none
real,external::C
real Rl,Rv,W
call C(Ci,st)
W=0.8*C*((Rl-Rv)/Rv)**0.5
print *,"选取计算空速W:",W
end subroutine
subroutine C(Ci,st)
implicit none
real,external::Ci
real st,C
read st
call Ci(H,LV)
C=Ci/(20/st)**0.2
print *,"经验系数C:",C
end subroutine
subroutine Ci(H,LV)
implicit none
real,external::H,LV
real Ci
Ci=exp(-4.531+1.6562*H+5.5496*H**2-6.4695*H**3+&
(-0.474675+0.079*H-1.39*H**2+1.3212H**3)*log(expr)LV&
+(-0.07291+0.088307*H-0.49123*H**2+0.43196*H**3)*(log(expr)LV)**2)
print *,"标准系数Ci:",Ci
end subroutine
function H(Ht,hli)
implicit none
real Ht,hli
real H
read Ht,hli
H=Ht-hli
end function
function LV(L,V,Rl,Rv)
implicit none
real L,V,Rl,Rv
real LV
read L,V,Rl,Rv
LV=L*(Rl/Rv)**0.5/V
end function 展开
1个回答
2015-09-08 · 知道合伙人教育行家
关注
展开全部
确实写的一塌糊涂,真不是一两句话就能给你说请的。鉴于你的情况,下面给你一些基本的建议。
1、永远不要想一口吃个胖子。许多初学者都爱犯一个错误,就是想一口气从头写到尾,这是非常错误的编程习惯。再优秀的程序员,写程序也是一步一步写的,因为程序设计遵从的是严格的逻辑,所以你需要确保你第一个模块或者步骤写对了,再去写第二个的,而不是一口气写完,这样再去查报错原因会花费额外的大量的时间。
2、认真看报错,除非你是个女生。不看报错内容这种情况,一般大多发生在女生身上,这个经我多年经历好像确实也没什么办法。但报错其实大多都是英文大白话,如果没有耐心看的话是没法调试程序的。
3、你误解了fortran的子程序和函数。fortran和C语言族不同,fortran的子程序是subroutine,自定义函数是function,二者功能完全不一样。subroutine自身不能返回值,你也不能对它赋值。从你的程序看,你想使用的都是function而不是subroutine,具体用法请查阅资料和例子多看看。
4、你的程序中存在大量的重复定义的变量,这说明你并没有耐心的去查看自己写的程序。切记耐心是最基本的素质。
5、external不是你这种用法,多数情况下也用不到,就不要再用了。
1、永远不要想一口吃个胖子。许多初学者都爱犯一个错误,就是想一口气从头写到尾,这是非常错误的编程习惯。再优秀的程序员,写程序也是一步一步写的,因为程序设计遵从的是严格的逻辑,所以你需要确保你第一个模块或者步骤写对了,再去写第二个的,而不是一口气写完,这样再去查报错原因会花费额外的大量的时间。
2、认真看报错,除非你是个女生。不看报错内容这种情况,一般大多发生在女生身上,这个经我多年经历好像确实也没什么办法。但报错其实大多都是英文大白话,如果没有耐心看的话是没法调试程序的。
3、你误解了fortran的子程序和函数。fortran和C语言族不同,fortran的子程序是subroutine,自定义函数是function,二者功能完全不一样。subroutine自身不能返回值,你也不能对它赋值。从你的程序看,你想使用的都是function而不是subroutine,具体用法请查阅资料和例子多看看。
4、你的程序中存在大量的重复定义的变量,这说明你并没有耐心的去查看自己写的程序。切记耐心是最基本的素质。
5、external不是你这种用法,多数情况下也用不到,就不要再用了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询