Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1793815
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: C/C++

2012-03-26 12:55:17

Fortran的程序用.f后缀表示(表示固定格式),下面是一个求算术平均数与几何平均数的代码:


  1. C-----Fortran固定格式用C开头(必须在行首)表示注释------
  2. C每行必须用tab缩进,否则编译错误(严格来说是6个空格)
  3. C程序大小写不分
  4. C用PROGRAM表示程序开头
  5.     PROGRAM first_program
  6. C定义四个实数
  7.     real a, b, av1, va2
  8. C从标准输入中得到a和b的值
  9.     READ (*,*) a, b
  10. C--av1为a和b的算术平均数
  11.     av1 = (a+b)/2
  12. C--av2为a和b的几何平均数
  13.     av2 = sqrt(a*b)
  14. C在标准输出中显示结果
  15.     WRITE(*,*) av1, av2
  16. C用END表示程序结尾
  17.     END

Fortran程序的自由格式用.f90后缀表示,下面是上面代码对应的自由格式的版本:
  1. !-----Fortran自由格式中只能用!开头表示注释,C不能用于注释------
  2. PROGRAM first_program !行前不必用tab缩进,但缩进仍然合法
  3. REAL a, b, av1, va2
  4.     rEAd (*,*) a, b !大小写不分
  5.     av1 = (a+b)/2
  6.     av2 = sqrt(a*b)
  7.     WRITE(*,*) av1, av2
  8.     END

gfortran可以用来编译fortran程序。

早期的fortran程序(Fortran77)是写在一张12行80列的卡片上的。每一张卡片表示程序中的一行。卡片上的一列可以表示一个字符。当时允许输入的字符只有0-9,A-Z,以及特殊符号“+ - * / ( ) , . ':”。通过在一列中打1~3个孔来表示一个字符:

卡片上明示了0~9行,在0行上面为第11行,再上面为第12行。卡片的编码方式与机器以及应用有关。此处11行和12行都不打孔时,0~9行中的一个孔表示一个数字;第11,12,0行中打一个孔以及1~9行中打一个孔表示一个大写字母;第11,12,0行中打一个孔或不打孔、2~7行中打一个孔同时第 8行也打一个孔表示一个特殊字符;不打任何孔的列被视为一个空格。正是因为早期的卡片只支持大写字母,所以如今Fortran程序中不区分大小写。


从上面的打孔卡片可以看到,一行Fortran程序(即一张卡片)代表了一条Fortran语句。有时会出现一张卡打不下一行语句,这时再第二张卡片的第6列打一个非0的孔,可以表示该程序行是上一个程序行的续行前5列是标号区,可以输入5位整数,通常情况下标号区是不允许输入非数字的,但注释除外,第一列为C的语句不会被编译器处理。第7~72列是语句区。最后8列是在卡片时代方便程序员查找的注释区,不会被编译器处理。


之后的Fortran90格式更加自由。它一行有132列,可以有多条语句,语句之间用分号隔开,语句也没有固定位置的限制。在程序行中字符“!”后的内容都被视为注释(字符串中的“!”除外)。空格也变得有意义了(Fortran77会忽略行中的空格,关键字和变量中可以有空格)。此外如果132列还写不完一行语句的话,可以在末尾加“&”字符表示有续行,续行的开始则用“&”字符来承接上一行。F77里前面5列的10进制整型数由来表示编号,可用于之后的跳转;F90里还可以用英文名加冒号来表示标签,用于跳转。


文件名后缀.f或.for表示固定格式,而.f90表示自由格式。

一个Fortrant程序的组成结构有:
主程序

[PROGRAM  程序名]            ←语句可省略
.....
END [PROGRAM [程序名]]       ←END必须有

辅程序(过程)
SUBROUTINE 子程序
FUNCTION   函数
BLOCK DATA 块数据
MODULE     模块 (F90)

内部过程   CONTAINS (F90)


阅读(3870) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~