cwhe10的个人博客分享 http://blog.sciencenet.cn/u/cwhe10

博文

0012:Fortran 95程序设计_彭国伦(个人笔记)

已有 6222 次阅读 2016-8-2 12:12 |个人分类:科学研究|系统分类:科研笔记| Fortran, 彭国伦

   《Fortran 95程序设计_彭国伦编著》一书学习用时5天,对Fortran 语言编程具有一定的理解,以下是个人笔记:

!------------------------------------------------------------------

1.以*.F90位扩展名的文件,就是以Free Format来编写的fortran程序;

2.Fortran语言不区分大小写;

3.Free Fortran格式说明:1)叹号!后面是代码注释;2)每行可以编写132个字符

 ;3)行号放在每行程序的最前面;4)一行代码最后是&号具有连接下一行代码的

 作用,同样,若代码开头具有&号也是连 接上一行的作用;

4.write(*,*)括号中两个星号都没有各自的意义,第一个星号代表输出的位置使

 用默认值,即屏幕;第二个星号则代表不特别输出格式;

5.write(UNIT=*,FMT=*)与write(*,*)等价;

6.print *,“Hello”  !星号限定输出格式;

7.Fortran 4种基本类型:整数integer、浮点数real、字符character、布尔变量       logical;

8.声明方法:integer(kind=2) a

            integer  *2       b

            integer (2)     c

9.等价声明方法:integer :: a  和  integer a

10.3.0/2.0=1.5   3/2=1


!-------------------------------------------------------------------------

11.连续使用两个*号是要做乘幂计算;

12.复数类型  Complex

13.add = first // second  !经过两个连续的除号可以连接两个字符串;

14.INDEX(String,key) !返回key这个‘子字符串’在母字符串中第一次出现的

  位置;

15.char(65)  !输出ASCII码65所代表的字符,就是A;

16.ichar(‘A') !输出字符A的ASCII码;

17.a = .true.   !设置真值,注意两个点号;

18.Fortran系统会默认第一个字母变量为I/J/k/L/M/N为整数变量类型,其它变量会

  被当成浮点数使用;

19.Implicit none!取消默认类型功能,所有变量都要事先声明,其次,该命令最好

  放在program的下一行;

20.real,parameter :: pi=3.14159!定义常变量,实数类型;


!------------------------------------------------------------------

21.DATA A,B,C,str /1,2.0,(1.0,2.3),'Fortran 77'/   !data命令会一会走啊顺序

  设置初值,即A=1,B=2.0,C=(1.0,2.3),str='Fortran 77'

22.equivalence(a,b)!声明a,b两个变量使用同一块内存空间;

23.Type具有组合类型功能,结构:  type :: person -----end type person

  例如:a=person("peter",20,170,60,"Guilin,China")  !person是type类的一个

  名字

24.integer (kind=1)    !-128 - 127

  integer (kind=2)!-32768 - 32767

  integer (kind=4)!-2147483648 - 2147483647

  real (kind=4)!±1.18*10^(-38) - ±3.40*10^(38)

25.Fortran 90逻辑运算符号说明:   == 相等 、 /=不相等 、 .EQ.等于 、 .NE.

  不等于 、 .GT.大于 、 .GE.大于等于 、 .LE.小于等于

26..AND. 交集并且两者均成立、 .OR. 并集,只要有一个成立、 .NOT.逻辑反向、      .EQV.两边表达式要相等、  .NEQV. 两边结果不相同

27.字符串的大小比较是根据字母顺序来进行的;

28.Fortran中的select case类似matlab中的switch功能:

   select case (score)

       case (90:100) grade='A'

       case (80:89)  grade='B'

       ...

       case default  grade='?'  !其它情况

   end select

29.select case有些限制:1)只能使用整数(integer),字符(character),及

  逻辑(logical),不能使用浮点类型(real);

2)每个case里的数值必须是固定的常量,不能使用变量;

30.使用浮点数时,不能使用select-case做多重判断,只能使用if-else if的做法;


!------------------------------------------------------------------

31.不建议使用goto语句;

32.pause 暂停执行  、continue 无意义(与matlab中的功能不同),继续向下执行、    stop  停止一切程序;

33.IAND  二进制的AND运算 、  IOR  二进制的OR运算;

34.推荐好书  《Modern Fortran》

35.Fortran编译器:  GCC、intel、PGI、NAG、Absoft

36.Fortran:比较底层,各种算法功能需要自己实现;

37.推荐教材书  《Modern Fortran Explained》,这是最好          的一本!

38.有用的网址推荐:

       http://sourceforge.net!很多开源项目

       http://www.fcode.cn   !国内fortran论坛,内有视频与书籍免费下载

       http://gcc.gnu.org/wiki/GFortran!windows  !上安装GFortran编译器

39.windows系统可以采用IVF+VS组合编译器

40.do  couter=1 , lines , 1  !计数器=1,终止数值=lines,增值=1


!------------------------------------------------------------------

41.Do while()    end  do

42.声明变量过程中最好先赋予一个初值;

43.Cycle循环: 在循环中药略过目前的循环程序模块,直接进入下一个循环是,就

  可以使用cycle命令了;

44.Exit: 可以直接跳出一个DO循环或Do while循环;

45.outter : do i=1,3,1 !循环取名为:outter

46.fortran数组声明:Datatype  name(size)  !类型   数组名(大小)

47.type :: person

       real :: height,weight

  end type

  type (person) :: a(10)  !用person这个新类型来声明数组

       ---

  a(2)%height = 180.0

  a(2)%weight = 70

48.integer a(5)  !可以使用a(1-5)五个角标数据;

49.integer a(-1:4)  !可以使用a(-1) a(0) a(1) a(2) a(3) a(4)共6个数据

50.integer A(5)

  Data A /5*3/   !A为5个3的数组


!------------------------------------------------------------------

51.数组a=b*c   !a(i,j)=b(i,j)*c(i,j),其它a=b/c类似

52.integer,allocatable :: a(:)   !声明一个可变大小的一维数组

53.allocate (a(10))  !配置数组内存空间

54.allocate (a(10),stat=error)!若error为0,则分配内存成功;否则分配内存失败    ;

55.子程序与主程序之间的变量互异,互不相同;

56.主程序中的变量传递到子程序中后,两者共同占用同一块内存;

57.Fortran:传址调用      C语言:传值调用

58.External:声明不是一个可以使用的变量,而是一个可以调用的函数

       real add        !add是一个real变量

       external add    !add是一个函数

59.function add(a,b)   与  real function add(a,b) 等价;

60.全局变量 Common 声明的时候,主程序中的位置与子程序声明的共同占用同样的

  内存;


!------------------------------------------------------------------

61.BLOCK Data可以设置全局变量的初值!

62.参数传递过程中需要类型一致,否则报错;

63.第178页的例子需要手动敲进去测试一下,以便加深印象;

64.数组在函数传递参数过程中,均传递第一个数据的地址;

65.例如:character (len=20) :: str="Hello,Fortran 95"

       call showstring (str)!送出字符串开头的地址;

       call showstring (str(8:))!送出字符串第8个字符的地址;

66.external是外部函数      intrinsic是Fortran的库存函数

67.Fortran 90的intent命令用来设置参数属性;

68.intent(inout) !可读又可写的属性,跟什么都没有是一样的

69.Fortran 90中,可以用optional命令来表示某些参数是‘可以省略’的——P191

70.递归调用函数格式   resursive integer  function  funt(n)  result(ans)

                       递归    返回类型            函数      返回值


!------------------------------------------------------------------

71.Pure并行计算作用   ——P202

72.学习网址:

       http://choose.fcode.cn/!个人电脑与喜好来选择编译器

       http://pan.fcode.cn/!资料盘

       http://v.fcode.cn/!视频

73.Module  封装程序模块

74.在module声明中指定要save的变量,功能上也等于全局变量;

75.Visual Fortran中所提供一些扩充函数库就用这个方法来归类,像数值函数库        IMSL就放在modual IMSL中,3D绘图程序库openGL的函数就放在modual OpenGL        中,使用它们均首先要 use IMSL和 use OpenGL下;

76.封装在同一个module中的函数会自动互相认识;

77.*.LIB的文件内容经过编译,无法从这个文件中读到初始程序代码;

78.第222页的程序模块要敲下代码试试;

79.open (unit=10,file='Hello.txt')!10是文件的指定代码,充当文件的别名作用;    'Hello.txt'是文件名称

  write (10,*) "Hello"!Hello被写入10代码的文件'Hello.txt'中

80.上面的unit的赋值最好避开1-2-5-6四个值;


!------------------------------------------------------------------

81.Rewind(10) !10是文件代码标号,rewind作用是将文件读写位置移动到最前面

  或者最开始的地方;

82.inquire  文件查询              backspace  文件读写位置返回

  endfile  读写位置变成文件结尾  rewind     返回开头

  close    文件关闭              Trim       删除文件后面的多余空格

83.read (fileid,"(A200)",iostat=error)  buffer   !这行

   代码是啥意思呢?

84.read(string,*) a !从字符串string中读出一个数字

85.namelist  /n1_name/var1,var2,...!这个namelist是什么东

   西?

86.指针作用:1)取出指针中所保存的内存位置;2)到这个内存中读写数据;

87.指针pointer一般与目标target配合使用,尤其是在type自定义类型中;

88.integer,pointer :: P

  allocate (P)            !分配内存给P

89.Fortran提供Associated函数,用来检查指针是否已经设置指向;

90.interger,pointer :: P=>null()!把指针初值指向一个不能使用的内存地址,

  相当于给指针赋予初值,是有一定好处的;


!------------------------------------------------------------------

91.type (datalink),pointer :: next   !可以这么写

  type (datalink)         :: next   !不可以这么写

92.use A,aa=>Va   !把module A中的变量Va改名为aa使用

93.use A, only : Vc!只使用module A中的变量Vc

94.interface show!虚拟函数show

       module procedure show_int

       module procedure show_character

  end interface

  则有,

       call show_int(1)  等价于  call show(1)

       call show_character("Fortran 95")  等价于  call show("Fortran 95")

!------------------------------------------------------------------

            何成文                        

桂林电子科技大学
2016年8月2日 12:10


附件:

Fortran 95程序设计_何成文笔记.txt





https://wap.sciencenet.cn/blog-2777453-994061.html

上一篇:0011:Bernese5.2软件安装与测试详细过程
下一篇:0013:GPST转UTC程序源代码

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2022-1-19 14:47

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部