《FORTRAN学习中的一些小心得》由会员分享,可在线阅读,更多相关《FORTRAN学习中的一些小心得(10页珍藏版)》请在金锄头文库上搜索。
1、本文格式为Word版,下载可任意编辑FORTRAN学习中的一些小心得 FORTRAN 心得 第一片面:一些提防得 1 Fortran不区分大小写 2 Fortran有5种根本数据类型,integer,real, character, logical, complex 3 fortran fixed format格式中的变量赋初值一般用DATA,由于它不能用: 4 real(kind=8) a这种格式只使用于Fortran90,Fortran77中要使用real*8或real(8) 5 FORTRAN中FREE与FIXED两种格式do循环的识别: Fortran 95使用end do来终止循环。
2、 Fortran 77使用DO循环要麻烦一点,它不使用END DO来终止循环,而是使用行号来终止循环,程序代码要在DO的后面写领会这个循环到哪一行程序代码终止。 Fortran 77中,经常会使用CONTINUE这个命令来终止循环。由于CONTINUE这个命令没有实际的用途,刚好可以拿来做封装使用。 6 循环的流程操纵: 循环中的cycle命令相当于c+里的continue命令,用于终止一次循环 循环中的exit命令好比c里面的break,用于终止循环 7 不使用do循环,单纯用GOTO语句也能设计循环程序,但不推举使用GOTO语句 7 fortran有等价声明:即用equivalence(a
3、,b),这样使得a,b使用同一块内存,这样可以节省内存,有时可精简代码。 8 fortran77中只能用单引号。(还有疑问,由于fixed format能用双引号) 9 规律运算符 = /= = = !Fortran90用法 .EQ. .NE. .GT. GE. .LT. .LE. !Fortran77用法 9 PAUSE,CONTINUE,STOP pause 暂停程序执行,按enter可持续执行 continue 貌似没什么用处,可用作封装程序的标志 STOP 命令用来终止程序,要精心使用 10 数组元素之间要用逗号分隔,而不能像matlab一样既可以用逗号也可以用空格,fortran的数
4、组元素之间不能用空格。 11 数组的声明: Fortran 77中数组的声明,务必使用DIMENSION命令 Integer a; !先声明a是整型 Dimension a(10) !再声明a是大小为10的数组 Fortran 95中可以用简朴的方法: Integer a(10) !最简朴的方法 Integer,dimension(10): a !另一种方法 12 数组的赋值: Fortran 77中数组的声明,可以使用DATA命令 或隐含式循环来赋初值; Fortran 95中可以直接设置初值;如:integer :a(5)=(/1,2,3,4,5/);此时,括号和除号之间不能有空格; 13
5、 与C不同,Fortran数组索引值默认从1开头,而且可以在声明时变更该规矩,如 integer a(-3:1) !索引值为-3,-2,-1 ,0,1 13 数组在内存中的存放依次也与C不同(正好相反),如a(2,2)在内存中的存放依次为a(1,1),a(2,1),a(1,2),a(2,2); 原那么是放低维的元素,再放高维的元素,此规矩称为column major 矩阵输出时也是按列输出。 14 Fortran的特色:隐含式循环 15 a,b都为数组,那么可以这样用a=sin(b),(内部函数都可以这样用) 16 数组专用: where命令形式上类似于if,但只用于设置数组 where.el
6、sewhere.elsewhere.endwhere (没有then) FORALL是Fortran95添加的功能,只能用于数组操作 forall可以嵌套使用,还可以在forall中使用where,但where中不能使用forall 15 Fortran中传递参数的原理与c+不同,Fortran中是传址调用,就是传递时用参数和子程序采纳时用的参数使用一个地址,尽管命名可以不同。 16 调用自定义函数前需要做声明,调用子程序那么不需要。 17 Module中有函数时务必在contains命令之后 18 全局变量(有的书上叫无名公用区、著名公用区) 全局变量用来定义一块共享的内存空间; 全局变量不
7、能声明成常量 全局变量不能直接使用data命令赋初值,要在block data模块中使用data来设置初值。 COMMON语句是说明语句,因此它理应展现在相应程序单元中的全体可执行语句之前。 取用全局变量时,是根据它们的相对位置关系来作对应,而不是根据变量名称来对应。 19 传递参数与使用全局变量都可以在不同程序之间共享数据,那什么时候该使用参数,还有什么时候该使用全局变量呢? 简朴地说,当需要共享的变量不多,而且只有少数几个程序需要使用这些数据时,那就使用参数, 需要共享大笔数据,或是有好多不同程序都需要使用这些数据时,就使用全局变量。 20 INCLUDE命令 1 INCLUDE命令可以写
8、在任何地方,它只是单纯地用来插入一个文件的内容。 2 有时候也会应用在声明全局变量,先把声明全局变量的程序代码编写在某个文件中,需 要使用全局变量的函数再去INCLUDE这个文件,这样可以裁减程序代码。 其次片面:格式化输入输出 1 表控输入输出(即表控格式输入输出) 1 留神点:不同计算机系统对表控格式输出的规定不同,例如对一个整型数,有的系统规定输出占13列,有的系统规定输出占10列,也有的系统不规定固定的列数而按照数据的实际长度输出,再用一个空格作分隔符。 2 假设在输入数据行中展现”/”号,表示对READ语句的输入到此终止,未被赋值的变 量将不予赋值。 2 FORMAT 语句 语句格式
9、: 标号 FORMAT(格式描述符) 例如: write(*,100) i,j,k; 100 FORMAT(1X,I3,I5,I7),其中,1X是换行操纵符(走纸操纵),I3表示i变量的值输出占3列,I5表示j变量的值输出占5列 1 格式描述符 主要介绍:I、F、E、X、纵向走纸、(撇号)、r(重复系数)、/(斜杠)等 (1) X描述符 作用: 用于输出空格 一般形式: nX (2) I描述符 作用: 用于整型数据的输出 一般形式: Iw 或 Iw.n (3) F描述符 作用:用于实数的小数形式输出 一般形式: Fw.d (4) E描述符 作用:用于实数的指数形式输出 一般形式:Ew.d 其中
10、:E实数的指数形式输出; w字段宽度; d数字片面的小数位数。 数值片面1 (5) A描述符 作用:用于字符型数据的格式描述 一般形式: Aw或A ,其中w是字段宽度。 (6) 号描述符 作用:用于输出字符常量,即把撇号内的字符串原样照打 例如:write(*,100) i,j 100 format(1x,i=,i3, j=,i4) (7) H描述符 作用:它的作用与撇号描述符类似,也可以输出字符型常量 一般形式: nH 建议:建议最好不要使用H描述符,而是使用撇号描述符,制止错误 例如: I=123 WTRITE(*,100),I 100 FORMAT(1X,2HI=,I3); (8) 斜杠
11、描述符 反斜杠描述符和美元$描述符的作用一致,都是在输出一个记录行后取消回车符, 常用于输出字符串与输入数据显示于屏幕同一行的情形。 例如: write(*,( Read(*,*) My_age (9) 重复系数r 在format语句中,假设展现几个(或几组)一致的格式编辑符,那么可以利用重复系数而只写一个(或一组)编辑符。 r可重复使用的次数。 例: write(*,100) n1,n2,x,y1,y2,y3 100 format (1x, i10, i10, f8.3, f7.2, f7.2, f7.2) Format (1x, 2i10, f8.3, 3f7.2) 第三片面:函数操作 1
12、 语句函数 1 语句函数的定义 REAL(KIND=8) X, F F(X)=X*2+X+1 2 语句函数的调用 语句函数一旦被定义后,就可以在本程序单元中被调用。调用的形式和调用内容函数形同,即: 语句函数名(实参) 2 说明 语句函数定义语句是非执行语句,它理应放在全体可执行语句之前和全体的说明语句之后。 语句函数只能在本程序单元中被使用。 2 函数子程序 1 定义的一般形式: 类型说明符 FUNCTION 函数名(形参表) 函数主体 函数名=表达式; END 或者: FUNCTION 函数名(形参表) 函数主体 函数名=表达式; END 3 子例行程序 子例行程序定义的一般形式: SUB
13、ROUTINE 函数名(形参表) 。 end 子例行程序的调用: CALL 子程序名(实参) 4 函数子程序与子例行程序的识别 1 2 3 4 5 子例行程序的名称不用来返回函数的处理结果,因此是没有类型的。所以不能定义子例行程序的类型。 子例行程序务必以SUBROUTINE语句开头,以END语句终止。 能用函数子程序实现的功能,都能用子例行程序来实现,反之亦然。因此在程序设计时,要对概括问题选择哪种方式。 由于不能给子例行程序名赋值,所以在将函数子程序转换为子例行程序时,理应增加一个变量用来带回在函数子程序中由函数名带出的子例行程序处理结果。 子例行程序的调用需要特意的CALL语句。 5 数据块子程序(BLOCK DATA) 1 数据块子程序是非执行程序单元,因而在其中不能展现任何可执行语句,也不能被别的 程序调用