c语言调用fortran
Ⅰ 如何在c语言中调用FORTRAN生成的DLL里的函数
C语言和Fortran混合编程借助于Fortran生成的DLL进行(采用C默认的传址方式进行函数参数传递)方法和实例:
1.Fortran
生成DLL
新建Fortran
DLL程序test1.f
添加如下代码:
! test1.f90
!
! FUNCTIONS/SUBROUTINES
exported from test1.dll:
! 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=a*b
return
end
!两数相除
(需要添加考虑被除数是否为0以及能否整除的判断)
function
divided(a,b)
implicit none
!DEC$ ATTRIBUTES
C,DLLEXPORT::divided
integer
a,b,divided
divided=a/b
return
end
编译后生成test1.dll,test1.obj等文件。其中这两个文件是我们在VC中调用所需要的。
Ⅱ 求大神把下面的C语言程序改成Fortran编程语言
! max与min在Fortran里已经有了。。。
Integer i,j,q,e,r;
Integer p; !交点个数
Integer m(520) !i条射线交点个数
Real v(108+1) !速度
Real s(520,12*9+1)
Real s2(520,12*9+1) !射线在每个格子内的路程
Real k(520) !第i条直线的斜率
Real time(505) !i条射线的走时
Real f1(520,0:22),f2(520,0:22),t !i条射交点横纵坐标
Real x1(145,109),x2(145,109)
Real h1(145,109),h2(145,109)
float w(4)
!///////////////////速度赋初值/////////////
v=3.0;
v[21]=5.0;
v[30]=5.0;
v[78]=2.0;
v[79]=2.0;
!///////////////// //路程赋初值//////////////
time=0
s=0
!/////////////////上方激发,左侧接收///////////
Do i=1,4
w(i)=7.5+(i-1)*10
p=0
Do j=12*(i-1)+1,12*i
k(j)=(1.5+3*p)/w(i)
p=p+1
End Do
End Do
!///////////////////////求交点的纵坐标/////////////
Do i=1,48
m(i)=i-(i-1)/12*12
Do j=0,m(i)
f2(i,j)=3*j+1.5
End Do
End Do
!我就译这点儿吧,程序貌似有问题,译下去的意义不太大。往后的您也可以照着来搞。
!您的C功底应该OK啦,上面我译的已经把下面的都搞全了,而且程序确实有问题,比如那个time在后面再也没有用过~~~~
!建议您再检查检查程序吧,保证他是对的译了才有意义啊,否则嘛~~~~呵呵:)
Ⅲ fortran如何调用c语言函数,本人小白,求大神写详细点
你的想法,叫做 “混合编程”,简称“混编”。
混编有多种方式,一般有:
1.直接调用 C 编译后的 exe
2.通过 DLL
3.通过静态 lib
4.通过编译器直接链接Fortran和C的obj
不管是 Fortran 还是 C 的语法,通常不会规定混编的具体内容。这些内容,是不同的编译器自行规定的。(至少绝大多数是)
所以,具体的操作,也因你选择的编译器产品,因你选择的混编方式,而有较大的不同。
所以,我建议你:
1.阅读你使用的 C 编译器和 Fortran 编译器的帮助文档,查看其中关于混合编程(mix-language)的章节。
2.如果你阅读英文帮助有困难,至少告知你使用何种 C编译器,何种 Fortran 编译器。打算采用何种混编方式。
Ⅳ 如何使用c语言或fortran语言读入从数据采集仪中采集的数据
需要串口通信备
描述
CON
控制台(即屏幕,标准输出设备)
PRN
打印机
COMl
1#串行通信口
COM2
2#串行通信口
COM3
3#串行通信口
COM4
4#串行通信口
LPTl
1#并行通信口
LPT2
2#并行通信口
LPT3
3#并行通信口
LPT4
4#并行通信口
NUL
空(NLTLL)设备。放弃输出,不包含任何输入
AUX
1#串行通信口
LINE1
1#串行通信口
USER1
标准输出
ERRl
标准错误
CONOUT$
标准输出
CONIN$
标准输入
你可以逐一试一下
用open(unit=4, file='COM1')等诸如此类的语句打开物理设备
Ⅳ c语言中的continue在fortran中用什么表示
c语言中的continue在fortran就是“继续向下进行的意思”;
编译起来continue没有任何意义,它不参与程序进行。
但是在编写程序的时候,有利于程序分段和模块化,最常于Do等一起使用。
CYCLE和EXIT,cycle在DO循环内时执行时,当前循环执行被停止,返回到当前循环顶部,继续执行。
如
do 100
…
100 continue
这里continue虽然不参与运算,但是它和do配合起来就把一段代码给分割成了一块了。
Ⅵ c语言和fortran语言可以结合编程吗
可以。如 军酷儿所说“Fortran做成DLL动态库格式,在C中直接调用就行了”。
建议看一下彭国伦老师的fortran95程序设计一书
Ⅶ C语言的程序 换成FORTRAN和Lisp 写出来!
(defun c:aa()
(setq m (getint "\n请输入m:>"))
(setq n (fac m))
(princ (strcat "\nm=" (rtos m 2 0) " n=" (rtos n 2 0)))
(prin1)
)
(defun fac(a)
(if (or (= a 0) (= a 1))
(setq c 1)
(setq c (* a (fac (- a 1))))
)
)
我只会lisp,经我测试,这个阶乘的程序可用。希望能给我分。如用不了可以找我
Ⅷ c语言如何将全局变量传递给fortran
基本要求1.具有计算机的基础知识。2.了解操作系统的基本概念,掌握常用操作系统的使用。3.掌握基本数据结构和常用算法,熟悉算法描述工具――流程图的使用。4.能熟练地使用一种高级语言或数据库语言编写程序、调试程序。考试内容一、基础知识与基本操作(一)基础知识1.计算机系统的主要技术指标与系统配置。2.计算机系统、硬件、软件及其相互关系。3.微机硬件系统的基本组成。包括:中央处理器(运算器与控制器),内存储器(RAM与ROM),外存储器(硬盘、软盘与光盘),输入设备(键盘与鼠标)输出设备(显示器与打印机)。4.软件系统的缀成,系统软件与应用软件;软件舶蒸丰概念,文档;程序设计语言与语言处理程序(汇编程序、编译程序、解释程序)。5.计算机的常用数制(二进制、十六进制及其与十进制之间的转换);数据基本单位(位、字节、字)。6.计算机的安全操作;计算机病毒的防治。7.计算机网络的一般知识。8.多媒体技术的一般知识。(二)DOS的基本操作l.操作系统的基本功能与分类。2.DOS操作系统的基本组成。3.文件、目录、路径的基本概念。4.常用DOS操作,包括:初始化与启动:文件操作(TYPE,COPY,DEL,REN,XCOPY,ATTRⅠB);目录操作(DⅠR,MD,CD,RD,TREE,PATH);磁盘操作(FORMAT,DⅠSKCOPY,CHKDSK);功能操作(ⅤER,DATE,TⅠME,CLS,PROMPT,HELp);批处理(批处理文件的建立与执行,自动批处理文件);输入输出改向。(三)Windows的基本操作1.Windows的特点、基本构成及其运行环境。2.Windows用户界面的基本元素。包括:窗口、图标、菜单、对话框、按钮、光标等。3.Windowo基本操作。包括:启动与退出,鼠标操作,窗口操作,图标操作、菜单操作,对话框操作。二、程序设计1.能运用结构化程序设计方法编写程序。2.掌握基本数据结构和常用算法。3.能熟练使用一种高级语言或一种数据库语言(共有QBASIC、FORTRAN、C以及FoxBASE+等四种语言,考生任选其中一种。各种语言的考试内容附后)。三、上机操作在指定的时间内使用微机完成下述操作:1.完成指定的计算机基本操作(包括机器启动和操作命令的使用)。2.按给定要求编写和运行程序。3.调试程序,包括对给出的不完善的程序进行修改和补充,使之能得到正确的结果。C语言程序设计(一)C语言的结构1.程序的构成,main函数和其它函数。2.头文件、数据说明、函数的开始和结束标志。3.源程序的书写格式。4.C语言的风格。(二)数据类型及其运算1.C的数据类型(基本类型、构造类型、指针类型、空类型)及其定义方法2.C运算符的种类、运算优先级、结合性。3.不同类型数据间的转换与运算。4.C表达式类型(赋值表达式、算术表达式、关系表达式、逻辑表达式、条件表达式、逗号表达式)和求值规则。(三)基本语句1.表达式语句,空语句,复合语句2.数据的输入与输出,输入输出函数的调用。3.复合语句。4.go to 语句和语句标号的使用。(四)选择结构程序设计1.有if语句实现选择结构。2.用switch语句实现多分支选择结构。3.选择结构的嵌套。(五)循环结构程序设计1.for 循环结构。2.while和do while循环结构。3.continue语句、break语句。4.循环的嵌套。(六)数组的定义和引用1.一维数组和多维数组的定义、初始化和引用。2.字符串与字符数组。(七)函数1.库函数的正确调用。2.函数的定义方法。3.函数的类型和返回值。4.形式参数与实在参数,参数值的传递。5.函数的正确调用,嵌套调用,递归调用。6.局部变量和全局变量。7.变量的存储类别(自动、静态、寄存器、外部),变量的作用域和生存期。8.内部函数与外部函数。(八)编译预处理1.宏定义:不带参数的宏定义;带参数的宏定义。2.“文件包含”处理。(九)指针1.指针与指针变量的概念,指针与地址运算符。2.变量、数组、字符串、函数、结构体的指针以及指向变量、数组、字符串、函数、结构体的指针变量。通过指针引用以上各类型数据。3.用指针作函数参数。4.返回指针值的指针函数。5.指针数组,指向指针的指针,main函数的命令行参数。(十)结构体(即“结构”)与共用体(即“联合”)1.结构体和共用体类型数据的定义方法和引用方法。2.用指针和结构体构成链表,单向链表的建立、输出、删除与插入。(十一)位运算1.位运算符的含义及使用。2.简单的位运算。(十二)文件操作只要求缓冲文件系统(即高级磁盘I/O系统),对非标准缓冲文件系统(即低级磁盘I/O系统)不要求。1.文件类型指针(FILE类型指针)。2.文件的打开与关闭(fopen,fclose)。
Ⅸ C语言调用Fortran
将fortran代码封装成静态链接库(lib),然后调用约定改为 大写(编译器不同配置也不同),在C中包含这个库,然后生命外部函数 就可以调用了
Ⅹ FORTRAN编程语言与C语言
fortran语言中可通过定义子程序从而返回一系列变量值,而c语言的函数一般只能返回一个变量值。
Fortran语言的最大特性是接近数学公式的自然描述,在计算机里具有很高的执行效率。易学,语法严谨。可以直接对矩阵和复数进行运算,这一点类似MATLAB。自诞生以来广泛地应用于数值计算领域,积累了大量高效而可靠的源程序。很多专用的大型数值运算计算机针对Fortran做了优化。广泛地应用于并行计算和高性能计算领域。
C语言是一个有结构化程序设计、具有变量作用域(variable scope)以及递归功能的过程式语言。C语言传递参数均是以值传递(pass by value),另外也可以传递指针(a pointer passed by value)。不同的变量类型可以用结构体(struct)组合在一起。只有32个保留字(reserved keywords),使变量、函数命名有更多弹性。部份的变量类型可以转换,例如整型和字符型变量。通过指针(pointer),C语言可以容易的对存储器进行低级控制。预编译处理(preprocessor)让C语言的编译更具有弹性。