24小时热门版块排行榜    

查看: 1615  |  回复: 20

princeado

金虫 (正式写手)

[求助] 大家帮我看一个fortran的程序,我总是计算不出正确的结果

最近刚学fortran,开始编小小程序试手,下面是我弄的一个程序,没有错误,但总是运行不出正确的结果,程序是想通过do循环对数组a进行赋值,用的是语句a(i)=jiecheng(i),jiecheng是我自定义的函数,求每个数对应的阶乘。所有程序如下,哪位高手帮我看看问题在哪里。
        program test01
implicit none
integer :: i
real :: a(5)
real,external :: jiecheng
     do i=1,5
       a(i)=jiecheng(i)   
           end do
             write(*,*) a
           stop
           end
                   function jiecheng(x)
                   implicit none
                   integer x
            real jiecheng
           integer :: ii=1
           integer :: m=1
                   do ii=1,x
                       m=m*ii
                       end do
                           jiecheng=m
                                                  return
                           stop
                           end
回复此楼

» 猜你喜欢

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

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

huruiusst

木虫 (小有名气)


jjdg(金币+1): 感谢参与 2011-11-09 02:06:18
今天看到这帖子才知道还有这种情况  学习了 声明和赋值分开写比较保险
SLS,MD,HRSG
11楼2011-11-08 17:06:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖


princeado(金币+20): 谢了,问题解决了,我再好好研究下原因 2011-11-08 16:10:31
余泽成(金币+1): 谢谢参与应助! 2011-11-08 18:10:24
把 jiecheng 中的下列语句
[cdoe]
     integer :: ii=1
     integer :: m=1
[/code]
修改成下面就可以了:
CODE:
      integer :: ii
      integer :: m
      m=1

至于为什么,可以参考这里的讨论
http://www.newsmth.net/nForum/article/NumComp/102903
2楼2011-11-08 15:50:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hhucy

实习版主 (著名写手)

DOE锅炉工

引用回帖:
2楼: Originally posted by snoopyzhao at 2011-11-08 15:50:49:
把 jiecheng 中的下列语句
[cdoe]
     integer :: ii=1
     integer :: m=1
[/code]
修改成下面就可以了:
CODE:
      integer :: ii
      integer :: m
      m=1

至于为什么,可以参考 ...

好可怕的变量
人生那么多不确定,你怕什么
3楼2011-11-08 16:06:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

princeado

金虫 (正式写手)

引用回帖:
2楼: Originally posted by snoopyzhao at 2011-11-08 15:50:49:
把 jiecheng 中的下列语句
[cdoe]
     integer :: ii=1
     integer :: m=1
[/code]
修改成下面就可以了:
CODE:
      integer :: ii
      integer :: m
      m=1

至于为什么,可以参考 ...

原因不是很清楚,您能再帮我解释一下吗?
4楼2011-11-08 16:18:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)


余泽成(金币+1): 谢谢参与应助! 2011-11-08 18:10:46
fortran 对声明阶段赋值的变量自动赋予 SAVE 属性,这样,在这个子程的连续调过程,在下一次执行时,其初始值为一次调用结束时的值……

另外,子程序的 return 之后,不要用 stop,stop 只在应该结束程序时才使用……
5楼2011-11-08 16:18:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

princeado

金虫 (正式写手)

引用回帖:
5楼: Originally posted by snoopyzhao at 2011-11-08 16:18:53:
fortran 对声明阶段赋值的变量自动赋予 SAVE 属性,这样,在这个子程的连续调过程,在下一次执行时,其初始值为一次调用结束时的值……

另外,子程序的 return 之后,不要用 stop,stop 只在应该结束程序时才使 ...

您的意思是是不是我原来的程序每次调用完之后,m的值都是上一次结束时的m值,所以才会出错?
6楼2011-11-08 16:28:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

princeado

金虫 (正式写手)

引用回帖:
5楼: Originally posted by snoopyzhao at 2011-11-08 16:18:53:
fortran 对声明阶段赋值的变量自动赋予 SAVE 属性,这样,在这个子程的连续调过程,在下一次执行时,其初始值为一次调用结束时的值……

另外,子程序的 return 之后,不要用 stop,stop 只在应该结束程序时才使 ...

还有就是,integer :: m
                   m=1
与 integer :: m=1 两种声明变量的方式的区别是什么啊?
7楼2011-11-08 16:37:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

princeado

金虫 (正式写手)

引用回帖:
6楼: Originally posted by princeado at 2011-11-08 16:28:48:
您的意思是是不是我原来的程序每次调用完之后,m的值都是上一次结束时的m值,所以才会出错?

我测试过了,我原来的程序是每次m的初始值是上次计算完的值。但是还是不明白两种声明方式的区别。
8楼2011-11-08 16:39:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

★ ★
余泽成(金币+2): 谢谢参与应助! 2011-11-08 18:10:59
余泽成: 专家考核存档! 2011-11-08 18:11:11
引用回帖:
7楼: Originally posted by princeado at 2011-11-08 16:37:35:
还有就是,integer :: m
                   m=1
与 integer :: m=1 两种声明变量的方式的区别是什么啊?

区别在于
integer :: m
m=1
中的 m是一个局变变量,不具有 SAVE 属性,每次调用该子程时,m 都会被重新赋值。

而 integer :: m=1 中的 m 虽然是一个局部变量,但具有 SAVE 属性,这里的 1 只是主程序初始化时的取值,在随后的执行中,它的值会是上一次该子程序执行结束时的值。

至于什么是 SAVE 属性,去查一下标准吧,我还真讲不清楚。大概的意思是,该变量的最值取值会被保留下来,直到主程序结束。
9楼2011-11-08 16:53:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

princeado

金虫 (正式写手)

引用回帖:
9楼: Originally posted by snoopyzhao at 2011-11-08 16:53:36:
区别在于
integer :: m
m=1
中的 m是一个局变变量,不具有 SAVE 属性,每次调用该子程时,m 都会被重新赋值。

而 integer :: m=1 中的 m 虽然是一个局部变量,但具有 SAVE 属性,这里的 1 只是主程序初始化 ...

好的,非常感谢了,我再琢磨琢磨啊!
10楼2011-11-08 16:56:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 princeado 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 基你太美 +13 lyfbangong 2024-06-24 15/750 2024-06-26 17:12 by lyfbangong
[硕博家园] 怎么带研究生? +24 豆豆小小2 2024-06-20 42/2100 2024-06-26 16:13 by wangyu1986w
[基金申请] 博后面上今天下午会公布吗?有无消息? +26 hajkdfdf 2024-06-24 43/2150 2024-06-26 16:04 by kyukitu
[基金申请] 要持续整治滥发“帽子”、“牌子”之风 +6 babu2015 2024-06-25 6/300 2024-06-26 14:52 by felicity6056
[基金申请] 刚刚收到科研之友邮件 +30 olivermiaoer 2024-06-19 44/2200 2024-06-26 13:11 by 芦苇薇薇~
[硕博家园] 难道我真的要放弃吗? +42 133456 2024-06-20 44/2200 2024-06-26 12:32 by lyfbangong
[教师之家] 神奇的中医 +8 水冰月月野兔 2024-06-24 10/500 2024-06-26 12:10 by lyfbangong
[有机交流] 过柱子,产品,杂质在是 pe:ea=100:1 也一起出来? +5 w256 2024-06-25 5/250 2024-06-26 09:31 by 小木木cc
[硕博家园] 申博雅思求助 +6 刘嘉研究究 2024-06-24 7/350 2024-06-26 07:08 by 小李醒yy
[基金申请] 博后面上到底什么时候出结果??? +7 爱学lsy 2024-06-24 7/350 2024-06-25 19:24 by 暴走的蒜泥
[有机交流] 对苯乙烯磺酰氯的合成机理 25+3 该死的科研 2024-06-24 5/250 2024-06-25 17:30 by 王学士
[基金申请] 能看出是否上会了吗 +10 articlefan 2024-06-23 15/750 2024-06-25 16:05 by 请慎重修改昵称
[第一性原理] Vasp 版权问题 10+4 竹叶青9 2024-06-22 5/250 2024-06-25 14:58 by 无所谓109
[硕博家园] 数据不好 +5 Hetai 2024-06-23 7/350 2024-06-25 12:37 by 1591099
[基金申请] 演员杨幂在核心期刊发表论文,中国广播电视学期刊 +9 babu2015 2024-06-22 12/600 2024-06-25 11:05 by 我是勇敢牛牛
[有机交流] 求助析晶问题 20+4 dengdawang 2024-06-24 5/250 2024-06-24 21:22 by cc116
[教师之家] 复旦夏同学提出高校成年人学生退学不应该让家长审核,大家认同吗? +10 苏东坡二世 2024-06-22 17/850 2024-06-24 16:52 by wanghuawei
[有机交流] 三颈瓶加热 5+4 wzjwx888 2024-06-20 4/200 2024-06-24 10:11 by w87437985
[基金申请] 国自然青年基金,1A4B能上会吗?青年和面上的上会标准是一样的吗? +19 今晚推荐22 2024-06-20 32/1600 2024-06-23 23:17 by andywei1028
[博后之家] 在国内某高校做全职博士后2年,现在找到新的单位,出站或退站对新工作有什么影响? +10 nxplfcc 2024-06-20 10/500 2024-06-22 07:52 by 徐长安
信息提示
请填处理意见