24小时热门版块排行榜    

查看: 584  |  回复: 8
当前主题已经存档。

journalemu

[交流] 【求助】知道这个程序为什么报错嘛? 【已解决】

implicit real*8(a-h,o-z)
read(*,*) n
write(*,*)n, fac(n)
read(*,*) m
write(*,*)m, fac(m)
end

function fac(n)
implicit real*8(a-h,o-z)
data f/1/

write(*,*) '***'
if(n.lt.0) return

do i=1,n
f=f*i
enddo
fac=f
return
end

在练习save应用的时候,写了上个小的子程序,看看Save用法的,没想到不对,报错如附件中所示,愿高手指点,奉上20金币酬谢。

上面个小程序,是输入一个数,求其的阶乘的程序, 我就只求为啥会报这个错,多谢。多谢。

[ Last edited by nono2009 on 2009-12-29 at 16:17 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dic213

木虫 (著名写手)

第三军团儿童团团长

★ ★ ★
波不动(金币+1,VIP+0):感谢应助! 12-27 19:38
journalemu(金币+2,VIP+0):谢谢。 12-28 10:26
data f/1/

上面这句是干什么的,是给f赋初值吗?
不是这样的吧?
你直接用f=1,就对了。
春梦随云散, 飞花逐水流. 寄言众儿女, 何必觅闲愁.
2楼2009-12-27 19:22:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

journalemu

引用回帖:
Originally posted by dic213 at 2009-12-27 19:22:
data f/1/

上面这句是干什么的,是给f赋初值吗?
不是这样的吧?
你直接用f=1,就对了。

感谢dic213, 呵呵,不过测试了,还是不对,还是这个错误。
请求高手帮忙。
3楼2009-12-27 19:54:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

prairie

木虫 (正式写手)

★ ★ ★
nono2009(金币+1,VIP+0):谢谢参与!楼下给出了正解。 12-27 20:22
journalemu(金币+2,VIP+0):谢谢。 12-28 10:27
write(*,*) '***'
if(n.lt.0) return

do i=1,n

是不是因为这儿允许n=0, 由于特定的编译器的问题导致的?
改成 n.lt.1试一下。
PS:我只是猜测。
O(∩_∩)O~
4楼2009-12-27 20:02:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
nono2009(金币+3,VIP+0):谢谢专家!辛苦了。 12-27 20:17
journalemu(金币+14,VIP+0):谢谢 12-29 12:28
有两种修改方案:
第一: 把函数中fac中的 write(*,*) '***'去掉。因为主程序你用了一个
write(*,*) n,fac(n) 你这不是相当于把屏幕自己输在屏幕上嘛?函数仅仅返回一个值,不建议在函数中使用输出。
第二: 就是你把主程序修改一下,修改如下:
把write(*,*) n,fac(n) 修改为:
t=fac(n)
write(*,*) n,t
这样你函数的write(*,*)语句就不用去掉了。
这是一个挺隐蔽的错误,下次注意点。
5楼2009-12-27 20:11:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

nono2009

超级版主 (文学泰斗)

No gains, no pains.

优秀区长优秀区长优秀区长优秀区长优秀版主

★ ★ ★
jjdg(金币+1,VIP+0):辛苦了! 12-28 01:43
journalemu(金币+2,VIP+0):谢谢。 12-28 10:27
引用回帖:
Originally posted by journalemu at 2009-12-27 19:54:

感谢dic213, 呵呵,不过测试了,还是不对,还是这个错误。
请求高手帮忙。

dic213指出的一点也值得注意。用data语句赋值变量是有风险的。
6楼2009-12-27 20:21:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

prairie

木虫 (正式写手)


jjdg(金币+1,VIP+0):感谢参与! 12-28 01:42
引用回帖:
Originally posted by maomao1210 at 2009-12-27 20:11:
有两种修改方案:
第一: 把函数中fac中的 write(*,*) '***'去掉。因为主程序你用了一个
write(*,*) n,fac(n) 你这不是相当于把屏幕自己输在屏幕上嘛?函数仅仅返回一个值,不建议在函数中使用输出。
第二: 就 ...

学习了,还是专家厉害,O(∩_∩)O~。
O(∩_∩)O~
7楼2009-12-27 21:02:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dic213

木虫 (著名写手)

第三军团儿童团团长


wangen994(金币+1,VIP+0):感谢参与交流,第三军团的朋友 12-28 11:10
引用回帖:
Originally posted by journalemu at 2009-12-27 19:54:

感谢dic213, 呵呵,不过测试了,还是不对,还是这个错误。
请求高手帮忙。

你用的是什么编译器啊?
我用linux系统下的gfortran编译运行都可以的哈..
看来是编译器的差异导致的错误也有可能哦
春梦随云散, 飞花逐水流. 寄言众儿女, 何必觅闲愁.
8楼2009-12-28 10:29:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hakekill

木虫 (小有名气)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
nono2009(金币+1,VIP+0):谢谢参与。5楼已给出正解。 12-29 16:17
从错误来看是有递归的输入输出,只需要把递归函数调用不放在主程序的输出就行了
9楼2009-12-29 15:52:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 journalemu 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见