Fortran Coder

查看: 18949|回复: 16

[流程控制] 大家帮我看条隐循环语句

[复制链接]

35

帖子

6

主题

0

精华

熟手

F 币
151 元
贡献
94 点
发表于 2017-11-16 11:23:23 | 显示全部楼层 |阅读模式
WRITE(NLB,REC=1) LREC,(-1,I=1,LREC-1)
其中NLB是指一个二进制文件,里面包含的隐do循环是什么啊?

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

发表于 2017-11-16 12:00:29 | 显示全部楼层
参考中科的网上教程
http://micro.ustc.edu.cn/Fortran/ZJDing/Sec3-1.htm#第3_1_2f
d)    隐DO循环

隐DO循环实际上是带控制循环变量的DO循环,但简化成只有DO循环的第一句,且把关键字DO隐去,成为I=m1,m2,m3形式。它不是独立语句,只是用作为读写语句的输入输出表中一个组成部分,用来控制重复读写的次数。例如:
READ *,(VALUE(I),I=1,20)
表示读入VALUE(1),VALUE(2),…,VALUE(20)的值。
WRITE(*,*)(A,B,N=1,5)
表示在当前设备用默认格式重复输出A、B的值5次。
隐DO循环只能作为输入输出表的一部分出现,不能用于其它场合。此时输入输出表的一般形式为:(I/O列表,循环变量名=初值,终值,增值)。也即把输入输出表与循环控制部分一起用括号括起,中间用逗号分开,称为隐DO表,写在读写语句后面作为读写对象。
隐DO表可以嵌套,如:
PRINT *, ((A(I,J),I=1,3),J=1,3)
先把内层(A(I,J),I=1,3)隐DO表作为输出表,再与隐DO控制J=1,3合成外层隐DO表。其控制机制与嵌套DO循环一致,先内层循环完,外层循环变量加一步长,再循环完内层。其打印值的次序如下:
A(1,1),A(2,1),A(3,1),A(1,2),A(2,2),…,A(3,3)
即先输出第1列,再输出第2列、第3列。如果把J作为内层,I作为外层循环变量,则输出是按行的:
PRINT *,((A(I,J),J=1,3),I=1,3)
则打印输出值的次序为:
A(1,1),A(1,2),A(1,3),A(2,1),A(2,2),…,A(3,3)

35

帖子

6

主题

0

精华

熟手

F 币
151 元
贡献
94 点
 楼主| 发表于 2017-11-16 12:11:08 | 显示全部楼层
pasuka 发表于 2017-11-16 12:00
参考中科的网上教程
http://micro.ustc.edu.cn/Fortran/ZJDing/Sec3-1.htm#第3_1_2f

您好,我的这条语句一直出错,您能帮我看一下吗
OPEN(NASC,FILE=ASCLIB,STATUS='UNKNOWN',ACCESS='DIRECT'
                      FORM='FORMATTED',RECL=LRFC*LREC)
WRITE(NASC,REC=1) LREC,(-1,LREC=-1)
NASC是文件号,LRFC和LREC都是之前定义好的数

953

帖子

0

主题

0

精华

大师

F 币
180 元
贡献
73 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
发表于 2017-11-16 12:14:39 | 显示全部楼层
本帖最后由 vvt 于 2017-11-16 12:20 编辑

你在主楼写的是
WRITE(NLB,REC=1) LREC,(-1,I=1,LREC-1)
上一楼你写的是
WRITE(NASC,REC=1) LREC,(-1,LREC=-1)
其中第二种写法是非法的。

第一种
WRITE(NLB,REC=1) LREC,(-1,I=1,LREC-1)
的意思是
先写入 LREC,然后写入  LREC-1 个 -1。

直观一点,假如 LREC = 6
那么相当于
WRITE(NLB,REC=1) LREC,-1,-1,-1,-1,-1

35

帖子

6

主题

0

精华

熟手

F 币
151 元
贡献
94 点
 楼主| 发表于 2017-11-16 12:20:29 | 显示全部楼层
vvt 发表于 2017-11-16 12:14
你在主楼写的是
WRITE(NLB,REC=1) LREC,(-1,I=1,LREC-1)
上一楼你写的是

那么第二种应该怎么改啊才行啊

953

帖子

0

主题

0

精华

大师

F 币
180 元
贡献
73 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
发表于 2017-11-16 12:21:07 | 显示全部楼层
第二个看你要做什么了。

35

帖子

6

主题

0

精华

熟手

F 币
151 元
贡献
94 点
 楼主| 发表于 2017-11-16 12:21:32 | 显示全部楼层
vvt 发表于 2017-11-16 12:14
你在主楼写的是
WRITE(NLB,REC=1) LREC,(-1,I=1,LREC-1)
上一楼你写的是

第一种写法我现在可以理解,第一种写法文件是个二进制文件,我想自己打开一个文本文件然后有同样的效果

35

帖子

6

主题

0

精华

熟手

F 币
151 元
贡献
94 点
 楼主| 发表于 2017-11-16 12:23:40 | 显示全部楼层
vvt 发表于 2017-11-16 12:21
第二个看你要做什么了。

我就想达到和第一种一样的效果,往文件里写入一样的东西

953

帖子

0

主题

0

精华

大师

F 币
180 元
贡献
73 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
发表于 2017-11-16 12:24:38 | 显示全部楼层
那把第一句复制一下,粘贴一下就可以了。

953

帖子

0

主题

0

精华

大师

F 币
180 元
贡献
73 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
发表于 2017-11-16 12:25:34 | 显示全部楼层
qs2017 发表于 2017-11-16 12:21
第一种写法我现在可以理解,第一种写法文件是个二进制文件,我想自己打开一个文本文件然后有同样的效果 ...

写入文本文件的话,这样写
WRITE(NLB,*) LREC,(-1,I=1,LREC-1)
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-3-29 04:04

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表