24小时热门版块排行榜    

查看: 1611  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考博] 这个博士要读吗 +9 Sea Breeze 2024-06-16 17/850 2024-06-17 19:50 by zeolitess
[基金申请] F口信息学部拿面上,大概需要什么样的成果 +6 _奋黎_ 2024-06-16 8/400 2024-06-17 19:31 by guoer713108
[高分子] 寻找聚酯反应釜 +3 茕茕恭煮 2024-06-15 4/200 2024-06-17 18:18 by sunliyan123
[找工作] 药学硕士找不到工作,打算去做科研助理了 +5 pom戴墨镜 2024-06-14 11/550 2024-06-17 17:16 by pom戴墨镜
[基金申请] 面青地会评时间 +8 tanjydd 2024-06-15 8/400 2024-06-17 17:08 by 小龙虾2008
[基金申请] 博后面上今天有bug可以看到是否资助? +22 lyfbangong 2024-06-12 33/1650 2024-06-17 16:17 by carolloo
[文学芳草园] 累并快乐着 +14 MYHLD521 2024-06-14 14/700 2024-06-17 14:51 by shl2112501
[基金申请] 化学会年会改成一年开一次了? +6 babu2015 2024-06-12 14/700 2024-06-17 14:41 by 我想更懂你29
[硕博家园] 博士毕业高校和就业的相关问题 +6 SCITOPPP 2024-06-14 10/500 2024-06-17 10:08 by SCITOPPP
[博后之家] 山东大学(青岛)“天然药物生物智造”课题组 招聘“博士后”(年薪20.4-55.6万元) +5 第二种态度 2024-06-11 11/550 2024-06-17 10:08 by 小懂事k
[找工作] 成都产品质量检测研究院 200+3 鲸鱼663 2024-06-11 10/500 2024-06-17 08:31 by yudaoqian88
[找工作] 应届大龄土博教职选择,石河子大学和广西大学 10+4 茅山老道士 2024-06-10 34/1700 2024-06-16 22:05 by yugege2009
[基金申请] 希望今年自己国自然面上项目和老婆青年项目能中! +7 恐龙爸爸 2024-06-14 7/350 2024-06-16 14:48 by redfish105
[找工作] 杭电、天津科技、青农和宁波工程学院如何选? +11 味道很好啊 2024-06-13 21/1050 2024-06-16 13:57 by wanglongzh
[论文投稿] 投稿被一个审稿人恶意评审了怎么样? +5 1chen 2024-06-14 7/350 2024-06-15 23:15 by xy66xy
[基金申请] BO4的YQ答辩通知发布了吗? +6 博学笃行 2024-06-11 6/300 2024-06-15 16:04 by 悲催科研狗
[论文投稿] 求机械类四区sci推荐 5+3 迷茫小旷 2024-06-14 4/200 2024-06-15 11:25 by bobvan
[考博] 博导选择 +3 bing85977 2024-06-12 3/150 2024-06-13 15:34 by 我是邱尧
[硕博家园] 考博应该从哪里开始准备 +6 亮姐2019 2024-06-11 8/400 2024-06-13 12:53 by 帕秋莉GO
[硕博家园] 申博 +3 悦悦小小鱼 2024-06-12 3/150 2024-06-12 15:11 by chen5805
信息提示
请填处理意见