FORTRAN和C 对比

合集下载

pscad自定义元件

pscad自定义元件

在PSCAD中要实现新的算法,首先要建立一个自定义元件。

自定义元件分为两种,一种是电气元件,一种是信号处理元件。

本帖实现的内容是一个非线性电感,其电感值随着电流大小而变化,属于电气元件。

写控制算法的同学可能主要用到后者,将输入信号经过一系列的处理计算得到一个输出信号。

问题1:将程序写在哪里?首先要将算法程序分成两个部分:一部分是PSCAD可以实现的,如处理仿真参数、读入仿真数据、输出仿真结果以及积分、微分等简单函数。

这部分内容写在自定义元件definition的Script中。

可以写在Fortran中也可以写在DSDYN中,两者略有不同但不会影响简单应用,具体内容请参阅帮助文件。

另一部分是我们自己的C语言算法,要将C算法总结成y=f(x,p)的输入输出形式的形式写在一个*.c文件中。

并添加到PSCAD的File Reference中。

C函数的命名形式一定是void XX_XXX__()的形式,注意名字中的下划线,本人的试验结果是必须有这三个下划线,哪位同学有其他发现可以一起探讨一下。

问题2:如何传数据?由于PSCAD和C函数是互相传递指针,因此就需要将C函数写成f(y,x,p)的形式,例如:void ja_model__(real *h,real *ht,real *mt,real *ms,real *a,real *alph a,real *c,real *k,real *b,real *m)。

其中h是输出,ht,mt是输入,后面的都是参数。

在PSCAD中用call语句调用,例如:CALL JA_MODEL(H,HT,MT,$MS,$A,$ALPHA, $C,$K,B,M) 。

注意函数名中的下划线,这里只有一个!其中H,HT,MT都是Fortra n程序中的变量,后面参数前面加“$”是引用参数的意思,具体内容请参阅帮助文件。

问题3:如何保存前一时刻的变量并在本时刻调用?在时域仿真的时候我们不可避免的要用到上一时刻的某些计算结果。

C与C++与FORTRAN混合编程

C与C++与FORTRAN混合编程

C/C++/FORTRAN 混合编程混合编程在软件编程中是经常遇到的问题,尤其是C/C++/FORTRAN的混合编程,本文主要说明以上三种语言混合编程中经常遇到的问题,同时,也说明了不同平台下混合编程应注意的问题。

混合语言编程要注意的问题主要体现在:函数调用和数据结构的存储。

1 Windows平台函数:由于Fortran编程语言没有大小写之分,Windows平台下的混合语言编程要注意的主要是大小写的问题。

考虑到编译器的差异,可以用下面的方式进行跨平台编程的函数声明。

( C/C++编译器使用Microsoft Visual C++ 6.0, Fortran编译器使用 Digital Visual Fortran 6.0)。

假设一个C的函数为 void cFunction(); 那么,只需要在它的头文件里面进行如下定义即可:#ifdef __cplusplusextern “C” void {#endifextern void __stdcall CFunction();#define cFunction CFUNCTION#ifdef __cplusplus}#endif这样,在Fortran或者C++的程序里面就可以直接调用了。

假设是一个Fortran函数SUBROUTINE FFUNCTION(); 那么,在C++头文件里进行如下的定义就可以了:#ifdef __cplusplusextern “C” void {#endifextern void __stdcall ffunction();#define ffunction FFUNCTION#ifdef __cplusplus}#endif这样,就可以在C++的程序里面直接调用。

由于C编译器里面,没有定义__cplusplus这个环境变量,因此,C文件里面,也可以直接使用这个头文件。

如果是一个C++函数,如: void cPlusplusFunction();和c函数一样,进行下面的定义即可:#ifdef __cplusplusextern “C” void {#endifextern void __stdcall cPlusplusFunction ();#define cPlusplusFunction CPLUSPLUSFUNCTION#ifdef __cplusplus}经过上面的定义后,所有的函数便可以在三种语言中自由调用。

C_C_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用法总结

fortran用法总结

我的Fortran基本用法小结周日, 10/14/2007 - 21:00 — gator一、说明二、概述三、数据类型及基本输入输出四、流程控制五、循环六、数组七、函数八、文件一、说明本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。

只读到第九章,主要是3~9章,都是最基本的用法(原书共16章)。

这里主要摘录了我看书过程中总结的一些Fortran和C不同的地方,主要是语法方面。

希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。

要想得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九应该很快的,花一两天就行了。

觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。

外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没得及仔细想,只是按着作者的意思去理解。

所以这份笔记还处于纸上谈兵的层次。

如果有不妥的方,希望大家指正。

谢谢!文中蓝色的部分是程序代码,!后面的内容为注释。

二、概述1、名词解释Fortran=For mula Tran slator/Translation一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。

的确,从一开始,IBM设计的时候就是为了方便数值计算和科学数据处理。

设计强大的数组操作就是为了实现这一目标。

ortran奠定了高级语言发展的基础。

现在Fortran在科研和机械方面应用很广。

2、Fortran的主要版本及差别按其发展历史,Fortran编译器的版本其实很多。

现在在广泛使用的是Fortran 77和Fortran90。

ortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所以编程时推荐使用90。

鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看77程序。

以下是77和90的一些格式上的区别。

Linux环境中Fortran与C混合编程方法研究

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 之间的混合编程研究。

[转载]Fortran程序基本特点及不同版本之间的区别

[转载]Fortran程序基本特点及不同版本之间的区别

[转载]Fortran程序基本特点及不同版本之间的区别原⽂地址:Fortran程序基本特点及不同版本之间的区别作者:caodanping_7141、F77和F90的区别名称:F77固定格式(fixed format),程序代码扩展名:.f或.for,F90⾃由格式(free format),扩展名:.f90格式:F77每⾏前六个字符不写程序代码,可以空着或者1-5字符使⽤数字来标注⾏代码(⽤作格式化输⼊出等),7-72为程序代码编写区,73⾏后被忽略,超过的话可以续⾏,F90每⾏可132字符注释:F77以C,c或*开头的⾏被当成注释;F90以"!"引导注释,也可放在⾏尾续⾏:F77所续⾏的第六个字符是"0"以外的字符,通过⽤+表⽰,F90以&续⾏,放在该⾏末或下⾏初均可变量名:F77⽀持6个字符长,F90⽀持31个字符长常数:F90中PARAMETER可以做形容词,和变量声明同时写在⼀起Real, parameter :: pi=3.1415926关系运算符:F90: == /= > >= < <= (更接近标准的数学符号)F77: .EQ. .NE. .GT. .GE. .LT. .LE.逻辑运算符:.AND. .OR. .NOT. .EQV. .NEQV.变量声明赋值:(1)integer: kind=1,2,4(长整型)F90: integer(kind=2) aInteger(kind=4)::a=15(加上两个冒号可以在定义时就直接赋值)F77: integer*2 b or integer(2) c⽤DATA命令单独赋值(属于声明),data b,c /1, 2.0/Fortran规定变量名以字母IJKLMN六个字母开头的即认为是整型变量(I-N规则),其他字母开头的为实型变量(2)real:kind=4,8(双精度)/real* 8=double precision(1.23E3/1.23D3)F90:real(kind=4) a, F77:real*4 a or real(4) a(3)complex kind=4,8(双精度)F90: complex(kind=4) a a=(3.1,2.5)(4)character len为最⼤长度(26个字母,数字0-9,专⽤字符13个:空格'$()+-*/,=.:)F90: character(len=10) c c=”Hello”, F77: c=’Hello’(5)logical kind=4,2(最少只需要1即可)F90: logical(kind=4) a a=.true.(6)⾃定义类型type:类似于C中的structF90: type::person ……引⽤时变量和元素直接以%区隔,visual fortran可以⽤.来表⽰全局变量全局变量:F77采⽤command来声明全局变量,编译器只提供内存共享⽽不去检查数据类型,使⽤时需要注意定义的是否⼀主程序和主程序中致,⽽F90则提供了module(不是函数,⽤于封装程序模块),可以把全局变量都声明在module中,这样主程序和主程序中就不需要编写重复的程序代码来声明全局变量就不需要编写重复的程序代码来声明全局变量了,函数在需要使⽤时只需要⽤use来调⽤该module_name即可:module module_name...end module还可以把功能上相关的函数放在同⼀个module模块中,程序想要调⽤时use该module才能调⽤,这样⽐较符合模块化的概念,在该module中⽤contains引导函数即可。

几种高级语言简介

几种高级语言简介

Fortran语言的最大特性是接近数学公式的自然描述,在计算机里具有很高的执行效率。

易学,语法严谨。

可以直接对矩阵和复数进行运算,这一点类似matlab。

自诞生以来广泛地应用于数值计算领域,积累了大量高效而可靠的源程序。

很多专用的大型数值运算计算机针对Fortran做了优化。

广泛地应用于并行计算和高性能计算领域。

Fortran90,Fortran95,Fortran2003的相继推出使Fortran语言具备了现代高级编程语言的一些特性。

Fortran语言是一种极具发展潜力的语言,在全球范围内流行过程中,Fortran语言的标准化不断吸收现代化编程语言的新特性,并且在工程计算领域仍然占有重要地位。

不可否认,Fortran语言与目前流行的JAVA,C#等高级语言相比,它缺乏创造力。

但是,工科学生必须注意到,由于Fortran在工程计算领域长期处于统治地位,很多优秀的工程计算软件都是运用fortran语言编写,例如ANSYS,Marc,为了能够使用这些商业软件的高级功能,必须先学会fortran语言,才能编写应用程序接口。

在数值计算中,Fortran语言仍然不可替代。

Fortran90标准引入了数组计算等非常利于矩阵运算的功能。

在数组运算时,Fortran能够自动进行并行运算,这是很多编程语言不具备的。

运用fortran语言,你能够运用很多现成的函数软件包,所以非常便利。

(目前流行的Matlab的早期版本,主要就是为两个著名的Fortran函数包提供程序接口)Prolog(Programming in Logic的缩写)是一种逻辑编程语言。

它建立在逻辑学的理论基础之上,最初被运用于自然语言等研究领域。

现在它已广泛的应用在人工智能的研究中,它可以用来建造专家系统、自然语言理解、智能知识库等。

同时它对一些通常的应用程序的编写也很有帮助。

使用它能够比其他的语言更快速地开发程序,因为它的编程方法更象是使用逻辑的语言来描述程序。

fortran c c++发展历史

fortran c c++发展历史

一、Fortran的发展历史Fortran(Formula Translation)是一种编程语言,最初在1950年代由IBM开发。

它是世界上第一种广泛使用的高级编程语言,专门用于科学和工程计算。

Fortran的发展和演变可以追溯到上世纪50年代。

1. 1954年,IBM开发了Fortran 0的原型,并在1957年发布了Fortran I版本。

这是世界上第一种高级编程语言,为科学和工程计算提供了便利。

2. 1962年发布了Fortran II版本,引入了子程序(subroutines)和函数(functions)的概念。

这为程序员提供了更大的灵活性和模块化的能力。

3. 1966年发布了Fortran 66版本,这是第一个被ANSI(美国国家标准协会)认可的Fortran标准。

它引入了更多的数学函数、标准化输出和输入,以及更好的程序结构。

4. 1977年发布了Fortran 77版本,这个版本增加了对结构化编程的支持,引入了逻辑表达式、控制结构和一些新的内建函数。

5. 1990年发布了Fortran 90版本,这个版本是最重大的变革之一。

它引入了模块化的概念、动态内存分配、指针、以及其他一些现代编程语言所具备的特性。

6. 2004年发布了Fortran 2003版本,新增了一些新的特性,如对C 语言的互操作性、新的数组操作符等。

还引入了一些更为现代的编程特性,如异常处理、并行编程等。

7. 目前最新的版本是Fortran 2018,它在之前版本的基础上进一步完善和扩展了一些功能,使得Fortran更适合于现代科学和工程计算的需求。

二、C语言的发展历史C语言是一种通用的高级编程语言,由美国计算机科学家丹尼斯·里奇(Dennis Ritchie)于20世纪70年代初在贝尔实验室设计开发。

C 语言的设计目标是提供一种能以简洁方式编写系统软件的编程语言。

1. 1972年,贝尔实验室的丹尼斯·里奇开始设计C语言,并在1978年正式发布了第一个正式的C语言标准。

fortran转c语言规则

fortran转c语言规则

fortran转c语言规则
1.数据类型的转换:Fortran中的数据类型在C语言中有对应的数据类型,但是它们的存储方式和取值方式可能会有所不同。

在进行转换时需要注意数据类型的兼容性。

2. 数组的转换:Fortran中的数组是列主序的,而C语言中的
数组是行主序的,因此在进行转换时需要对数组的存储方式进行转换。

3. 函数的转换:Fortran中的函数和C语言中的函数有很大的
差异,因此在进行转换时需要对函数的名称、参数、返回值等进行转换。

4. 控制结构的转换:Fortran中的控制结构和C语言中的控制
结构有很大的差异,因此在进行转换时需要对控制结构的语法和用法进行转换。

5. 文件操作的转换:Fortran中的文件操作和C语言中的文件
操作有很大的差异,因此在进行转换时需要对文件的打开、关闭、读写等操作进行转换。

总之,在进行Fortran转C语言的转换时,需要根据两种语言的语法、语义和用法进行逐一对比,找出它们之间的差异,并进行相应的转换处理。

- 1 -。

fortran转c语言规则

fortran转c语言规则

fortran转c语言规则
1.Fortran中变量名必须以字母开头,且长度不超过6个字符;C语言中变量名可以以字母或下划线开头,且长度没有限制。

2. Fortran中的数组下标从1开始,而C语言中的数组下标从0开始。

3. Fortran中的字符串以单引号括起来,C语言中的字符串以双引号括起来。

4. Fortran中的函数调用时,参数传递采用按位置传递的方式,而C语言中的函数调用采用按值传递的方式。

5. Fortran中的函数名不区分大小写,而C语言中的函数名区分大小写。

6. Fortran中的逻辑运算符为 .AND.、.OR.、.NOT.,而C语言中的逻辑运算符为 &&、||、!。

7. Fortran中的循环语句为 DO,而C语言中的循环语句为 for、while、do-while。

8. Fortran中的文件操作采用 OPEN、CLOSE、READ、WRITE 等语句,而C语言中的文件操作采用 fopen、fclose、fread、fwrite 等函数。

9. Fortran中的程序入口为 PROGRAM,而C语言中的程序入口为 main 函数。

10. Fortran中的注释以 ! 开头,C语言中的注释以 // 或
/*...*/ 开头。

C语言和Fortran语言的差异(3) - 编程入门网

C语言和Fortran语言的差异(3) - 编程入门网

C语言和Fortran语言的差异(3) - 编程入门网共4页:源自上一页12
3
4
下一页
上一篇:C编译器的设计 下一篇:C语言中实现动态分配二维数组
/Programming/C/200710/4979_3.htm[2011-9-2 22:26:42]
C语言和Fortran语言的差异(3) - 编程入门网
C语言和Fortran语言的差异(3)
时间: 2007-10-25 温睿
2.4. 多维阵列的处理 不论是在 C 或 Fortran, 所谓的多维阵列实际 上只是一个很长的一维连续存储空间,经过分割后当 做多维阵列使用。例如,一个 C 的二维阵列声明如 下:
double a[12][10];
则它在存储空间中的配置为: |<--- 10 ---><--- 10 ---> .... <--- 10 --->| |<<-------------- 共 12 组 --------------->>| 所以它实际上是一块 12*10*sizeof(double) bytes 的连续存储区块,而经由以上的声 明,compiler 便知道当使用到它时,要将分割成每单位元素为 sizeof(double),每 10 个单位一组,而 总共 12 组的一个二维阵列,则当我们使用阵列的 index 来存取阵列元素时, compiler 也会自动算好 该元素阵列在此存储区块的位置,因此就能很方便地使用。 Fortran 也是如此,但有一个很大的不同,它的存储区块分割配置的方式是与 C 反向的。例如声明 一个二维阵列如下:
double precision a(12,10)
则它在存储空间中的配置为: |<--- 12 ---><--- 12 ---> .... <--- 12 --->| |<<--------------- 共 10 组 -------------->>| 因此,如果我们要在 Fortran 中配置一个与上头那个 C 一模一样的二维阵列时,实际上应该要将其 index 反过来:double precision a(10,12) 除此之外, C 的阵列 index 一律是从 0 开始,对于一个有 N 个元素的阵列,其最后一个 index 是 N-1,且每个阵列元素的 index 值差 1。 Fortran 不一定,要看怎么声明了。例如声明一个阵列如 下:

fortran用法小结

fortran用法小结

Fortran用法小结目录:一、说明二、概述三、数据类型及基本输入输出四、流程控制五、循环六、数组七、函数八、文件一、说明本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。

只读到第九章,主要是3~9 章,都是最基本的用法(原书共16章)。

这里主要摘录了我看书过程中总结的一些Fortran 和C不同的地方,主要是语法方面。

希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。

要想得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九应该很快的,花一两天就行了。

觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。

外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没得及仔细想,只是按着作者的意思去理解。

所以这份笔记还处于纸上谈兵的层次。

如果有不妥的方,希望大家指正。

谢谢!文中蓝色的部分是程序代码,!后面的内容为注释。

二、概述1、名词解释Fortran=Formula Translator/Translation一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。

的确,从一开始,IBM设计的时候就是为了方便数值计算和科学数据处理。

设计强大的数组操作就是为了实现这一目标。

Fortran奠定了高级语言发展的基础。

现在Fortran在科研和机械方面应用很广。

2、Fortran的主要版本及差别按其发展历史,Fortran编译器的版本其实很多。

现在在广泛使用的是Fortran 77和Fortr an90。

Fortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所以编程时推荐使用90。

鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看77程序。

以下是77和90的一些格式上的区别。

Fortran 77:固定格式(fixed format),程序代码扩展名:.f或.for(1)若某行以C,c或*开头,则该行被当成注释;(2)每行前六个字符不能写程序代码,可空着,或者1~5字符以数字表明行代码(用作格式化输入出等);7~72为程序代码编写区;73往后被忽略;(3)太长的话可以续行,所续行的第六个字符必须是"0"以外的任何字符。

Fortran与C++的比较

Fortran与C++的比较

格)’$()+-*/,(逗号)=.(小数点):(冒
格)’=+-*/,():;”?_!#%&[]|{}^<>
号)
1) 第一个字符必须为字母;
1) 第一个字符必须是字母或下划线;
2) 第一个字母后面可以跟 1-5 位数 2) 长度随系统而定,一般不要超过 31
字或字母(如果选定的变量名超过
个字符,变量名中只能使用数字、字
2 Fortran其它字符多$(多用于续行);C多”?_!#%&[]|{}^<>(其中%表示求余) 3 C++关键字: auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while(以上为ANSI C的 32 个保留字)bool catch class delete friend inline new operator private protected public template this throw try virtual等,BC和VC对保留字的扩充不同。
1) if (condition1) { … } [else if (condition2) { }]
块1

[ELSE IF (逻辑表达式) THEN

块2 ]
[…] [else{ }] (可见 C++中将 Fortran77 中块 IF 语句和逻辑 IF 语句的功能

科学计算编程中的Fortran

科学计算编程中的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 字符串 比较函数

fortran 字符串 比较函数

fortran 字符串比较函数在Fortran中,要比较字符串,可以使用内置的字符串比较函数。

Fortran提供了几种用于字符串比较的函数,其中包括了字符串相等比较和字符串大小比较。

首先是字符串相等比较,你可以使用`==`操作符或者调用`TRIM`函数来比较两个字符串是否相等。

例如:fortran.character(len=10) :: str1, str2。

logical :: equal.str1 = 'Hello'。

str2 = 'Hello'。

equal = (TRIM(str1) == TRIM(str2))。

在这个例子中,`equal`将会被设置为`.true.`,因为`str1`和`str2`的值相等。

其次是字符串大小比较,你可以使用内置的字符串比较函数`COMPARED`。

例如:fortran.character(len=10) :: str1, str2。

integer :: result.str1 = 'apple'。

str2 = 'banana'。

result = COMPARED(str1, str2)。

在这个例子中,`result`将会被设置为一个负数,表示`str1`在字典序上小于`str2`。

除了上述方法,你也可以使用循环和逐字符比较的方法来比较字符串。

这种方法可以让你更加灵活地处理字符串比较的逻辑,但需要编写更多的代码。

总的来说,Fortran提供了多种方法来进行字符串比较,你可以根据具体的需求选择合适的方法来比较字符串。

希望这些信息能够帮助到你。

c语言调用fortran module中函数 -回复

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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

六、表达式
算术表 达式
fortran 1. ** 乘方 2. * 乘、/ 除 3. + 加、- 减
关系表 达式
逻辑表 达式
条件表 达式
1. <、<=、>、>= 2. ==、/= 1. .AND. 2. .OR. 3. .NOT. 4. .EQV. 5. .NEQV. 无
赋值表 1. = 达式
逗号表 无 达式
五、输入和输出语句
输入输 出
输入输 出格式
fortran 输出:write(unit,fmt) A,B,C
print fmt, A,B,C 输入:read(unit,fmt) A,B,C 1. 默认输出位置和不限定输入输出
格式 write(*,*) A,B,C 2. 格式化输入输出
1) 指定代码行对应格式输入输出 write (*,100) A 100 formt(I4)
Fortran90 与 C++的比较
一、程序结构、语句和注释
程序结 构
语句
注释
fortran
C++
Program main(自定义程序名) 主程序代码
预处理命令以“#”开头,包括宏定义命 令、文件包含命令和条件编译命令
Stop(程序结束,可省)
函数,有一个主函数和若干个函数组成,
End(主程序代码结束)
主函数为 main 函数。函数体由一对花括
号“{}”括起来
每行一般为一句语句,语句末不加“;” 书写格式自由灵活,语句末加“;”
1. 每行可写 132 个字符
1. 每一行可写一条或多条语句,一条语
2. 代码开头或结尾的“&”,连接下一 行或下一行代码
句可分写在一行或多行内
感叹号“!”后的文本为注释
单行注释:“//”后的文本为注释
注释方法:下标从 1 开始
声明方法
声明方法:
1. integer a(10,10)
int a[3][4]
2. integer,dimension(10,10)::a
相当于 int a[0][4],a[1][4],a[2][4]
声明方法
声明方法:
1. integer a(10,10,10)
int a[2][3][4]
或 data a/5*3/
int a[5]={1,2,3}
(2) 利用隐式循环(Fortran 独有!) integer a(5)
ELSE ……
END IF END IF END IF 2. SELECT CASE 语句 select case(变量) case(数值 1) …… case(数值 2) …… case default
C++ 1. If 语句
1) 单支 if 语句 if 语句 ……;
2) 双支 if-else 语句 if(表达式) ……; else ……;
3) 嵌套 if 语句 2. 多支 switch 语句
switch(表达式) case 常量表达式 1; ……; case 常量表达式 n; ……; default ……; 注释:
(1) 与 break 语句结合跳出循环 (2) 两个或以上常量都对应一 个语句,则
case 表达式 1 case 表达式 2 ……;
声明方法:
1) real pi parameter(pi=3.14159)
2) real parameter::pi=3.14159
变量
C++ 1. 数值常量(整型常量、实型常量) 2. 字符常量(字符常量、字符串常量)
转义字符: \a\b\f\n\r\t\v\\\?\’\”\0\ddd\xhh 字符常量:单引号,单个字符,占一 个字节 字符串常量:双引号,单个多个字符, 占一个以上字节(结束符\0) 3. 符号常量 声明方法:#define pi 3.14159 或 cons tint pi=3.14159
END IF 2) 双支 IF 结构
IF(逻辑表达式)THEN ……
ELSE ……
END IF 3) 多支 IF 结构
a) ELSE IF 语句 IF(条件 1)THEN …… ELSE IF(条件 2)THEN ……
ELSE ……
END IF b) 嵌套 IF 语句
IF(条件 1)THEN IF(条件 2)THEN IF(条件 3)THEN ……
优先级
C++ 1. * 乘、/ 除、% 取模 2. + 加、- 减 3. ++ 自加、-- 自减
注释:前置先计算再赋值 后置先赋值再计算
1. <、<=、>、>= 2. ==、!= 1. && 2. || 3. ! 注释:非 0 为真,0 为假
1. ?: A?B:C 先计算 A,如果 A 值为 true(非 0),返回 B 值作为整个条件表达式的值, 如果 A 值为 false(0),返回 C 值。 2. = 3. +=、-=、*=、/=、%= 4. &=、^=、|= 5. &&=、||= 注释:x*=y 即 x=x*y,从右向左赋值 1. , 用于将几个表达式隔开,从左向右
GOTO 100
label;Biblioteka …………100 ……
……
跳跃至指定行,不建议使用
if(逻辑表达式)
2. PAUSE 语句
goto label;
当遇到该语句暂停执行,直到用户
按下 ENTER 继续执行
3. CONTINUE 语句
继续向下执行语句
4. STOP 语句
结束程序执行
1. CYCLE 语句
1. break 语句
…… end select 注释: case 冒号前后两个数值代表范围内所 有数值,用逗号放入一个或多个数值 数值只能是整型或字符型 case 中数值必须为常量,不能使用变量
八、循环结构
循环结 构
流程控 制语句
选择或 循环控 制语句
fortran
C++
1. do 语句
1. while 语句
do counter=起始值,终止值,计数
5. Iw[.m] 以 w 个字符串输出整数, 最少输出 m 个数字 1) 超过 w 字符宽,输出 w 个* 2) 右对齐,不足 m 位左端补 0
6. nX 插入 n 个空格
C++ 运用输入输出流头文件 #include<iostream> 屏幕标准输出:cout<<”abc”<<34<<num; 键盘标准输入:cin>>num
略去该语句之后的循环模块,继续
只能用在 switch 和循环语句中
下一次循环
用在循环中跳出当前的循环,同
2. EXIT 语句
fortran 的 exit
跳出当前的循环
2. Continue 语句
3. 署名的循环
略去该语句之后的循环模块,继续下
例如:loop: do i=1,4,1
一次循环,同 fortran 的 cycle
计算,优先级最低 1. 单目、双目、三目、赋值,逗号,优
先级依次降低 2. 单目运算及赋值运算从左至右 3. 算术、位移、关系、位、逻辑运算依
次降低
七、选择结构
选择结 构
fortran 1. IF 语句
1) 单分支 IF 结构 a) IF(逻辑表达式)…… if(s>100) write(*,*) “slow” b) 块 IF 结构 IF(逻辑表达式)THEN ……
NONE 命令,关闭默认类型功能。
三、数据结构
数据类 型
fortran 1. 整型 INTEGER a
1) 长整型,4 字节(默认) 2) 短整型,2 字节 3) 更短整型,1 字节 声明方法:
1) INTEGER(kind=4) a 2) INTEGER*4 a 3) INTEGER(4) a 2. 实型 REAL a 1) 单精度,4 字节(默认) 2) 双精度,8 精度 声明类似整型 3. 复数 COMPLEX a 4. 字符和字符串 CHARACTER a 声明方法:
C++ 1. 整型 int a
1) signed/unsigned long int ,4 字节 2) signed/unsigned int ,4 字节 3) signed/unsigned short int,2 字节 4) signed/unsigned char,1 字节 默认:signed 2. 实型 1) float 2) double 3) long double 3. 字符型 char a 1) char 2) unsigned char 表示方法: 1) 引号之内的图形符号 2) 引号以内以\开头的 ASCII 码或 特定符号 注释:\a\a\t\n\v\r\”\’\?\\\ddd\xhh \ddd:1~3 位 8 进制数对应 ASCII 码 \xhh:1~2 位 16 进制数对应 ASCII 码 注释: 转换次序从低到高:字符-短整型-整型单精度-双精度(低自动向高转,不会出 错) static_cast<要转换的新数据类型>被转换 的表达式
while(逻辑表达式)
器增值
{
……
……;
……
}
end do
2. for 语句
2. do while 语句
for(表达式 1;表达式 2;表达式 3)
do while (逻辑表达式)
{
……
……;
……
}
end do
3. do while 语句
do
{
……;
相关文档
最新文档