C语言转换为fortran语言
常用C语言标准库函数
常用C语言标准库函数C语言编译系统提供了众多的预定义库函数和宏。
用户在编写程序时,可以直接调用这些库函数和宏。
这里选择了初学者常用的一些库函数,简单介绍了各函数的用法和所在的头文件。
1.测试函数Isalnum原型:int isalnum(int c)功能:测试参数c是否为字母或数字:是则返回非零;否则返回零头文件:ctype.hIsapha原型:int isapha(int c)功能:测试参数c是否为字母:是则返回非零;否则返回零头文件:ctype.hIsascii原型:int isascii(int c)功能:测试参数c是否为ASCII码(0x00~0x7F):是则返回非零;否则返回零头文件:ctype.hIscntrl原型:int iscntrl(int c)功能:测试参数c是否为控制字符(0x00~0x1F、0x7F):是则返回非零;否则返回零头文件:ctype.hIsdigit原型:int isdigit(int c)功能:测试参数c是否为数字:是则返回非零;否则返回零。
头文件:ctype.hIsgraph原型:int isgraph(int c)功能:测试参数c是否为可打印字符(0x21~0x7E):是则返回非零;否则返回零头文件:ctype.hIslower原型:int islower(int c)功能:测试参数c是否为小写字母:是则返回非零;否则返回零 头文件:ctype.hIsprint原型:int isprint(int c)功能:测试参数c是否为可打印字符(含空格符0x20~0x7E):是则返回非零;否则返回零头文件:ctype.hIspunct原型:int ispunct(int c)功能:测试参数c是否为标点符号:是则返回非零;否则返回零 头文件:ctype.hIsupper原型:int isupper(inr c)功能:测试参数c是否为大写字母:是则返回非零;否则返回零Isxdigit原型:int isxdigit(int c)功能:测试参数c是否为十六进制数:是则返回非零;否则返回零2.数学函数abs原型:int abs(int i)功能:返回整数型参数i的绝对值头文件:stdlib.h,math.hacos原型:double acos(double x)功能:返回双精度参数x的反余弦三角函数值头文件:math.hasin原型:double asin(double x)功能:返回双精度参数x的反正弦三角函数值头文件:math.hatan原型:double atan(double x)功能:返回双精度参数的反正切三角函数值头文件:math.hatan2原型:double atan2(double y,double x)功能:返回双精度参数y和x由式y/x所计算的反正切三角函数值 头文件:math.hcabs原型:double cabs(struct complex znum)功能:返回一个双精度数,为计算出复数znum的绝对值。
fortran编程
• FORTRAN 90 1991年5月通过,新标准增加了许多新的特
性和功能,其中值得一提的是由我国计算机和信息处理标准化 技术委员会程序设计分会提出的多字节字符集数据类型及相应 的内部函数。这一数据类型的增加为非英语国家在使用计算机 方面提供了极大的方便。
• Fortran 95
1.2 Fortran90 的特点
POWER STATION 1.0 到FORTRAN POWER STATION4.0编译器后 将其卖给了DEC公司。
DEC随即推出了DVF5.0(Digital Visual FORTRAN 5.0),
其工作环境与MFC5.0完全一致。接着又推出了DVF 6.0(Digital Visual FORTRAN 6.0,其工作环境与MFC6.0完 全一致。后来,DEC又将其卖给了COMPAQ。
环境窗口
对话框、文档窗口和停靠窗口
停靠窗口:工作空间(Workspace)窗口和输出(Output)窗口
Microsoft Developer Studio开发环境 3
在线帮助
• 使用Help->contents
程序员指南(Programmer’s Guide) 语言言参考手册(Reference) 运行错误(Run· time Errors) Developer Studio开发环境用户指南(Developer Studio Environment User’s Guide)
Fortran 90是美国国家标准学会(ANSI)于1991 年5月推出的Fortran语言标准(最新标准为 Fortran 95),除保留了Fortran 77原有的特 征外,还扩充和引入了一些新特性,这使得 Fortran语言的使用更灵活、功能更强大.
C_C_Fortran混合编程研究
C 、C ++、Fortran 混合编程研究魏 威,魏 冲(郑州铁路职业技术学院,河南郑州450052)摘 要:不同计算机编程语言都有其特有的优势和局限性,将多种语言混合起来进行编程,不但可以充分发挥各自的优势,而且可以弥补各自功能的不足,这样既能充分利用现有程序资源,又能加快应用程序的开发.主要阐述了C 、C ++、Fortran 等3种语言在不同平台下混合编程应注意的问题,以及在混合编程中经常遇到的2个问题.关键词:混合编程;C;C ++;Fortran中图分类号:TP311 文献标识码:A 文章编号:1007-113X (2007)04-0094-05Fortran 语言是所有编程语言中惟一能将复数定义为一种标准数据类型的语言,其优势在于数值计算,但是Fortran 语言在可视化程序设计方面却是非常欠缺的,目前还没有一家厂商推出具有RAD 特性的Fortran 编译集成开发环境.当用Fortran 实现了某一大型科学计算以后,却难以将这种计算转变为数据输入简易、结果显示方便的W indows 可视化应用程序,而采用C 、C ++进行编程却比较容易实现这些功能.因此,在许多情况下,我们应该使用C 、C ++、Fortran 等进行混合编程.在混合语言编程中,主要的问题是函数调用和数据结构的存储.1 W indows 平台的混合编程Fortran 语言没有大小写之分,而W indows 平台下的混合语言编程过程中大小写问题十分突出.考虑到编译器的差异,可以用以下方式进行跨平台编程的函数声明.C 、C ++编译器使用M icr os oft V isual C ++6.0编译集成开发环境,Fortran 编译器使用D igital V isual Fortran 6.0编译集成开发环境.假设一个C 语言函数为void cFuncti on (),那么只需要在它的头文件里面进行如下定义即可. #ifdef _cp lus p lus extern “C ”v oid { #endif extern v oid _stdcall CFuncti on (); #define cFuncti on CF UNCTI O N #ifdef _cp lus p lus } #endif这样就可实现上述函数在Fortran 或C ++程序中的直接调用.假设一个Fortran 函数为S UBROUTI N E FF UNCTI O N (),那么在C ++头文件里可进行如下定义. #ifdef _cp lus p lus extern “C ”v oid { #endif extern v oid _stdcall ffuncti on (); #define ffuncti on FF UNCTI O N #ifdef _cp lus p lus第22卷第4期2007年12月 洛阳大学学报JOURNAL OF LUOY ANG UN I V ERSI TY Vol .22No .4Dec .20073收稿日期:2007-11-01作者简介:魏 威(1960-),女,汉族,河南省郑州市人,工程师,研究方向:计算机技术. } #endif这样,就可以在C ++的程序里面直接调用上述函数.由于C 编译器里面没有定义cp lus p lus 这个环境变量,因此在C 文件里面也可以直接使用这个头文件.如果是一个C ++函数void cPlus p lusFuncti on (),和C 函数一样可定义如下. #ifdef _cp lus p lus extern “C ”v oid { #endif extern v oid _stdcall cPlus p lusFuncti on (); #define cPlus p lusFuncti on CP LUSP LUSF UNCTI O N #ifdef _cp lus p lus } #endif经过上面的定义后,所有的函数便可实现在3种语言间自由调用.在用3三种语言进行混合编程过程中要注意函数的参数、字符串的传递问题.对含有字符串的函数,如函数v oid cCharFuncti on (char 3m sg ),需要定义如下. void cCharFuncti on (char 3m sg,int len )经过上面的定义之后,在Fortran 中只需调用cCharFuncti on (m sg )即可.由于Fortran 程序没有明显的字符串结束标志,如果是2个字符串连在一起,C 程序里就只能得到1个字符串.所以,最好在C 的程序里对这个由Fortran 程序得到的字符串进行处理,因为从len 变量可以得到字符串长度,截取m sg 的前len 个字符作为这个字符串的应有长度.而在Fortran 程序里面,如函数S UBROUTI N E FCHARF UNCTI O N (fchar ),经过相应声明,进行下面的定义即可. #define f CharFuncti on (fchar ),FCHARF UNCTI O N (fchar,strlen (fchar ))这样,在C 、C ++程序里即可直接调用.在3种语言的混合编程里还有一个需要注意的问题就是指针问题.Fortran 里面所有的变量都相当于C 、C ++里面的指针,所以,在C 、C ++程序里函数的参数应一律声明为指针形式(除字符串参数后面的长度外).在混合编程过程中,数据方面存在的差异也必须引起足够的重视,这体现在数组和结构2个方面.在Fortran 语言里,数组和C 、C ++里的数组有些不同,这表现在行列顺序和数组起始值.Fortran 语言不同于C 、C ++的行优先,而使用列优先的方式.假设有一个数组a,m 行n 列,采用行优先时的数据存放格式如下. a 11,a 12,…,a 1n ,a 21,a 22,…,a 2n ,…,a m 1,a m 2,…,a m n而采用列优先的数据存放格式如下. a 11,a 21,…,a m 1,a 12,a 22,…,a m 2,…,a 1n ,a 2n ,…,a m n行优先顺序推广到多维数组,规定为先排最右的下标;列优先顺序推广到多维数组,规定为先排最左的下标.这样,在混合语言编程里调用数据时必须注意行列优先的差别,进行准确地调用.数组的另一个差别是起始下标的不同.Fortran 默认的数组下标是以1开始的,而C 、C ++默认的数组下标却是从0开始的,所以在调用时要注意加1或者减1,以保证调用到正确的数据.Fortran 语言里的结构经过声明后就被分配了空间,在C 、C ++里面也要声明它,采用下面的方式.Fortran 结构声明格式如下. COMMON /COLOR7/C_RE D ,C_GREEN,C_BLUE COMMON /NDDAT/N I D (NASI ZE ),XN (3,NASI ZE )C 、C ++结构声明格式如下. #ifdef _cp lus p lus extern "C"{・59・第4期 魏 威等:C 、C ++、Fortran 混合编程研究 #endif #define col or7COLOR7 #define nddat NDDAT extern struct {fl oat c_red;fl oat c_green;fl oat c_blue;}col or7; extern struct {int nid[NASI ZE ];fl oat xn[NASI ZE ][3];}nddat; #ifdef _cp lus p lus } #endif2 L inux 平台的混合编程L inux 平台的混合语言编程和W indows 平台的混合语言编程基本没有什么区别,主要是在define 上的不同.考虑到编译器的差异,在函数声明上可以用下面的方式进行跨平台编程的函数声明.C 、C ++编译器使用G NU gcc,Fortran 编译器使用pgi Fortran .假设一个C 函数为void cFuncti on (),那么只需要在它的头文件里面进行如下定义即可. #ifdef _cp lus p lus extern “C ”v oid { #endif extern v oid CFuncti on (); #define cFuncti on cfuncti on_ #ifdef _cp lus p lus } #endif这样,在Fortran 或者C ++的程序里面就可以直接进行调用了.需要注意的是,函数名应该不多于31个字符.同样,对于C ++和Fortran 里的函数,函数名在声明的时候也应改成小写加下划线即可.对于数组来说,具体变化和W indows 平台的处理方式是一致的,都是行列优先顺序不同的.而对于字符串来说,则不需要额外的注意,gcc 编译器会处理好这个问题,也就是说并不需要额外的改变.对于数据结构的定义,也要改成小写加下划线的方式.其中,Fortran 的数据结构定义方式如下. COMMON /COLOR7/C_RE D ,C_GREEN,C_BLUE COMMON /NDDAT/N I D (NASI ZE ),XN (3,NASI ZE )C 、C ++的数据结构定义方式如下. #ifdef _cp lus p lus extern "C"{ #endif #define col or7col or7_ #define nddat nddat_ extern struct {fl oat c_red;fl oat c_green;fl oat c_blue;}col or7; extern struct {int nid[NASI ZE ];fl oat xn[NASI ZE ][3];}nddat; #ifdef _cp lus p lus } #endif3 其他平台的混合编程对于Solaris 平台,基本上和L inux 平台完全一致,但是考虑到Solaris 大多运行在Sparc CP U 上,它是采用big endian 的,而W indows 和L inux 运行在I ntel 或AMD 的X86平台上,采用的是little endian,这一点需要特别注意,在读写数据文件时应该给予足够的重视.其他的Unix 平台,如HP Unix 、ULTR I X 、I R I S 等,一般都只有define 上的微小差别,在字符串处理、结构及数组方面基本与L inux 相同.对它们・69・洛阳大学学报 2007来说,考虑更多的应该是中央处理器不同带来的差别.4 混合编程中的字符串处理混合编程中经常会出现需要传递字符串的情况,而字符串的传递是一个较为麻烦的问题.在Fortran 里,字符串是没有结束符的,但是有长度的概念,也就是说,编译器会给每一个字符串一个长度以控制字符串的长度,但是这个长度参数在不同的平台下其位置也是不同的(有的直接跟在字符串后面,有的则跟在函数参数的最后面),对于常见的平台,如W indows 、L inux 、Solaris 、HP Unix 、I R I S,可以用如下方法定义.以C 函数为例,定义如下. void messag (char 3m sg1,int 3where1,char 3m sg2,int 3where2) { p rintf (“……%s should be %d,while %s should be %d \n ”,m sg1,3where1,m sg2,where2); }如果要在Fortran 里调用的话,需要以下定义. #if defined ULT R I X ||SP ARC ||I R I S ||L I N UX ||W I N 32 #if defined ULT R I X ||SP ARC ||I R I S ||L I N UX extern v oid _stdcall messag (char 3,int 3,char 3,int 3,int,int ) #define messag (s1,i1,s2,i2)messag_(s1,i1,s2,i2,strlen (s1),strlen (s2)) #else /3W I N 32Platf or m 3/ extern v oid _stdcall messag (char 3,int,int 3,char 3,int,int 3) #define messag (s1,i1,s2,i2)MESS AGE (s1,strlen (s1),i1,s2,strlen (s2),i2) #endif #else /3O ther Platf or m 3/ extern v oid _stdcall messag (char 3,int 3,char 3,int 3,int,int ) #define messag (s1,i1,s2,i2)messag (s1,i1,s2,i2,strlen (s1),strlen (s2)) #endif如果要用在C ++中,需要如下定义. #ifdef _cp lus p lus extern “C ”{ #endif /3your extern code 3/ #ifdef _cp lus p lus } #endifFortran 里便可以直接调用如下. CALL MESS AG (char1,i1,char2,i2)同样,在Fortran 里写的字符串处理函数使用以上的define 和extern 后,也可以在C 里直接调用.5 混合编程中的文件读写处理文件读写也是混合编程中一个非常重要的问题,通常的问题发生于不同平台下的混合编程或者不同Fortran 编译器间的编译.在Fortran 中,文件的写入是由write 语句完成的,而每一个write 语句可一次性写入多个数据构成一个数据块,而每一个无格式数据块都由下面3部分组成:(1)数据块的开始标志,记录所有数据所占的字节数;(2)组成该数据块的各数据内容.整型数和浮点数均占4个字节,低字节在前,高字节在后.各数据间不空格;(3)每个数据块的结束标志,也为该数据块的字节数,而不是以回车换行符作为结束标志.各记录之间也没有分隔符.另外,由于编程语言的差异,不同的编译器的存储格式也存在差异,如V isual Fortran 与D igital Fortran 在存储数据块中还存在着差别.在一个write 语句中,V isual Fortran 存储数据块的开始标志与结束标志是・79・第4期 魏 威等:C 、C ++、Fortran 混合编程研究 用一个字节表示,而在D igital Fortran 是用一个整形数,即4个字节来表示.也就是说,V isual Fortran 一个数据块最多可以存储128个字节,如果一个write 语句要求写入的数据量大于128字节时,则按循环形式存入.所以,D igital Fortran 在读取时就应该把它转化为相应的D igital Fortran 存储形式.6 结束语混合编程的优势在于它允许调用用另一种语言编写的现有程序代码、使用在特定语言环境下难以实现的算法和获得处理速度方面的优势.在混合编程中的关键问题是协调2种或多种语言间所的调用约定、命名约定及参数传递方式,并使它们在数据结构、数据类型上保持一致.参考文献:[1]孙 鑫,余安萍.V isual C ++深入详解[M ].北京:电子工业出版社,2006.[2]埃克尔.C ++编程思想[M ].北京:机械工业出版社,2002.[3]任 哲.MFC W indows 应用程序设计[M ].北京:清华大学出版社,2004.[4]周振红.Fortran 90/95高级程序设计[M ].郑州:黄河水利出版社,2006.[5]周振红.I ntel V isual Fortran 应用程序开发[M ].郑州:黄河水利出版社,2006.[6]浩强工作组.Fortran 经典程序设计[M ].大连:大连理工大学出版社,2004.[7]霍 顿.V isual C ++2005入门经典[M ].北京:清华大学出版社,2007.[8]Stanley B,L i ppman .Essential C ++[M ].武汉:华中科技大学出版社,2001.Study on M i xed 2l anguage Co m p ili n g Usi n g C,C ++and FortranW E IW ei,W E I Chong(Zhengzhou Rail w ay Vocati onal and Technical College,Zhengzhou 450052,China )ABSTRACT:There are different peculiar advantage and li m itati on in each kind of p r ogra mm ing language .The m ixing p r ogra mm ing can make the best of merits of different languages and avoid the deficiencies of the m.This paper mainly discuss the questi on of m ixing p r ogra mm ing using the C,C ++and Fortran .KEY WORDS:m ixing p r ogra mm ing;C;C ++;Fortran(责任编辑:王 晓)・89・洛阳大学学报 2007。
给fortran新手的一些实用建议
Linux环境中Fortran与C混合编程方法研究
第 29 卷 第 9 期 计算机工程与设计Computer Engi neering and Design2008 年 5 月 May 2008Vol . 2 9No . 9Linux 环境中 Fortran 与 C 混合编程方法研究亓雪冬 1, 仝兆岐 1, 何潮观 2(1. 中国石油大学 地球资源与信息学院,山东 东营 257062;2. 胜利油田物探研究院,山东 东营 257022)摘 要:在 Linux 系统中存在大量优秀的 Fortran 和 C 的源代码和程序库,为有效的利用这些软件资源,发挥不同语言各自的优势,探讨了 4 种混合编程方法— — 基于外部数据混编、基于 CORBA 混编、基于 f2c 混编、基于 cfortran 混编,并论述了各方法 的基本原理、实现步骤,比较了各方法的优缺点和适用范围。
关键词:混合编程; 编程语言; 源码转换工具; 组件; 通用对象请求代理 中图法分类号:TP311.52文献标识码:A文章编号:1000-7024 (2008) 09-2378-03Study on mixed Fortran and C programming in LinuxQI Xue-dong 1, TONG Zhao-qi 1, HE Chao-guan 2(1. College of Geo-resources and Information, China University of Petroleum, Dongying 257062, China;2. Geophysical Prospecting Research Institute of Shengli Oilfield, Dongying 257022, China ) Abstract :There are many good Fortran, C source code and libraries in Linux. In order to reuse these software resources an d make use of the two languages together effectively, four methods of mixed Fortran and C language programming in Linux system are discussedwhich are external data, CORBA, f2c and cfortran. Then the principle, the processes, the merit and flaw of these methods are analy sed and contrasted.Key words :mixed-pro grammin g; programming lan guage; source code converter; component; CORBA的 Fortran PowerStation 和 VB, VC, Delphi, C++ Builder 之间的混合编程研究。
在c++主程序中调用fortran子例程
在c++主程序中调用fortran子例程一、引言C语言和Fortran是两种不同的编程语言,广泛应用于不同的领域。
在某些情况下,可能需要将Fortran程序嵌入到C程序中,以便更好地利用Fortran的优势。
在这种情况下,如何在C主程序中调用Fortran子例程成为了一个重要的问题。
本文将介绍如何在C主程序中调用Fortran子例程,并给出一些示例代码。
二、基本步骤1. 编写Fortran子程序:首先需要编写一个Fortran子程序,该程序可以作为一个独立的程序运行,也可以作为主程序的一个子例程。
2. 编译Fortran子程序:使用Fortran编译器将Fortran子程序编译成可执行文件。
3. 创建C主程序:创建一个C主程序,用于调用Fortran子例程。
4. 链接C和Fortran程序:使用C编译器将C主程序和Fortran 可执行文件链接成一个完整的程序。
三、示例代码下面是一个简单的示例代码,展示如何在C主程序中调用Fortran子例程:Fortran子程序(example.f90):```fortransubroutine add(a, b, result) bind(c, name="add")use iso_c_binding, only: c_intimplicit noneinteger(c_int), intent(in) :: a, binteger(c_int), intent(out) :: resultresult = a + bend subroutine add```这个Fortran子程序接受两个整数参数,并返回它们的和。
它使用了iso_c_binding模块来声明C兼容的变量类型。
C主程序(main.c):```c#include <stdio.h>#include <stdlib.h>#include <complex.h>#include "example.f90"int main() {int result;int a = 5, b = 10;complex c;c = (complex) a + (complex) b; // 将整数转换为复数,以便在C和Fortran之间传递数据类型兼容的数据call add(a, b, result); // 调用Fortran子例程并将结果保存到变量result中printf("Result: %d\n", result); // 输出结果return 0;}```这个C主程序调用了上面定义的Fortran子程序add,并将结果保存到变量result中。
用C#调用Fortran
C#与Fortran混合编程之本地调用Fortran动态链接库前言C#发展到现在,已是一门相当完善的语言,他基于C语言风格,演化于C++。
并依靠强大的.NET底层框架。
C#可以用来快速构建桌面及Web应用。
然而在我们的实际工作中,尽管C#已经非常完善,但还是不能完成我们所有的工作。
在很多工程计算中,C#语言的计算速度,精度,以及执行效率相对来说都达不到项目的要求。
因此我们便考虑是否有一种方式将我们的工程计算部分和我们的项目分开,将计算部分用另一种执行更快,精度更高的语言来编写,然后在 C#中调用,最后完成我们的工作。
答案是肯定的。
Fortran是一门古老的语言,它是世界上最早出现的计算机高级程序设计语言,广泛应用于科学和工程计算领域。
FORTRAN语言以其特有的功能在数值、科学和工程计算领域发挥着重要作用。
然而Fortran程序本身不适合开发独立的应用程序,例如我们传统的桌面应用或者Web应用。
因此这里我们便想将C#与Fortran结合,C#借助Fortran可以实现精度更高,计算更快的程序,而Fortran 通过C#,便也能够达到可视化设计。
一、基本思路运用Fortran,编写动态链接库(DLL),在DLL中提供计算的函数接口,然后在C#中调用该DLL中计算部分的函数,实现计算过程。
这里需要注意的是,由于我们使用的是Fortran编译器,生成的DLL属于第三方非托管DLL,因此无法直接在程序中添加DLL的引用。
具体的做法将在后续部分说明。
二、编写Fortran程序,生成动态链接库文件知道思路之后便开始正式的Coding。
首先新建一个空的Fortran Dynamic-link Library项目。
在Intel(R) Visual Fortran点击Library,选中右图的Dynamic-link Library.然后点击OK.这时的项目如下所示:点击Sources File文件夹,选择新建项。
Fortran语言基础
数值分析程序设计Part I F ortran语言基础COMPAQ VISUAL FORTRAN 6.50编译器的使用0.1 编译器简介高级语言以及汇编语言的程序代码在没有转换成机器代码前,计算机是无法执行的。
编译器的功能是将高级语言的程序代码翻译成计算机可执行的机器码,也就是生成扩展名为EXE, COM的文件。
0.2 Visual Fortran的使用Visual Fortran起源于Microsoft的Fortran PowerStation 4.0,这套工具后来卖给Digital公司继续开发,第二个版本称为Digital Visual Fortran 5.0,Digital 被Compaq并购之后,接下来的版本6.0和6.5称为Compaq Visual Fortran。
下面的介绍以Compaq Visual Fortran 6.5作范例。
Visual Fortran被组合在一个叫做Microsoft Visual Studio的图形接口开发环境中。
Visual Studio提供一个统一的使用接口,这个接口包括文字编辑功能、Project管理功能、调试工具等。
而编译器则被组合到Visual Studio中,VF和VC++使用相同的使用接口。
Visual Fortran 6.5除了完全支持Fortran 95的语法外,扩展功能方面提供了完整的Windows程序开发工具,专业版还含有IMSL数值计算连接库。
另外还可以和VC++直接互相连接使用,也就是把Fortran和C语言的程序代码混合编译成一个执行文件。
安装好Compaq Visual Fortran后,运行Developer Studio就可以开始编译Fortran程序了。
运行Developer Studio启动Visual Fortran,默认程序名称为Compaq Visual Fortran 6.5选择File菜单中的New选项在弹出的对话框中,选择Project标签。
fortran第3章2 Fortran语言程序设计初步
【例3_1】 如果用C写了两个子程序EIGEN和eigen,然后有如下 的FROTRAN片断:
EXTERNAL EIGEN
...
CALL EIGEN
...
上一页
END
下一页
这时它是该引用EIGEN还是eigen呢?如果所使用的
停止放映
FROTRAN系统正好是怪异的那种,没问题。如果是常
见的如CVF,这时它就无法区分EIGEN和eigen,这样
有关FORTRAN 95的辅助字符集的使用规则,请参
上一页
考具体的编译系统的说明。
下一页
停止放映
3.5 词汇
所谓FORTRAN的词汇就是一个语句的最小的意义单位,它 由一个或多个FORTRAN字符集里的字符组成。包括两类共 6种,分类例举如下: ● 由文字字符组成的词汇,包括4种:
▪ 语句关键词 ▪名称 ▪由单个词汇组成的字面常量 ▪标识符
在FORTRAN90与95中:
默认在FORTRAN77中的规定, 在FORTRAN90之后的标
准里,开始允许在一个程序单元内,由用户定义特定的不
上一页
依赖于固有数据存储模式的数据类型,这就是派生数据类
下一页
型。
停止放映
第二种情况:
指定固有数据类型的种别参数。
● 用来指定程序当中需要使用的每一种固有数据类型所要 求占据的内存空间大小的属性由种别参数表示。给这个变 量(参数)指定一个数值,就可以说明数据所需要的存储空 间的大小,也就是程序允许的数值数据的位数和字符串的 字符数目。
上一页 下一页 停止放映
其中第一个为八进制数,第二个为十进制数,第三个为十六进制数。
七.下划线的涵义:
● 下划线的主要作用就是置于单词之间代替空格, 使得我们在命名时使用清楚的英语词汇。
fortran转c语言规则
fortran转c语言规则FORTRAN转C语言规则Fortran和C语言是两种编程语言,它们有着不同的语法和语义。
然而,在某些情况下,我们需要将Fortran程序转换为C语言程序。
为了确保转换后的程序具有正确的行为,必须遵循一些规则。
以下是一些Fortran转换成C语言的规则:1. 类型转换Fortran和C语言有不同的数据类型,因此必须进行数据类型转换。
在Fortran中,整数类型默认是4字节。
在C语言中,整数类型的大小取决于编译器。
要确保正确的类型转换,可以使用类型转换操作符。
例如,"(int)variable"表示将Fortran变量variable转换为C语言整数类型。
2. 函数转换在Fortran中,函数通常采用子程序的方式来实现。
在C语言中,函数被定义为返回值和参数的组合。
为了将Fortran函数转换为C语言函数,必须将Fortran子程序的返回值添加到C语言函数中。
此外,Fortran子程序中使用的参数必须转换为相应的C语言数据类型。
3. 数组转换Fortran和C语言在数组处理方面也有所不同。
在Fortran中,数组是基于1的,而在C语言中,数组是基于0的。
为了正确转换数组,必须使用正确的索引。
例如,如果Fortran数组是A(1:10),则在C语言中可以表示为A[0]到A[9]。
4. 结构体转换Fortran程序中使用的结构体可以通过C语言中的结构体来实现。
为了实现结构体的转换,必须使用与Fortran等效的结构体定义。
5. 代码风格转换Fortran和C语言具有不同的代码风格和模式。
为了使转换后的C语言程序更易于阅读和理解,应使用C语言的代码风格和模式。
在完成Fortran到C语言的转换后,需要进行测试以确保程序的正确性。
这可以通过比较Fortran程序和转换后的C程序的输出结果来实现。
如果结果相同,这意味着转换成功。
否则,需要重新审查程序并进行修正。
总结Fortran和C语言是两种不同的编程语言,但它们在某些方面有相似之处。
fortran语法手册
1 FORTRAN77四则运算符+ - * / ** (其中**表示乘方)在表达式中按优先级次序由低到高为: +或-→*或/→**→函数→()2 FORTRAN77变量类型2.1 隐含约定:I-N规则凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。
2.2 用类型说明语句确定变量类型:可以改变I-N规则2.3 用IMPLICIT语句将某一字母开头的全部变量指定为所需类型如 IMPLICIT REAL (I,J)三种定义的优先级别由低到高顺序为:I-N规则→IMPLICIT语句→类型说明语句,因此,在程序中IMPLICIT语句应放在类型说明语句之前。
2.4 数组的说明与使用使用I-N规则时用DIMENSION说明数组,也可在定义变量类型同时说明数组,说明格式为:数组名(下标下界,下标上界),也可省略下标下界,此时默认为1,例:DIMENSION IA(0:9),ND(80:99),W(3,2),NUM(-1:0),A(0:2,0:1,0:3)REAL IA(10),ND(80:99)使用隐含DO循环进行数组输入输出操作:例如WRITE(*,10) ('I=',I,'A=',A(I),I=1,10,2)10FORMAT(1X,5(A2,I2,1X,A2,I4))2.5 使用DATA语句给数组赋初值变量表中可出现变量名,数组名,数组元素名,隐含DO循环,但不许出现任何形式的表达式:例如DATA A,B,C/-1.0,-1.0,-1.0/DATA A/-1.0/,B/-1.0/,C/-1.0/DATA A,B,C/3*-1.0/CHARACTER*6 CHN(10)DATA CHN/10*' '/INTEGER NUM(1000)DATA (NUM(I),I=1,500)/500*0/,(NUM(I),I=501,1000)/500*1/3 FORTRAN77程序书写规则程序中的变量名,不分大小写;变量名称是以字母开头再加上1到5位字母或数字构成,即变更名字串中只有前6位有效;一行只能写一个语句;程序的第一个语句固定为PROGRAM 程序名称字符串某行的第1个字符至第5个字符位为标号区,只能书写语句标号或空着或注释内容;某行的第1个字符为C或*号时,则表示该行为注释行,其后面的内容为注释内容;某行的第6个字符位为非空格和非0字符时,则该行为上一行的续行,一个语句最多可有19个续行;某行的第7至72字符位为语句区,语句区内可以任加空格以求美观;某行的第73至80字符位为注释区,80字符位以后不能有内容。
科学计算编程中的Fortran
科学计算编程中的 Fortran科学计算编程中的 Fortran 与 C++之争自从有了程序设计语言,“哪种编程语言好”就成为了亘古不变的话题。
这个问题一经提出,必然会招来一场巨大的口水仗。
作者曾经在某些论坛上提出了类似“Fortran 和C++那个用的多”之类的问题,回帖全部达几十个以上,各种意见针锋相对,犹如 Fortran 和 C++信徒之间的“圣战”一般好看。
有很多人曾经请 C++语言之父 Bjarne Stroustrup 做一个 C++与其它编程语言的比较,而 Stroustrup 明确的拒绝了。
他指出,从技术上讲,一个所谓的“公平”的比较将会涉及到大量的技术,这是一个工作量巨大的任务,绝对不是简单的用 C++和其它语言写同一段代码然后比较其运行时间就能完成的。
这种比较涉及到具体的应用领域和用户需求,所处理的信息类型,编译器的质量(不同语言的编译器开发的投入是有相当大差别的),程序员的水平与“偏好”,编程语言的标准(如究竟是 C++97 与 Fortran90 比较,还是应该C++0x 与 Fortran2019 比较?)等等。
他甚至认为,这种比较是“rarely meaningful”的[1]。
因此,今天作者也不打算为某种编程语言摇旗呐喊,而是仅就科学计算编程领域,特别是,限于作者专业即量子化学和分子模拟,来谈一谈两大“主流”编程语言: Fortran 和 C++的在理论化学界的应用历史,以及某些人(包括作者)对它们的看法。
1 Fortran 的美好时代毋庸置疑, 1957 年出现的 Fortran 是世界上第一个高级编程语言。
它的出现,大大降低了普通科研人员学习编程的门槛,而且增强了代码的可移植性。
在此之前,人们都是用机器语言直接书写程序,这种语言对于一般人而言难度太大了,而且是与运行机器相关,因此很难写出高效且具有可移植性的程序。
例如, Roothaan 在研究原子自洽场的计算时专门为 IBM 7030 数字计算机写了一些程序,这些程序用来优化 Slater 基组已经 10 多年了。
fortran与c语言接口参数传递混合编程
Sun Studio 12:Fortran 编程指南∙Previous: 第10 章并行化第11 章C-Fortran 接口本章论述Fortran 与C 的互操作性方面的问题,内容仅适用于Sun Studio Fortran 95 和C 编译器的特定情况。
11.9 Fortran 2003 与C 的互操作性简要说明了Fortran 2003 标准第15 部分中提到的C 绑定功能。
(此标准可以从国际Fortran 标准Web 站点获得)。
Fortran 95 编译器实现了标准中所述的这些功能。
如不特别注明,32 位x86 处理器视为与32 位SPARC 处理器等同。
对于64 位x86 处理器和64 位SPARC 处理器也是如此,只是x86 系统未定义REAL*16 和COMPLEX*32 数据类型,这些数据类型只能用于SPARC。
11.1 兼容性问题大多数 C-Fortran 接口必须在以下这些方面全部保持一致:∙函数和子例程的定义及调用∙数据类型的兼容性∙参数传递(按引用或按值)∙参数的顺序∙过程名(大写、小写或带有结尾下划线(_))∙向链接程序传递正确的库引用某些C-Fortran 接口还必须符合:∙数组索引及顺序∙文件描述符和stdio∙文件权限11.1.1 函数还是子例程?函数一词在 C 和Fortran 中有不同的含义。
根据具体情况做出选择很重要:∙在C 中,所有的子程序都是函数;但void函数不会返回值。
∙在Fortran 中,函数会传递一个返回值,但子例程一般不传递返回值。
当Fortran 例程调用C 函数时:∙如果被调用的C 函数返回一个值,则将其作为函数从Fortran 中调用。
∙如果被调用的C 函数不返回值,则将其作为子例程调用。
当C 函数调用Fortran 子程序时:∙如果被调用的Fortran 子程序是一个函数,则将其作为一个返回兼容数据类型的函数从 C 中调用。
∙如果被调用的Fortran 子程序是一个子例程,则将其作为一个返回int(与Fortran INTEGER*4兼容)或void值的函数从C 中调用。
c语言调用fortran module中函数 -回复
c语言调用fortran module中函数-回复C语言调用Fortran module中的函数在科学计算领域,Fortran和C语言是两种常用的编程语言。
Fortran语言以其强大的数值计算能力而闻名,而C语言则以其灵活性和可移植性而受到广泛使用。
然而,C语言和Fortran语言之间的差异使得它们之间的交互并不总是直接的。
特别是在调用Fortran module中的函数时,C语言需要采取一些额外的步骤。
本文将详细介绍如何使用C语言调用Fortran module中的函数,并提供一步一步的指南。
首先,我们需要了解Fortran module的概念。
Fortran module是一种数据结构,它包含了一组相关的程序单元,如函数、变量和子程序。
使用module可以将这些程序单元组织起来,使其更易于使用和管理。
要在C语言中调用Fortran module中的函数,我们需要了解Fortran module的接口标记。
接口标记描述了Fortran函数的参数类型和返回类型,以及函数的名称。
在C语言中,我们需要使用这些接口标记来正确地调用Fortran函数。
以下是一步一步的指南,展示如何使用C语言调用Fortran module中的函数:步骤1:创建Fortran module首先,我们需要创建一个Fortran module,其中包含我们要调用的函数。
在Fortran源文件中,添加以下代码来定义module和函数:module my_moduleimplicit nonecontainssubroutine my_function(arg1, arg2, result)real :: arg1, arg2, result! Fortran函数的代码result = arg1 + arg2end subroutine my_functionend module my_module在上述示例中,我们定义了一个名为`my_function`的Fortran子程序,它接受两个实数参数`arg1`和`arg2`,并返回它们的和。
计算机语言(或称程序设计语言)的发展过程
计算机语言(或称程序设计语言)的发展过程是其功能不断完善、描述问题的方法越来越贴近人类思维方式的过程。
(1)第一代语言——机器语言机器语言是计算机诞生和发展初期使用的语言,表现为二进制的编码形式,是由CPU 可以直接识别的一组由0和1序列构成的指令码。
这种机器语言是从属于硬件设备的,不同的计算机设备有不同的机器语言。
直到如今,机器语言仍然是计算机硬件所能“理解”的惟一语言。
在计算机发展初期,人们就是直接使用机器语言来编写程序的,那是一项相当复杂和繁琐的工作。
例如,下面列出的一串二进制编码011011 000000 000000 000001 110101命令计算机硬件完成清除累加器,然后把内存地址为117的单元内容与累加器的内容相加的操作。
可以看出,使用机器语言编写程序是很不方便的,它要求使用者熟悉计算机的所有细节,程序的质量完全决定于个人的编程水平。
特别是随着计算机硬件结构越来越复杂,指令系统变得越来越庞大,一般的工程技术人员难以掌握程序的编写。
为了把计算机从少数专门人才手中解放出来,减轻程序设计人员在编制程序工作中的繁琐劳动,计算机工作者开展了对程序设计语言的研究以及对语言处理程序的开发。
(2)第二代语言——汇编语言汇编语言开始于20世纪50年代初期,它是用助记符来表示每一条机器指令的。
例如,上面的机器指令可以表示为CLA 00 017由于便于识别记忆,汇编语言比机器语言前进了一步。
但汇编语言程序的大部分语句还是和机器指令一一对应的,语句功能不强,因此编写较大的程序时仍很繁琐。
而且汇编语言都是针对特定的计算机或计算机系统设计的,对机器的依赖性仍然很强。
用汇编语言编好的程序要依靠计算机的翻译程序(汇编程序)翻译成机器语言后方可执行,但这时用户看到的计算机已是装配有汇编程序软件的计算机。
(3)第三代语言——高级语言、算法语言高级语言起始于20世纪50年代中期,它允许人们用熟悉的自然语言和数学语言编写程序代码,可读性强,编程方便。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C/C++采用的是缺省调用约定是STDCALL约定.在C程序中,可以在函数原型的声明中使用_stdcall关键字来指明过程采用STDCALL调用约定。
Fortran过程采用的缺省标识符是,全部大写的过程名加上“_”前缀和“@n”后缀。
在C程序中保留标识符的大小写。
编译程序会给采用STDCALL约定的过程标识符加上“_”前缀和“@n”后缀。
Fortran过程缺省的参数传递方式是引用方式是。
对于下面这个Fortarn过程:SUBROUTINE ForSub(ivar,rvar)
INTEGER ivar
REAL rvar
WRITE(*,*) ivar,rvar
END
在C语言程序中应给出过程的函数原型及调用方式为:
void main()
{
extern void__stdcall FORSUB(int*I,float*f);
int iCV AR=1;
float rCV AR=2.0;
FORSUB(&iCV AR,&rCV AR);
}
在C++中调用Fortan的过程,在声明函数原型时需要用extern“C”语句,以避免C++编译程序对标识符的修饰;并且C++也可以通过引用方式传递参数。
对于上面的Fortran过程,C++程序应给出的函数原型及调用方法是:
void main()
{
extern “C”{void__stdcall FORSUB(int*I,float*f);}
int iCV AR=1;
float rCV AR=2.0;
FORSUB(&iCV AR,&rCV AR);
}
另外,也可以在Fortran中用!MS$ATTRIBUTES编译伪指令来改变Fortran子过程的调用约定,以便于被其他语言的程序调用。
在下面的例子中,过程ForSub具有C语言的调用约定。
SUBROUTINE ForSub(ivar,rvar)
!MS$ATTRIBUTES C::ForSub
INTEGER ivar
REAL rvar
WRITE(*,*) ivar,rvar
END
这样,这个过程使用的是C调用约定,并且参数传递方式也变为传值方式,过程的标识符变为全部小写且有_前缀而无后缀的方式。
在C语言源程序中的函数原型及调用方法为:void main()
{
extern void FORSUB(int ivar,float rvar);
int iVar=1;
float fVar=2.0; FORSUB(iVar,fVar); }。