24小时热门版块排行榜    

查看: 2297  |  回复: 8

li_clifff

银虫 (正式写手)

[求助] 请教一个read的用法,谢谢

请教一个问题,我要搞清楚程序中这两个语句的结果:

INTEGER:: k, nr,i, nodof=3,nn=96
INTEGER,ALLOCATABLE:: nf(:, : )
ALLOCATE nf(nodof,nn)
READ(10,*)nr,(k,nf(:,k),i=1,nr)

其中文件10为:
81
1 1 0 0   2 1 0 0   3 1 1 0   4 1 0 0   5 1 1 0   6 1 0 0
7 1 1 0   8 1 0 0   9 1 1 0  10 1 0 0  11 1 1 0  12 0 0 0
13 1 0 1  14 1 0 1  15 1 0 1  16 1 0 1  17 0 0 0  18 0 1 0
19 1 0 1  21 1 0 1  23 1 0 1  25 1 0 1  27 1 0 1  28 0 1 0
29 0 0 0  30 1 0 1  31 1 0 1  32 1 0 1  33 1 0 1  34 0 0 0
35 0 1 0  36 1 0 1  38 1 0 1  40 1 0 1  42 1 0 1  44 1 0 1
45 0 1 0  46 0 0 0  47 1 0 1  48 1 0 1  49 1 0 1  50 1 0 1
51 0 0 0  52 0 1 0  53 1 0 1  54 1 1 1  55 1 0 1  57 1 0 1
59 1 0 1  61 1 0 1  62 0 1 0  63 0 0 0  64 1 0 1  65 1 0 1
66 1 0 1  67 1 0 1  68 0 0 0  69 0 1 0  70 1 0 1  72 1 0 1
74 1 0 1  76 1 0 1  78 1 0 1  79 0 1 0  80 0 0 0  81 1 0 1
82 1 0 1  83 1 0 1  84 1 0 1  85 0 0 0  86 0 1 0  87 0 0 0
88 0 1 0  89 0 0 0  90 0 1 0  91 0 0 0  92 0 1 0  93 0 0 0
94 0 1 0  95 0 0 0  96 0 1 0
在debug模式下,nr值为81,k为96(?),nf是3*96的数组,i等于82(?)

能帮我解释下为什么会这样吗?非常感谢
其中nf数组前面几个值为:




[ Last edited by li_clifff on 2011-10-15 at 00:57 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mchen10

金虫 (正式写手)

★ ★
余泽成(金币+2): 谢谢参与应助,欢迎常来程序语言版! 2011-10-15 19:13:10
ben_ladeng: 专家考核存档 2011-10-17 11:51:35
读入第一个数据, 为nr (number of rows?)
然后 4个一组地读入 到k, nf(1,k), nf(2,k), nf(3,k); 一共读 nr次
更痛苦的是梦没醒路已经不能走了
2楼2011-10-15 03:08:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

★ ★
余泽成(金币+2): 谢谢参与应助! 2011-10-15 19:13:21
li_clifff(金币+10): 恩,明白了,谢谢 2011-10-15 23:22:40
ben_ladeng: 专家考核存档 2011-10-17 11:51:44
ALLOCATE nf(nodof,nn) 这句话是错误的吧?
ALLOCATE(nf(nodof,nn))
如果在这之后加一句:
nf = 100000
然后在程序结束之前加上:
CODE:
do i=1,96
   write(*,*) nf(1:3,i)
end do

你就知道你的程序是在做什么了……
3楼2011-10-15 14:30:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

li_clifff

银虫 (正式写手)

引用回帖:
3楼: Originally posted by snoopyzhao at 2011-10-15 14:30:40:
ALLOCATE nf(nodof,nn) 这句话是错误的吧?
ALLOCATE(nf(nodof,nn))
如果在这之后加一句:
nf = 100000
然后在程序结束之前加上:
CODE:
do i=1,96
   write(*,*) nf(1:3,i)
end do

你就知道你 ...

恩,再请教一个小问题,如果在主程序里定义了变量数组nf是3*9的,即nf(3,9),而且主程序里的 call subroutine(nf,...),对应的subroutine里面对nf定义为nf(2,9),会有什么问题吗?运行时候到底是nf(3,9),还是nf(2,9),刚想到有这个问题,就顺便问一下,谢谢
4楼2011-10-15 23:26:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

引用回帖:
4楼: Originally posted by li_clifff at 2011-10-15 23:26:37:
恩,再请教一个小问题,如果在主程序里定义了变量数组nf是3*9的,即nf(3,9),而且主程序里的 call subroutine(nf,...),对应的subroutine里面对nf定义为nf(2,9),会有什么问题吗?运行时候到底是nf(3,9) ...

你确定你这种做法可以编译通过吗?呵呵……

如果可以的话,给个示例看看……
5楼2011-10-16 13:01:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

li_clifff

银虫 (正式写手)

引用回帖:
5楼: Originally posted by snoopyzhao at 2011-10-16 13:01:30:
你确定你这种做法可以编译通过吗?呵呵……

如果可以的话,给个示例看看……

program  ex0804
implicit none
  integer :: a(2)
  DATA  a /1,2/
  integer :: b(2)
  data b  /2,3/
  call add(a,b)  ! 把变量a及b交给子程序add来处理
  stop
end


subroutine add(first, second)
implicit none
  integer :: first, second ! first,second的内容会从CALL时得到
  write(*,*) first+second
  return
end
6楼2011-10-16 22:51:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖


jjdg(金币+1): 感谢参与 2011-10-17 02:32:35
li_clifff(金币+10): 谢谢你的评论,如果数组参数在主程序和多个子程序都出现,是不是也是这样一步步传递,读入子程序,运行子程序出来新的数组,再读入下一个子程序。。。 2011-10-17 09:44:20
引用回帖:
6楼: Originally posted by li_clifff at 2011-10-16 22:51:30:
program  ex0804
implicit none
  integer :: a(2)
  DATA  a /1,2/
  integer :: b(2)
  data b  /2,3/
  call add(a,b)  ! 把变量a及b交给子程序add来处理
  stop
end


subroutine add(first, se ...

由于 Fortran 是 call by reference,所以,关键还是要看子程中相关变理的声明了……

在你的这个例子中,很显然,只取其中的一个数值。

对于你前面说的,其实,传递给子程的只是数组对应的第一个数值的地址,后面到底如何取值,还要看子程中的定义……这种情况下,一定要注意 Fortran 中是列优先的存贮方式……

» 本帖已获得的红花(最新10朵)

7楼2011-10-17 00:11:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

li_clifff

银虫 (正式写手)

送鲜花一朵
引用回帖:
7楼: Originally posted by snoopyzhao at 2011-10-17 00:11:07:
由于 Fortran 是 call by reference,所以,关键还是要看子程中相关变理的声明了……

在你的这个例子中,很显然,只取其中的一个数值。

对于你前面说的,其实,传递给子程的只是数组对应的第一个数值的地址 ...

program  ex0804
implicit none
integer :: a(3)
DATA  a /1,2,3/
integer :: b(3)
data b  /4,5,6/
call add(a,b)  ! 把变量a及b交给子程序add来处理
call add1(a,b)

  stop
end

subroutine add(first, second)
implicit none
  integer :: first(2), second(2) ! first,second的内容会从CALL时得到
  write(*,*) first+second
  return
end

subroutine add1(first, second)
implicit none
  integer :: first, second ! first,second的内容会从CALL时得到
  write(*,*) first+second
  return
end

为什么运行的结果是
     5      7
     5
8楼2011-10-17 09:59:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

li_clifff

银虫 (正式写手)

没有问题,我自己弄错了

program  ex0804
implicit none
!integer:: a=1
integer :: a(3)
DATA  a /1,2,3/
!integer:: b=2
integer :: b(3)
data b  /4,5,6/
call add(a,b)  ! 把变量a及b交给子程序add来处理
call add1(a,b)

stop
end


subroutine add(first, second)
implicit none
  integer :: first(2), second(2) ! first,second的内容会从CALL时得到
! write(*,*)  first+second
  first = first + second
  second =2*second
  return
end


subroutine add1(first, second)
implicit none
  integer :: first(2), second(2) ! first,second的内容会从CALL时得到
  write(*,*) first+second
  return
end

运行结果是

       13               17
9楼2011-10-17 10:36:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 li_clifff 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 招收调剂硕士 +4 lidianxing 2026-03-19 12/600 2026-03-20 12:25 by lidianxing
[考研] 材料学硕297已过四六级求调剂推荐 +5 adaie 2026-03-19 5/250 2026-03-20 10:44 by EBSD
[考研] 材料专硕英一数二306 +6 z1z2z3879 2026-03-18 6/300 2026-03-20 08:49 by xingguangj
[考研] 生物学调剂招人!!! +3 山海天岚 2026-03-17 4/200 2026-03-19 21:34 by 怎么释怀
[考研] 一志愿南京理工大学085701资源与环境302分求调剂 +3 葵梓卫队 2026-03-18 5/250 2026-03-19 19:35 by 给你你注意休息
[考研] 求调剂 +3 Mqqqqqq 2026-03-19 3/150 2026-03-19 14:11 by peike
[考研] 化学求调剂 +3 临泽境llllll 2026-03-17 4/200 2026-03-19 13:59 by houyaoxu
[考研] 一志愿华中科技大学,080502,354分求调剂 +4 守候夕阳CF 2026-03-18 4/200 2026-03-18 22:16 by li123456789.
[考研] 一志愿武理材料305分求调剂 +5 想上岸的鲤鱼 2026-03-18 6/300 2026-03-18 17:53 by 无际的草原
[考研] 311求调剂 +11 冬十三 2026-03-15 12/600 2026-03-18 14:36 by 星空星月
[考研] 材料专硕306英一数二 +10 z1z2z3879 2026-03-16 13/650 2026-03-18 14:20 by 007_lilei
[考研] 收复试调剂生 +4 雨后秋荷 2026-03-18 4/200 2026-03-18 14:16 by elevennnne
[考研] 304求调剂 +12 小熊joy 2026-03-14 13/650 2026-03-18 12:34 by Linda Hu
[考研] 303求调剂 +4 睿08 2026-03-17 6/300 2026-03-18 11:01 by Iveryant
[考研] 考研求调剂 +3 橘颂. 2026-03-17 4/200 2026-03-17 21:43 by 有只狸奴
[考研] 301求调剂 +4 A_JiXing 2026-03-16 4/200 2026-03-17 17:32 by ruiyingmiao
[考研] 材料与化工专硕调剂 +5 heming3743 2026-03-16 5/250 2026-03-17 14:03 by 勇敢太监王公公
[考研] 277材料科学与工程080500求调剂 +3 自由煎饼果子 2026-03-16 3/150 2026-03-16 14:10 by 运气yunqi
[考研] 0856专硕279求调剂 +5 加油加油!? 2026-03-15 5/250 2026-03-15 11:58 by 2020015
[考研] 297一志愿上交085600求调剂 +5 指尖八千里 2026-03-14 5/250 2026-03-14 17:26 by a不易
信息提示
请填处理意见