C语言和Fortran语言的差异

本文详细介绍C语言和Fortran语言的差异

1. C++语言和Fortran语言的发展背景

在程序设计语言的发展过程中,FORTRAN 语言被认为是科学计算的专用语言。后来推出的FORTRAN90 和FORTRAN 95 版本也不例外,它们虽然可以完全实现C++语言同样的功能,然而其软件开发环境和软件的集成性等方面都远不如C++ 语言。近年来,随着计算机软硬件技术的发展,数据结构、数据库管理技术、可视化与计算机图形学、用户接口系统集成以及人工智能等领域的成果被逐渐应用到结构分析软件中,结构分析软件的设计并不仅仅局限于单一的科学计算需要涉及众多的软件开发领域。C++ 语言可以提供这类软件开发所需的功能,而用FORTRAN 90 却很难实现,另一方面从软件的编程环境来看,目前FORTRAN 90 的编译器极少,而C++ 语言的编译系统相当普及,可以运行在各种机型上,便于实现跨平台的软件系统集成。

2. C语言和Fortran语言的差异

由于两者产生的背景不同,它们是存在差异的,在比较了几组源代码之后,主要有以下体会:

C 最大的优点在于灵活,不但可以藉由 struct 来定义新的数据结构 ,同时 C 的pointer 更可以让我们自由而且有效率地处理大数据。而在 UNIX 系统 中,由于整个操作系统绝大部分就是 C 写出来的,故我们也有方便的 C 函数库, 直接使用系统资源与享受系统带来的服务,以做到一些低阶、快速的动作。而FORTRAN从一开始就用于科学计算,它与C的差异主要表现为:

* 复数运算的速度

* 程序参数与字串

* 内存的动态管理

* 多维阵列的处理

* 函数调用与参数传递

2.1. 复数运算的速度

在进行复数运算的时候,C++ 可以定义复数的 class,还可以重新定义所有的四则运算式,复杂的算式也可以做到由一个表达式来解决。但它的重新定义复数四则运算是用函数来做的,使用函数来调用其速度很慢,除非采用 inline function 的方式,但会遇到以下的问题:要先将这个算式拆解,分别算过后再重组结果,故表面上程序代码很简洁,但实际上是 compiler做了很多工作,还是要付出相当的计算时间代价的。

至于 Fortran,最大的优点在于复数 (complex number) 的运算,复数是 Fortran 的基本数据类型之一,这正是 C 所缺乏的 (C 基本上只有实型与整型类型而已)。 虽然C 也可以由 struct 的定义,达到复数四则运算的目的,但 却很可能牺牲了程序效能,或者是程序写起来相当繁杂降低可读性。因此,在大量而且要求高速的复数运算场合, Fortran 实际上比 C 还要适合。

然而既然复数已是 Fortran 基本数据类型之一,则 Fortran compiler在设计上可以做到对复数特别的 optimization,例如如果遇到较短的复数运算式,它可以用“心算” 直接得出 real_part 与 imag_part 的 expression,像这样:

real(a) =……;imag(a) = …….

如此只需两步就得到结果。直到遇到太长太复杂的算式,才去做拆解的动作。

这样使用 C 来做复数运算可能需要绕圈圈,而且绕出来的圈圈可能还不小。不过如果程序中需要复合的数据结构,如一个自定义的数据结构中既有浮点数、整数、还有字符串时, Fortran 只有举白旗投降了。当然, Fortran 如果要做还是可以做,只是不太方便,而且可能也需要绕圈圈。但如果使用 Fortran 90 则不成问题了,因为 Fortran 90 也有类似 C 的 struct 结构以定义复合的数据类型。

2.2. 程序参数与字串

C 程序可以有参数串列, Fortran 则没有。例如,当程序执 行时,必须输入 a, b, c

三个参数,在 C 可以这样写:

int main(int argc, char **argv)
{
int a, b, c;
a = atoi(argv[1]);
b = atoi(argv[2]);
c = atoi(argv[3]);
}


而程序执行时,参数就是这样传入: a.out 12 15 18

时间: 2024-11-02 01:30:11

C语言和Fortran语言的差异的相关文章

请问java语言和vfp语言项目的结合怎么做?

问题描述 请问java语言和vfp语言项目的结合怎么做? 请问java语言和vfp语言项目的结合怎么做?请问java语言转vfp语言的数据困难么?一般耗时多少? 解决方案 www.vfp2java.net 将vfp转换为java

探讨register关键字在c语言和c++中的差异_C 语言

在c++中: (1)register 关键字无法在全局中定义变量,否则会被提示为不正确的存储类. (2)register 关键字在局部作用域中声明时,可以用 & 操作符取地址,一旦使用了取地址操作符,被定义的变量会强制存放在内存中. 在c中: (1)register 关键字可以在全局中定义变量,当对其变量使用 & 操作符时,只是警告"有坏的存储类". (2)register 关键字可以在局部作用域中声明,但这样就无法对其使用 & 操作符.否则编译不通过. 建议不

r语言-R语言和MySQL还有Hadoop的教学课程哪里找

问题描述 R语言和MySQL还有Hadoop的教学课程哪里找 R语言和MySQL还有Hadoop的教学课程哪里找 还请高手指点 解决方案 test 1,没人回答 解决方案二: R语言,翻pdf学吧, MySQL,是关系型数据库,可以找其他的关系型数据学习,比如oracle,通用,注意oracle多了一点内容 Hadoop,这个没办法,问谷歌和度娘 解决方案三: R和mysql这两个可以找本PDF来看,hadoop其实这东西也是有书的

《易学C++(第2版)》——1.5 C语言、C++语言和Visual C++

1.5 C语言.C++语言和Visual C++ 在学习C++之前,有必要了解C语言.C++语言和Visual C++之间的关系. C语言是一种高级语言,它诞生于20世纪70年代.虽然它已经存在了四十几年,但至今依然被广泛运用和学习.C语言的大多数语法也被沿用到C++.Java和C#等语言中去.因此,在对计算机语言的技术路线进行分类时,通常把C语言和C++放在一起,称为C/C++.C语言是一种结构化的语言,它的执行效率很高,并且易于移植.但是,C语言自身并不具有面向对象的特性,因此在开发大规模的

Javascript编程语言和DOM接口系列教程(1)

Hello,今天开始彬Go将以系列教程的方式为大家讲解Javascript编程语言和DOM接口,本篇教程为该系列的第一部分. 虽然现在一些js框架诸如jQuery.Prototype和MooTools能提高我们的前端开发效率而且很好的解决了浏览器兼容性问题,但我们仍要打好javascript技术基础.Javascript DOM 控制系列教程将告诉你你需要了解的javascript和文档对象模型(DOM)的本质. 引言 JavaScript JavsScript是可以在各种不同环境下使用的动态的

用 Swift 语言和 SpriteKit 创建有人工智能的井字游戏

本文讲的是用 Swift 语言和 SpriteKit 创建有人工智能的井字游戏, 我对(自我)学习有着很强的热情并且非常着迷.最近,我提出了一个利用制作游戏的理论应用到应用程序开发中来提高用户体验的假说.很多人提出"游戏化"这类的流行词,通过应用程序与用户之间的交互,以及让用户主动参与的方式去取悦用户,达到解决应用程序的痛点的难题.无论你的应用程序到底提供了什么内容.我们今天不会讨论这个(我甚至都不会提起增加游戏感行为的倡导者们是否玩游戏这样的问题.) 取而代之,我们会使用 Sprit

求助c语言高手帮在下解决几个棘手的问题, 就是帮忙把fortran语言转换成c语言

问题描述 求助c语言高手帮在下解决几个棘手的问题, 就是帮忙把fortran语言转换成c语言 READ(*,*)X0,EP N=1 10 X=1.0/(X0*X0+1.0) WRITE(*,200) N,X 200 FORMAT(1X,2HN=,I4,5X,2HX=,F10.6) IF (ABS(X-X0).LT.EP) GOTO 20 X0=X N=N+1 GOTO 10 20 STOP END

fortran语言,初次接触fortran

问题描述 fortran语言,初次接触fortran DIMENSION PI(20) DATA PI/12*1./ 这两句是什么意思?谢谢,初次接触fortran语言....... 解决方案 定义一个叫pi的数组,有20个元素.DATA,给数组赋值.至于为什么有一个句号,这就不知道了.fortran有很多方言,不知道你用的是哪一种. 解决方案二: Fortran语言简介

买水果问题,用c语言和c++回答

问题描述 买水果问题,用c语言和c++回答 今天zz突然想吃水果了,然后他到超市去买水果,现超市有n个不同的水果,zz要买m个水果 (m<=n);那么zz有多少种买水果的方式?? 解决方案 这个应该是排列组合的问题,和彩票22选5类似,可以参考这个 http://wenku.baidu.com/link?url=L91yYWksToQXFnfyKL22o83XzvR2l6CBrNDVdhw1Gkjz1gAtcE6uC6ih14FzMRew5LeZ3jNVp0uXhJtSzir9QFxeUPABc