问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

fortran中save的用法?

发布网友 发布时间:2022-04-29 05:22

我来回答

2个回答

热心网友 时间:2022-06-19 11:30

是的,save属性的变量在下次调用函数时,依然保留上一次的值。
但是,第一段程序。你每次进入子程序,都手动让它重新变成了初值:a=1,b=2 。所以每次都一样。
第二段程序,虽然没有显式说明他们具有 save 属性。但在子程序中初始化的变量,则默认具有 save 属性。
integer :: a = 1
等同于:
integer , save :: a = 1
但不等于:
integer , save :: a
a = 1

热心网友 时间:2022-06-19 11:31

SAVE语句
函数子程序或子例行程序中用到的所有变量,在被调用前通常都没有确定的存储单元,每当子程序被调用时才临时分配存储单元,而且在退出子程序时这些存储单元又都被释放并重新分配另作它用。所以这些变量的值不被保留。在下次进入子程序时,给这些变量分配的可能是另外一些存储单元,上次调用时这些变量所具有的值已不复存在。我们称这些变量在子程序未调用时是无定义的。
在函数或子例行程序中可以使用SAVE说明语句来指定子程序中的某些变量的存储单元不被释放,它们的内容在退出子程序期间保持不变,在下次调用 时仍可使用。SAVE语句的形式如下:
SAVE 变量表 或: SAVE
“变量表”可以是本子程序中的变量名、数组名,若变量或数组名不止一个,它们之间用逗号隔开。注意,在SAVE语句中不允许出现虚拟参数名。当SAVE语句中带有“变量表”时,则为变量表中指定的变量和数组保留存储单元,如果SAVE语句中没有“变量表”,则表示让子程序中所有的变量和数组在程序执行期间都占有确定的存储单元,不因退出子程序而释放。
例:下面的程序中FUN是一个求阶乘的函数,每次调用此函数时,把最后一项乘数放在变量N0中,把阶乘的值放在变量F中。当下次调用此函数时,如果最后一项乘数大于等于上次最后一项,则不必再从头开始进行连乘运算,只需把上次的函数值再乘以N0+1、N0+2、…、N即可。
PROGRAM MAIN
WRITE(*,*)
WRITE(*,*) 'Enter N:'
READ(*,*) N
DO 10 WHILE(N.GE.0)
WRITE(*,'(1X,A,F7.1)')'FUN=',FUN(N)
WRITE(*,*)'Enter N:'
READ(*,*) N
10 CONTINUE
END
FUNCTION FUN(N)
SAVE N0,F
DATA N0/0/,F/1/
IF(N.LT.0)THEN
WRITE(*,*) 'Data error!!'
FUN=-1
RETURN
ELSE IF(N.LE.N0)THEN
F=1
N0=1
END IF
DO 10 I=N0+1,N
F=F*I
10 CONTINUE
FUN=F
N0=N
END
在子程序中,SAVE语句通常是和DATA语句同时使用的。如上例,当第一次调用FUN函数时,变量N0和F必须有初值,而在第二次及以后调用的时候,N0和F都保留着上次退出函数前的值,而且继续使用变量中的这些值,因而不必要再重新赋初值。对于这种只需在第一次调用时赋初值,后续调用不必赋初值的情况,使用DATA语句是合适的。当用DATA语句给子程序中的变量或数组赋初值时,这些变量和数组元素只是在子程序第一次调用时才有初值。如果没有SAVE语句说明,DATA语句中的变量和数组在第一次调用退出后就变成无定义的了。不要误解为调用一次子程序DATA语句就赋一次初值,因为DATA是非执行语句。如果每调用一次就需要赋一次相同的初值,这应该用赋值语句来实现。下面是一个求阶乘的函数FAC,当程序中多次调用该函数时,其结果是错误的;如果将DATA语句改为赋值语句,不管调用多少次,结果都正确。
FUNCTION FAC(N)
DATA F/1/
IF(N.LT.0)THEN
WRITE(*,*) 'Data error!!'
FAC=-1
RETURN
ELSE
DO 10 I=1,N
F=F*I
10 CONTINUE
END IF
FAC=F
END
注意:
(1)在子程序中不能用SAVE语句试图保存虚参的值,也不能用DATA语句给虚参赋初值,虚参的初值只能在子程序被调用时由实参传递。
(2)当用DATA语句给子程序中的变量或数组赋初值时,这些变量或数组元素只是在第一次调用该子程序时才有初值存在。在以后的调用时这些变量和数组元素都无确定的值(无定义的),不要误解为调用 一次子程序就赋一次初值,把DATA语句错当成执行语句(赋值语句)。
(3)子程序中同时使用SAVE和DATA语句时,SAVE语句应该放在DATA语句之前。通常,子程序中DATA语句和SAVE语句同时使用才有意义。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...地形、气候、河流、物产、经济发展状况、文物古迹、旅游资源等方面... 二本博士生好找工作吗(二表b是什么意思) 二表b大学是什么意思? 上海女明星有哪些 上海住了哪些明星 求那种感情强烈的小说,类似于 缺氧――和康巴男人的一夫多妻实验 那个... 像和市长千金爱上我相似的小说 【200分】寻找好看小说,都市类,像《和空姐同居的日子》差不多的小说... 推荐几部好看点的都市言情小说, 比如:《和空姐同居的日子》_百度... 求一个lp仿传奇单机版v3.05版的修改器下载地址! save有save sb time doing sth 和 save time to do的用法吗 save and exit什么意思? save的用法和它与 keep的区别 英文save是什么意思,save翻译解释,save中文意思,save用法及读音 “另存为”的英文是什么? save是doing还是todo save用法 有没有谁知道思乡的散文??? 桂林阳朔那边现在能旅游吗,比如说涨水之类 孙女一周岁生日爷爷奶奶该送什么礼物好 梦见经过波涛汹涌的大海遇到世外桃源 爷爷生日送什么礼物 孩子过周岁爷爷奶奶送什么礼物比较好?孩子生曰送多少钱合适 女儿生个儿子 父亲要祝福的话 父亲对儿子祝福的话语应该怎么说才好 父亲对儿子新婚快乐祝福语 父亲祝儿子结婚祝福语 周公解梦我梦见我家宝贝掉水里了,还没等救上来我就醒了。 梦中朋友来我家在一起睡。是什么意思 汽车空调刚开正常,几分钟后停止工作,不能再开启? save safety safely和 safe的用法。(急需) intel ehs 属于哪个部门 职业资格证书是归口哪个部门管? 五菱宏光前引擎盖上的铰链怎么拆? 脱卸式铰链一开门掉了怎么办 老polo车门铰链合页螺丝怎么拆 荣威i6自动1.5T尾门铰链怎么拆 天窗铰链怎样拆开 如何拆除橱柜门铰链铆钉 很大伤口结疤了贴创可贴效果会不会好点 哪些伤口不能用创可贴? 中国最火爆的行业,互联网金融到底改变了什么 小伤口用创可贴 大伤口用什么贴 不是所有的伤口都适合使用创可贴,不同的伤口应如何处理? 请问这种深度的伤口可以用创可贴吗 互联网金融对中小企业融资的影响有哪些 什么样的伤口适合贴创可贴? 校徽的含义是什么? 互联网的发展对金融产生哪些影响因素 中国人民大学校徽的含义是什么呢?