嗨,我是新来的,想要解决这个问题:
do k=1,31
Data H(1,k)/0/
End do
do l=1,21
Data H(l,1)/0.5*(l-1)/
End do
do m=31,41
Data H(17,m)/0/
End do
do n=17,21
Data H(n,41)/0.5*(n-17)/
End do
我得到l和n的错误,说它是DATA语句中的语法错误。有谁知道如何解决这个问题?
答案 0 :(得分:1)
这里有三个问题,而不只是" l
"和" n
"环路。
第一个问题是data
语句中的值不能是任意表达式。特别是,它们必须是常数; 0.5*(l-1)
不是常数。
第二个问题是对象列表中的边界也必须是常量(表达式); l
不是一个常数表达式。
对于第一个,还值得注意的是数据值列表中的*
具有特殊含义,并且它不是乘法运算符。 *
提供重复计数,重复计数0.5
无效。
通过使用
这样的结构,您可以非常简单地修复第二点data H(1,1:31) /31*0./ ! Note the repeat count specifier
在循环外部,或使用隐含循环
data (H(1,k),k=1,31) /31*0./
为" l
"做些事情。循环更乏味
data H(1:21,1) /0., 0.5, 1., 1.5, ... /
我们必须非常小心指定的值的数量。这不可能是动态的。
第三个问题是您不能多次为元素指定显式初始化。看看你的前两个循环:如果这有效,你就要初始化H(1,1)
两次。即使给出相同的值,这仍然无效。
嗯,实际上你有四个问题。第四个与关于动态数值的关系有关。您可能不想进行显式初始化。虽然可以做你想做的事情,但只要使用这些限制不适用的作业。
do l=1,21
H(l,1) = 0.5*(l-1)
End do
是的,有时复杂的显式初始化是理想的事情,但在这种情况下,我假设是新代码,保持简单是好的。 "初始化"执行作业的代码部分远远超过"现代"。