C语言和Fortran混合编程借助于Fortran生成的DLL进行(采用C默认的传址方式进行函数参数传递)方法和实例:
1Fortran
生成DLL
新建Fortran
DLL程序test1f
添加如下代码:
! test1f90
!
! FUNCTIONS/SUBROUTINES
exported from test1dll:
! test1 -
subroutine
!示例没有返回值的子例程
subroutine
test1(a,b)
! Expose subroutine test1 to
users of this DLL
!
!DEC$ ATTRIBUTES
C,DLLEXPORT::test1
! Variables
! Body of
test1
integer a,b
integer sum
sum=a+b
return
end subroutine
test1
!示例有返回值的整数四则运算
!两数相加
function
add(a,b)
implicit none
!DEC$ ATTRIBUTES
C,DLLEXPORT::add
integer
a,b,add
add=a+b
return
end
!两数相减
function
abstract(a,b)
implicit none
!DEC$ ATTRIBUTES
C,DLLEXPORT::abstract
integer
a,b,abstract
abstract=a-b
return
end
!两数相乘
function
multiply(a,b)
implicit none
!DEC$ ATTRIBUTES
C,DLLEXPORT::multiply
integer
a,b,multiply
multiply=ab
return
end
!两数相除
(需要添加考虑被除数是否为0以及能否整除的判断)
function
divided(a,b)
implicit none
!DEC$ ATTRIBUTES
C,DLLEXPORT::divided
integer
a,b,divided
divided=a/b
return
end
编译后生成test1dll,test1obj等文件。其中这两个文件是我们在VC中调用所需要的。
转换成复数的意思,
比如a,b都是实数型,c是复数型。
语句 c=cmplx(a,b) 即表示a+bi这个复数存入c中。
也可以用cmplx(a),没有b,相当于虚部 b等于零
floor(x)是向下取整的意思。或者说“向下舍入”、“向零取舍”,即取不大于x的最大整数,与“四舍五入”不同,下取整是直接取按照数轴上最接近要求值的左边值,即不大于要求值的最大的那个整数值。
round(x)是向上取整,直接取按照数轴上最接近要求值的左边值,即不小于要求值的最大的那个整数值。
扩展资料
FORTRAN语言是为科学、工程问题或企事业管理中的那些能够用数学公式表达的问题而设计的,其数值计算的功能较强。
FORTRAN 90对以往的FORTRAN语言标准作了大量的改动,使之成为一种功能强大、具有现代语言特征的计算机语言。其主要特色是加入了面向对象的概念及工具、提供了指针、加强了数组的功能、改良了旧式FORTRAN语法中的编写“版面”格式。
-floor函数
(1)可以试一试spread函数,SPREAD(a,d,n)以某维d扩展数组a的元素n次。
(2)既然matmul只能适用于2维矩阵,那么就把原来的一维数组统一改写成n×1的二维矩阵。
(3)dotproduct就是求向量积,至于你说的数组和二维矩阵相乘是什么鬼,我猜也就是matmul可以实现的功能吧,看第(2)个答案。
(4)这个问题学了fortran初级的就会,比如说要赋值a=1:1:100,直接a=(/(j,j=1,100,1)/)
表示从屏幕输入数据
5表示下面定义的i5 即read(,5) n等同于read(,'(i5)') n
n表示变量 即存取读入数值的变量
如果可以
麻烦你给点分撒
看帮助文档。
Fortran 是编程语言。是编译型的。
Matlab是数学工具,是命令解释型的。
你应该深切的体会一下两者的差别。Fortran是为了生成一个可执行的程序 exe 给别人使用。而 matlab 只是为了算出结果。
任何编译型语言都不可能有 help 命令。任何编译器都具有语法规定的函数,部分编译器扩展了自己的函数。如果你想了解细节,请参阅编译器的帮助文档。
character 意思是声明一个字符串。
() 意思是,字符串的大小是假定大小。
len 就是字符串变量的名字。
所谓假定大小,一般是对虚参而言的,意思就是说,字符串的大小与实参一样。传入多大就是多大。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)