内容发布更新时间 : 2025/6/21 12:36:31星期一 下面是文章的全部内容请认真阅读。
《Fortran95 程序设计》学习笔记 by 柳柳
《FORTRAN 95程序设计》学习笔记
66RPG gg
★ 目录 ★
《FORTRAN 95程序设计》学习笔记 .......................................................................................... 1
基础知识(基础、字符串、FORMAT、隐式、TYPE) .......................................................... 1 流程与控制(if、select、do)..................................................................................................... 4 数组(声明、隐式循环、整体操作、可变数组) .................................................................... 5 函数与子程序(子程序、函数、全局变量) ............................................................................ 6 MODULE与面向对象(重载操作符、虚函数) ...................................................................... 9 文件相关(OPEN、WRITE、READ) .................................................................................... 10 指针(指向变量、数组、函数) ......................................................................................... 11 Visual Fortran 编译器(DLL,VB调用) .......................................................................... 12 数值算法与IMSL(数值算法插件) .................................................................................. 14 常用库函数(数学、数组、零碎、子程序) ..................................................................... 15
基础知识(基础、字符串、FORMAT、隐式、TYPE)
★ 【小玩意】二进制观察器:装在M.. Visual Studio\\DF98\\bin,有一个Bitviewer,可以观
察变量储存方式
★ 【语法】续行:行结尾或行开头使用 & 符号;注释:使用 ! 符号 ★ 【语法】数学表达式:+ ;- ;* ;/ ;( ;) ;**乘幂 ★ 【语法】程序结束:STOP (Ruby的exit)
★ 【语法】输出:write(*,*),完整写法:write(unit=*,fmt=*)
? 建议:少用print,尽量用write ★ 【语法】声明
? 整型:integer(kind=4) a ;其中kind是使用的bytes数,4 or 2
? 其他写法:integer*4 a; integer(4) a
? 浮点:real(kind=4) a ;有效数位6位(12345678存为1.234567E7),如果是kind8
则为15位有效数字
? 此外:1E10:单精10^10,1D10:双精10^10 ? 复数:complex :: a=(2,3)
第 1 页 共 16 页
《Fortran95 程序设计》学习笔记 by 柳柳
? 实部:real(a) ;虚部:imag(a) ? 布尔型:Logical,.true. 和 .false. ★ 【语法与函数】字符串:character(20) string
? 注意理解,fortran的弱智字符串就是一个长度不能变的一维的东西,极其猥琐,和
Java、Ruby不能相提并论的
? string(13:13) = “a” :对第13个字节的读、存 ? string(2:3) = “go”
? string(6) = “我的妈呀”:从第6个位置开始设置为“我的妈呀” ? a = string_a // string_b:用“//”连接两个字符串
? 【常用函数】char(num),ichar(char):ASCII码的转换相关功能
? 【常用函数】len(string),len_trim(string):长度,去掉尾部空格后的长度 ? 【常用函数】index(string,key):找key在string首出现的位置 ? 【常用函数】trim(string):返回去掉尾部空格的字符串(用途不大) ? 【函数】repeat(char,int):返回一个重复int次的char串
? character(len=20) string 普通声明;character(len=*) string 接收的时候可自动长度 ★ 【规范格式】FORMAT格式化
? e.g.
? write (*,100) A
? 100 format(I4) ?这里是100号标识调用的格式
? 参数控制符(前面加数字为重复次数,如4I6或I6。(其中a为一个int))
? A5 :输入/出 5个字符 ?常用功能 ? I5[.4] :输5位整数,最少4位 ?常用功能 ? BN,BZ :定义空格为无东西或为0
? F5.4,D5.4 :5位浮点数,小数占4位 ?其中前面一个常用 ? E5.1[E2] :5位浮点,小数占1位,指数占2位 ? 4X :4个空格 ?常用功能
? 默认:I、J、K、L、M、N为整数,其余浮点(不好) ? 隐式声明:
? implicit none : 无隐式声明,最常用,但个人认为在自己有把握的情况下还
? 方法1:real,parameter :: pi=3.14 ? 方法2:
★ 【常用功能】类型转换 (real ?? integer)
? real (int_a) :返回int_a的浮点数 ? int(real_a) :返回real_a的整型 ★ 【语法】设初值:integer :: a=1
★ 【语法】等价声明:equivalence(array(1,1,5) , A)
? 两者使用同一块内存,如上,调用A就是调用array(1,1,5),但是调用A比较快 ★ 【语法】type,自定义数据类型,可组合integer,real,char等,类似一个只有公开变量
? type :: person ? character(20) :: name ? integer::age ? end type person ? 声明:type(person) :: a
? 使用:a%name,a.name (Ruby:一个全是attr_accessor的class)
★ 【用途不大的函数】kind的使用:select_ind_kind(n):返回记录n位整数所需的kind;
select_real_kind(n,e)n位有效,指数e位所需的kind
? if(逻辑) then ?注意,避免浮点数相等,浮点用abs(a-b)<误差的方法 ? 程序执行内容 ? else if(逻辑) then ? 程序执行内容? else
★ 【语法】逻辑标志:== .EQ. ;/= .NE. ;> .GT. ;>= .GE. ;<= .LE. ;.and. ;.or. ;.not. ★ 【语法】select case功能
★ 【语法】两个小东西:pause:暂停;stop:退出 ★ 【语法】二进制的逻辑运算 iand 和 ior
? 举例:a = 2(二进制10);b=4(二进制100);c=iand(a,b) 则c=6 ★ 【语法】循环结构
? do I=1,5,1 ?分别是开始,结束,step,亦可do while(条件) ? 执行内容 ? enddo
? cycle:执行下次循环 (Ruby:next) ? exit:循环中断 (Ruby:break) ★ 【署名的循环】
? outdo: do I=1,3 ? inner: do J=2,4
? 内容 ?署名后可以使用诸如if (..) exit outdo;if(..) cycle inner这种 ? end do inner ? end do outdo
★ 【语法】数组的声明:Datatype name(size) ?其中Datatype是类型也可是自定义的type
? 比如:integer a(10) 或 integer , dimension(10) :: a
? 初始化统一赋值:ingeter :: a(5) = 5 ;相当于a(1)=a(2)=..=a(5) = 5 ★ 【语法】数组整体操作:
? a = b;同位置的这是为相等数值。注意,不是地址连接,是赋值!
? a = b + c;a = b – c;a = b * c ;a = b / c;a = sin(b) :也是对位置整体的操作 ★ 【技巧】其他数组操作: