关于fortran的程序问题,看不懂了,求各位大神指导

我在学习例子的时候看见了这么一个程序DOUBLEPRECISIONFUNCTIONDDOT(N,DX,INCX,DY,INCY)INTEGERINCX,INCY,NDOU... 我在学习例子的时候看见了这么一个程序
DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY)
INTEGER INCX,INCY,N
DOUBLE PRECISION DX(*),DY(*)

DOUBLE PRECISION DTEMP

DTEMP = 0.0d0

DDOT=DTEMP

我没看懂的地方就在这,这个DDOT不是函数的名字么,给他赋值是个什么道理呢,能得到什么呢,要做什么呢?
展开
 我来答
_whales
2013-02-04 · TA获得超过2279个赞
知道大有可为答主
回答量:1814
采纳率:85%
帮助的人:503万
展开全部
DDOT=DTEMP

// DOUBLE PRECISION相当于 C语言的 double

相当于 C语言的
double result=DTEMP;

。。。。。。。
return result;//函数返回时才执行,平常DDOT这样的函数名,代表函数返回值而已。
并不表示函数返回。
只有递归调用,和函数调用,和用函数作为参数时,函数声明和定义时才是一个函数!
其他时候在函数内部,就直接相当于函数返回值!!!
在调用函数的表达式中整个函数调用才相当于函数返回值!!!
有点绕!!!
DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY)
INTEGER INCX,INCY,N
DOUBLE PRECISION DX(*),DY(*)
DOUBLE PRECISION DTEMP
DTEMP = 0.0d0
!-------------------------------------------------------------------------------------------
DDOT=DTEMP 函数结束,函数返回值不变了,此时和C语言的 return DTEMP是一样的。
end function
!---------------------------------------------
如果在赋值处,函数结束,和C语言的 return DTEMP是一样的。
如又重新赋值,
DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY)
INTEGER INCX,INCY,N
DOUBLE PRECISION DX(*),DY(*)
DOUBLE PRECISION DTEMP
DTEMP = 0.0d0
DDOT=DTEMP !函数返回值暂时是DTEMP,也就是 0.0d0双精度0
。。。。。
DDOT=DTEMP+200 !现在是函数返回值200了!

end function ! 函数结束,函数返回值就是200了这两条语句联手,
!相当于return DTEMP+200 ;
追问
嗯嗯,谢谢哈,我想再问一下,如果是递归迭代呢。(我不是学fortran的,就是有一些程序是fortran写的,需要转成C的。。。。)
能给我写一个超级简单的例子看看么,谢谢了~~~分先给你~
追答
DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY)
INTEGER INCX,INCY,N
DOUBLE PRECISION DX(*),DY(*)
DOUBLE PRECISION DTEMP
DTEMP = 0.0d0
DDOT=DTEMP !函数返回值暂时是DTEMP,也就是 0.0d0双精度0
。。。。。
if N=0 then DDOT= 0.0d0 !这里DDOT是 函数返回值
else
DDOT= DDOT(N-1,DX,INCX,DY,INCY)+DTEMP+200 !现在是函数返回值200了!
// else 语句中 赋值号( 等号)前面的是函数返回值,
后面的是函数递归调用
DDOT(N-1,DX,INCX,DY,INCY), 整个函数调用才是函数调用的返回值!!!!
函数名单独写在本函数内部,
出现在赋值号前面或者其他非递归函数调用语句,
也非作为参数被其它函数使用时,是返回值
如果调用使用函数参数的函数,是函数参数 如
积分等函数会有函数参数。

end function

DOUBLE PRECISION FUNCTION DDOT(N,DY,f)
INTEGER INCX,INCY,N
integer function f (N,DY)
f的参数 N,DY 的怎么定义有点忘了

DOUBLE PRECISION DX(*),DY(*)
DOUBLE PRECISION DTEMP
DTEMP = 0.0d0

DDOT=DTEMP + f(N,DY); f是 DDOT的第三个参数,是函数参数!

end function

integer function f (N,DY)
DOUBLE PRECISION FUNCTION DDOT(N,DY,f)

f= DDOT(N,DY,f);这里 等号(=)后面的 f是 DDOT的第三个实参,是函数参数!
不知会不会有二义性,因为像 Fortran,Basic这样古老的语言,
出现在等号后面的函数名,通常代表函数调用
出现在等号前面的,代表本函数自己的返回值
end function
wwttbb2010
2013-02-04 · TA获得超过533个赞
知道小有建树答主
回答量:222
采纳率:0%
帮助的人:219万
展开全部
DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY)
INTEGER INCX,INCY,N
DOUBLE PRECISION DX(*),DY(*)

DOUBLE PRECISION DTEMP

DTEMP = 0.0d0

DDOT=DTEMP
首先,如果你贴出来的代码是完整的,那么这个程序没有什么意义,就是直接得出一个常函数DDOT=0,也就是无论输入什么参数,函数返回值DDOT都为0。
感觉你贴的代码不完整...
后面肯定还有对于DDOT运算或者赋值的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f7dbbe1
2013-02-04
知道答主
回答量:26
采纳率:0%
帮助的人:23.9万
展开全部
FORTRAN子程序包括子例程和函数,子例程的返回参数在括号里面,和输入参数一起传入,函数的返回值就是函数名,所以函数中一定要给函数名(返回值)赋值
追问
是不是就是相当于C语言中的函数返回值,把返回值放到函数名中,然后立刻return,不能再做别的操作了呢?
如果要用fortran做迭代的话,是不是大约这样的程序
DOUBLE TEP
TEP = DDOT
DDOT(TEP)
就是大约这个样子的东西,对么?
来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式