fortran n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Fortran PowerPoint Presentation
Download Presentation
Fortran

Loading in 2 Seconds...

play fullscreen
1 / 19

Fortran - PowerPoint PPT Presentation


  • 174 Views
  • Uploaded on

Fortran. 5110379083 龚立航. 目录. 历史 特性 一些语句简介 和 C 语言的比较. 历史. 1957 年, IBM 公司开发出第一套 FORTRAN 语言 , 在 IBM704 计算机上 运作 。 1966 年,美国标准化协会制定了 Fortran66 和 Fortran66 标准 。这时 Fortran 语言还不是结构化的程序设计语言 。

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Fortran' - cornelius-welsh


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
fortran

Fortran

5110379083 龚立航

slide2
目录
  • 历史
  • 特性
  • 一些语句简介
  • 和C语言的比较
slide3
历史
  • 1957年,IBM公司开发出第一套FORTRAN语言,在IBM704计算机上运作。
  • 1966年,美国标准化协会制定了Fortran66和Fortran66标准。这时Fortran语言还不是结构化的程序设计语言。
  • 1976年,美国标准化协会重新对Fortran66进行了评估,公布了新的Fortran标准,也就是Fortran 77。Fortran 77是具有结构化特性的编程语言。Fortran77在短时间内取得了巨大的成功,广泛地应用于科学和工程计算,几乎统治了数值计算领域。
  • 1991年发布的Fortran 90大幅改进了旧版Fortran的型式,加入了对象导向的观念与提供指针,并同时加强数组的功能。
  • 后来又陆续推出Fortran 95、Fortran 2003等更新版本。
slide4
约翰·贝克斯
  • FORTRAN的发明小组组长
  • BNF
    • 用于表示上下文无关文法的语言,上下文无关文法描述了一类形式语言。
slide6
特性
  • Fortran语言的最大特性是接近数学公式的自然描述,在计算机里具有很高的执行效率。
  • 易学,语法严谨。
  • 可以直接对矩阵和复数进行运算,这点MATLAB有继承。
  • 自诞生以来广泛地应用于数值计算领域,积累了大量高效而可靠的源程序。
  • 很多专用的大型数值运算计算机针对Fortran做了优化。
  • 广泛地应用于并行计算和高性能计算领域。
  • Fortran 90,Fortran 95,Fortran 2003的相继推出使Fortran语言具备了现代高级编程语言的一些特性。
  • 其矩阵元素在记忆空间储存顺序是采用列优先(Column first),MATLAB也承袭这点,目前最多使用的C语言则采用行优先(Row first)。
slide7

行优先顺序

    • 将数组元素按行向量排列,第i+1个行向量紧接在第i个行向量后面。
    • 例: 二维数组Amn的按行优先存储的线性序列为:a11,a12,…,a1n,a21,a22,…,a2n,……,am1,am2,…,amn
  • 列优先顺序
    • 将数组元素按列向量排列,第i+1个列向量紧接在第i个列向量后面。
    • 例: 二维数组Amn的按列优先存储的线性序列为:a11,a21,…,am1,a12,a22,…,am2,……,a1n,a2n,…,amn
slide8
输出语句

一般格式:

print ﹡,〈输出表列〉

write (﹡,﹡)〈输出表列〉

例1: print ﹡,56.8,125

或 write (﹡,﹡) 56.8,125

例2: print ﹡,a, b, c

或 write (﹡,﹡) a, b, c

slide9
输出语句
  • 每个整数占12列,数据打印在右端,左补空格。

例:print *,123,-1128

输出结果:

︺︺︺︺︺︺︺︺123︺︺︺︺︺︺︺-1128

  • 每个实数占16列,数据打印在右端,左补空格。

例:print *,15.4,-321.45

输出结果:

︺︺︺︺︺︺15.400000︺︺︺︺︺-321.450000

c fortran
C语言和Fortran语言的差异
  • 复数运算的速度
  • 程序参数与字串
  • 内存的动态管理
  • 多维阵列的处理
  • 函数调用与参数传递
slide11
复数运算的速度
  • 复数是 Fortran 的基本数据类型之一
  • C 可以由 struct的定义,达到复数四则运算的目的,但却很可能牺牲了程序效能,或者是程序写起来相当繁杂降低可读性
slide12
程序参数与字串

C 程序可以有参数串列

int main(intargc, char **argv)

{

int a, b, c;

a = atoi(argv[1]);

b = atoi(argv[2]);

c = atoi(argv[3]);

}

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

slide13
程序参数与字串

Fortran 要传入任何参数,只能透过对话的方式:

integer a, b, c

c ------------------------------------

write(*,*) ''please input integer a:''

read(*,*) a

write(*,*) ''please input integer b:''

read(*,*) b

write(*,*) ''please input integer c:''

read(*,*) c

c ------------------------------------

end

slide14
内存的动态管理

C 可以动态分配存储空间给任何数据类型,而Fortran 却不行

float *c_function(intcnt)

{

float *a;

a = malloc(sizeof(float) * cnt);

return a;

}

slide15
多维阵列的处理
  • C语言是行优先
  • Fortran是列优先
slide16
函数调用与参数传递

C 的函数调用就只有一种方式,函数可以传入参数,也可以返回值,例如:

void c_function1(int a, float *b)

{

........

}

int c_function2(int a, float *b)

{

int r;

........

return r;

}

slide17
函数调用与参数传递

函数有两种,一为 subroutine,一为 function。subroutine不会有传回值,但 function 有传回值。

subroutine f_function1(a, b)

integer a

real b

........

end

integer function f_function2(a, b)

integer a

real b

........

f_function2 = ....

end

slide18
函数调用与参数传递

 Fortran 的 function 还要更特殊一点,当程序要使用 f_function2 时,必须先申明:integer f_function2

program fout

integer a, r, f_function2

real b

c -----------------------------------

call f_function(a, b)

r = f_function2(a, b)