|||
《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
附件:
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-28 09:24
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社