




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1.行的书写(行的长度、分行、续行) 一行可以是0132个字符,空格有意义, 语句最长不超过2640个字符 一行可以有多个语句,用“;”分隔 一个语句可分行写,读行标记为&(放在尾部),但如为关键字,首尾均加&。 最多可有511个续行。2.说明语句必须出现在可执行语句之前,格式说明语句(FORMAT语句)除外。3.注释标志符: 自由格式:! 固定格式:C *语句分隔符:分号;(仅自由格式可以使用)续行符: 自由格式:&申明标号: 1到5位无符号整数空格:关键字、变量、常量内部不能用空格,但相邻两者之间须用空格4.信息处理的分类:数值处理和信息处理现代计算机工作原理:程序
2、存储和程序控制 (冯·诺依曼) 1、运算器算术运算、逻辑运算2、控制器根据指令控制计算机工作运算器、控制器和寄存器称为中央处理器CPU3、I/O设备提供数据传输服务4、总线数据传输的公共通道1.机器语言:二进制代码形式,可以被计算机直接执行,不可移植2.汇编语言:用助记符来代替机器指令,容易记忆,不可移植3.高级语言:接近自然语言(英语)的程序设计语言,又称算法语言,易学、易用、易维护,可移植性好例:FORTRAN、BASIC、PASCAL、C、LISP、PROLOG等5.FORTRAN90程序是一种分块结构,由若干个程序单元块组成:主程序、外部子程序、模块、块数据单元 无论是主程序
3、单元,还是子程序单元,都是独立的程序单位,应该独立编写,它们的形式相似。非语句行:注释语句:!后的所有字符都被编译器忽略。 可独占一行,也可在其它语句之后,空行为注释行(固定格式用C和*)6.常量的定义:常量是程序执行过程中不能变化的量。基本数据类型有五种: 整型、实型、复型、字符型和逻辑型前三种属于数值类型,后两种为非数值类型,主要用于文字处理和控制。FORTRAN 90通过KIND值确定整数的存储开销、最大位数和取值范围,如表所示。缺省KIND值则取默认值4。KIND值 字节数 二进位数 取值范围1 1 8 -1281272 2 16 -32768327674 4 32 -21474836
4、482147483647格式:SELECTEND_INT_KIND(N) :功能:返回范围在-10N10N的整数的kind-Value在FORTRAN90中,也可以表示二进制、八进制、十六进制形式的无符号整数。其形式如下:二进制数:B101101 或 B”101101”八进制数:O76210 十六进制数:Z1FA2实型常量指数形式数字部分:小数形式实数或整数指数部分:只能为整数 错例:4E5.6数字部分不能丢;例:10-4: E-4(错) 1E-4(正确)以标准化形式(规格化指数)输出(<1或>=1,此处分为两类) 1。数字部分的值小于1,且小数点后的第一位数字非0 例:0.743
5、643E-12 (正确) 21.835E-12 (错) 2。数字部分有且仅有一位非零的整数。 例:7.43643E-12 (正确) 0.21835E-12 (错)一般实数范围:-1038+1038,有效位78位也有的系统允许数的范围更大,可以超过10100。 上溢:overflow 下溢:当0处理为了能得到理想的范围和有效数字,要求说明种别类型参数值。(书上有误)例:INTEGER,PARAMETER:long=SELECTED_REAL_KIND(8,88)则符号常数long提供了至少8位精度,以及-1088+1088的值的范围。 以此说明的实型常量:1、PRECISION(4.37_lon
6、g) 精度至少为82、RANGE(4.37_long) 范围至少88次冪常用实数一般分为两种: real(4)单精度(默认) real(8)双精度实数种别为8时常量的表示(双精度数) 有效位:15位; 数字部分D±指数 例:1.2D2字符常量长度:字符串内字符的个数空格算一个,起止界不算,长度可为0。(空串或"" )用于标识一个程序成分,例如符号常量、变量、派生类型等。对于名字有下列要求: 1.名字的长度不能超过31个字符 2.名字的组成成分可以是字母、数字和下划线 3.名字的第一个字符必须是字母 4.在名字中不能出现空格 提倡使用具有一定含义的名字,提高程序的清
7、晰度和可读性。变量字母、数字、下划线组成字母开头长度1-31个Fortran90关于变量说明的新功能:1.在变量说明的同时,可以给变量赋初值。 INTEGER:I=5,J=126 REAL:X=7.2,Z,W=774.2 2.在说明变量的同时也可说明其种别 REAL(KIND=4):X,Y 或 REAL(4):X,Y 3.在说明变量的同时,还可说明变量的属性INTEGER,PARAMETER:I=5,J=123REAL,DIMENSION(1:10):A程序单元概念 程序单元是FORTRAN语言的基本成分。程序单元可以是主程序、子程序、模块或块数据程序单元。子程序可以是函数子程序或子例行子程序
8、。模块包含的说明是对其它的程序单元形成可访问性。块数据单元用来对有名公用区中的数据对象赋初值。(F90中不提倡使用) 主程序是不包含SUBROUTINE、FUNCTION、MODULE或BLOCK DATA语句作为其第一条语句的程序单元。主程序其他限制 主程序的可执行部分不能包含有RETURN语句或者ENTRY语句。 程序名对可执行程序是全局的,而且不得于该可执行程序中的任何其它程序单元名、外部过程名或公用块名相同,也不得于主程序内的任何局部名相同。 在主程序的作用范围内的说明不得包含OPTIONAL语句、INTENT语句、PUBLIC语句或它们的等价属性,在主程序内SAVE语句不起作用。 主
9、程序内的任何内部过程的定义必须跟在CONTAINS语句之后。 子程序是可以完成某一独立算法或功能的程序单元,但它功能的具体体现要通过主程序(或子程序)的调用来实现。 按子程序与主程序的位置关系分为内部过程和外部过程。 内部过程可以出现在主程序、外部过程或模块内。 模块也是一种在程序单元之外独立编写的程序单元。它有独特的形式,即模块程序单元内没有可执行语句,除了说明语句外,最多包含内部过程。模块的主要作用是供其它程序单元引用。 程序单元引用模块,实际是将模块内的全部语句复制到本程序单元。因此模块起共享及复制的作用。 块数据程序单元对有名公用块内的数据对象提供初值。 支持程序的最基本的语句主要有四
10、种:类型说明语句、赋值语句、输入语句、输出语句。 整型数据运算速度快,在机内存储没有误差,但能表达的值的范围较小;实型数据能表示小数、分数及不同的精度,表达的值的范围大,但数的外部表示和机器存储会有误差。 例,10.2,在机内表示可能为10.999998。使用实数时,尽量避免作相等或不相等的比较例:A是实型变量,对其与10.2作相等与否比较,不能写成 :IF(A=10.2) PRINT *,A应改写为:IF(ABS(A-10.2)<1.0E-6)PRINT*,A 有关种别的函数 KIND(X) SELECTED_INT_KIND(N) SELECTED_REAL_KIND(N,M) 测试
11、标准种别: KIND(0) 4(整型) KIND(0.0) 4(实型) KIND(.FALSE.) 4(逻辑类型) KIND(A) 1(字符类型) 各种基本类型种别可取值 INTEGER:1,2,4(默认) REAL:4(单精度,默认),8(双精度) LOGICAL:1,2,4(默认) COMPLEX:4(单精度,默认),8(双精度) CHARACTER:1 PARAMETER 属性 (1)功能:用一个符号代表一个常量,称为符号常量(常数) (2)写法:Real,Parameter :G=9.8 &&说明类型时赋值 (3)位置:位于可执行语句之前 使用规则 程序中不得改变其值
12、与普通常量的区别:不作语句标号和FORMAT中重复系数 类型:一般采用I-N规则,否则,需先定义其类型 例:parameter(n=5) * /+-(正,负,加,减)3.5+2*A/B+V*2 FORTRAN 90配置的函数称为内在函数。内在函数分为三种: 基本函数 转换函数 查询函数 三角函数单位为弧度sinD cosD TAND 可以为度(F90) (2)某些函数参数只能为实型如:log(2.0) (loG(2)错) (4)自变量可以是有值的常量、变量、表达式 例: ABS(B*2+SIN(A+B) INT(X,KIND):将X值转换为整型,以KIND的值作为种别参数 REAL(X,KIN
13、D):将X值转换为实型,以KIND的值作为种别参数 CMPLX(X,Y,KIND):将X,Y转换为复型,以KIND的值作为种别参数 对于连续的乘方运算,采用先右后左的方式 例:3*2*3,先计算2*3=8,再进行3*8=6561 运算对象类型相同时,运算结果的类型为同一类型注意有效位数的限制引起的误差注意:5/2=2 1/2=0 ! 计算机存储数据的有效位数是有限的 一般为十进制数的6至7位 例:1.0/3.0的结果在内存中不是0.3333333333333,而是0.3333333 注意溢出 计算结果超出了存储单元所允许的数的范围 程序中的表达式,要避免两个很大的数相乘、或一个很大的数除以一个
14、很小的数赋值号左边只能是变量名(或数组元素名、数组名),不能是表达式类型要求¡ 逻辑型、字符型的赋值语句要求“=”两边类型相同¡ 数值型赋值,不区别整型、实型和复型,允许两边的数值类型不同 执行赋值语句后,把e的值转化为V的类型后再赋值给V V是整型、e是实型,把尾数丢掉化为整型后赋值4、种别方面¡ 字符型要求种别相同¡ 其余类型的e、V种别允许不同 执行赋值语句后,e的值的种别转化为V的种别后再赋值READ中的输入表的内容可以是:变量名,数组名,数组片段名,结构成员名,隐循环表(隐DO表),不能是表达式变量名,数组名,数组片段名,结构成员名,隐循环表(
15、隐DO表),常数,函数和表达式。输入的数据必须是常数,不能是变量和表达式如输入2+1,则出错。出错信息:run-time error F6601:Read(con)-Invalid Integer 含义: 输入了无效的整数4.输入数据个数: 1)不得少于变量的个数; 2)可分行输入; 3)多余的数据不起作用空格可以多个,/表示输入数据结束,后面的数据被取消,没有输入数据的变量值为原值;Read*,A,B,C 输入: 2,1/3 结果: A=2 B=1 C=0 6、如果几个连续变量需要赋同一个值,可以使用重复因子r,即r*c: r为重复数 4*0.5,2*3,2*AB,3*(1.0,-1.0)表
16、控输出的格式类型:复型: 带( )输出 逻辑型:T,F 输出一个字符 字符型:丢失,采用左对齐输出一行显示不下,数据自动换行输出多个PRINT语句:每个开始输出一个新的记录 riw输出 1数字在指定的区域内右端对齐,不足w则左边补空格。 2负数的符号也包含在字段宽度内 3如果应输出的列数超过了规定的字段宽度,则不输出有效数据,以w个*填充。 Riw输入5435430 2102102345623451)实数的输入(三种方式) READ(*,(F4.1,2F10.6))A,B,C输入:124567-83527则a=1.2;b=45.67;c=-8.3527 !不带小数点输入不带小数点,由则编辑符指
17、定位置自动加上小数点。按w截取数据,由d决定小数点的位置,按右对齐,空格当0READ(*,(F4.1,2F10.6))A,B,C1.245.67-8.3527 !带小数点。输入的数据本身带小数点,如果编辑符中规定的小数点位置和数据本身的小数点位置有矛盾,按“自带小数点优先”原则,d不起作用,小数点记入w中(3)READ(*,(F4.1,2F10.6))A,B,C1.2,45.67,-8.3527(表控格式) 用自由格式,逗号分隔,但每个数连同后随逗号必须<=w,否则出错。d可以为零 但不能省略X=25.6Y=-378.456Z=873.2PRINT (F5.1,2F8.2) , X,Y,
18、Z25.6-378.46873.20 w包括数符和小数点两位若数据小于w位,则左边补空格输出值时舍入,而不是截断如果是科学计数法则转换小数形式REAL*4:G,H,E,RG=12345.678;H=12345678.;E=-4.56E+1;R=-365.WRITE(*,'(F8.2)') G,H,E,RWRITE(*,'(4F10.1)') G,H,E,REND结果:12345.68 !舍入,取2位小数*!所给描述符整数位不够-45.60 !输出时转换为定点数形式-365.00 !输出时小数点占宽度123456.712345678.0-45.6-36
19、5.0说明:优点,输入时准备数据方便,和数学中实数的写法相同,输出时,数据便于阅读。 缺点,必须预先知道输出数据的范围。另容易产生“大数印错”、“小数印丢”。大数印错”、“小数印丢”X=123567890.876543Y=0.000001245WRITE(*, (1X,F15.6,F15.2) X,Y输出结果:* 0.0015列15列 X YE编辑符Ew.dEe格式:数符+0+小数点+小数部分+E+符号+指数部分2位 3 d 4指数部分宽度固定4列,w>=d+3+4优点:不必事先估计数的大小,能容纳任意大小的数据。Ew.dEe e指定指数的宽度例:用E格式输出数据 X=-84.31 Y=
20、3.141592 Z=0.0187WRITE(*, (E10.3,E13.6,E15.6) )X,Y,Z结果-0.843E+020.314159E+010.187000E-01规则:1w>d+7 数据右对齐,左边用空格填满w位 若w<d+7 则显示w个*,出错。2尾数部分正号省,负号则打印,记入w内3尾数位数>d 四舍五入取d位 尾数位数<d 其后用0补齐注意:一般格式E16.7 7+7+2(2个空格,以便阅读)改写该格式为: X=-84.31 Y=3.141592 Z=0.0187 WRITE(*,200)X,Y,Z 200FORMAT(E10.3,E13.6,E15
21、.6)或 CHARACTER(30):MYLIST 字符型的赋值 MYLIST=( E10.3,E13.6,E15.6 ) WRITE(*,MYLIST)X,Y,ZG编辑符功能:根据输出实数大小决定用F或E格式输出。较大或较小,自动按E格式Gw.d条件:1.abs(A)<0.1 2.abs(A)>10d 使用E格式输入输出条件:10d>abs(A)>=0.1 使用F格式输入输出A=758321.6 G14.7ABS(A)<107 用F格式758321.6A=75.83216E+06ABS(A)>107 用E格式 0.7583216E+08注意:采用F格式,d
22、为全部数字的位数 优先满足整数位双精度数的输入输出格式:Dw.d数符+0+小数点+小数部分+D+符号+指数部分2位 3 d 4方法同E格式复型数据是用两个实型编辑符(例如,用2Fw.d或(Fw.d,Fw.d)或2Ew.dEe来分别描述该复型的实数部分与虚数部分的。如:COMPLEX:X X=(2.8,4.6) PRINT '(2F4.1)',X输出结果为: 2.8 4.6 复型的输出没有括号复型编辑rLw功能:逻辑值的输入输出规则: 输出一个字母,在字段最右段,前面补空格 输入时按宽度读取,以第一个字母作为逻辑值A用来编辑字符型变量,它不关心该字符串的长短如何。例: CHARA
23、TER*5 A,B,C READ(*,(A,A,A))A,B,CWRITE(*,(A,2X,A,2X,A))A,B,CEND输入:ABCDBASICFORMAT对于字符型数据的输入: 1、 在表控格式输入的时候,输入的字符串可以加上撇号,也可省略,撇号不起作用 2、 在有格式输入的时候,输入的字符串的时候不需要加上撇号,如果输入带撇号,则撇号算入W宽度, H编辑符: 描述字符串nH<字符串>注意:1. N 必定等于字符串长度,否则编译出错 2. 字符串中空格有意义X=45.7Y=289.7WRITE(*,100)X,Y100 FORMAT(2HX=,F5.1,4HY=,F6.2)E
24、ND 结果:X=45.7Y=289.70也可FORMAT( X=,F5.1,Y=,F6.2)斜杠编辑描述符作用:结束本记录的输出并开始下一个记录的输出WRITE(*,(5HABCDE,/,5HBCDEF,/,1X,5HCDEFG))结果如下所示: ABCDE BCDEF CDEFG注意:1.如两个连续斜杠,在输完前面记录后,空一行(或者用print*代替)再输出 2.如在编辑符的最后出现一个斜杠在输出完记录后,再输出一个空行 相同的编辑符串连续出现时,可简化为一串,用括号括起,前置重复系数。例:PRINT (1X,F6.1,2I4,F6.1,2I4,E10.3),A,B,C,D,E,
25、F,G可写为:PRINT (1X,2(F6.1,2I4),E10.3),A,B,C,D,E,F,G编辑符个数和变量个数应相等,如编辑符个数多余变量个数,则多余编辑符不起作用;如编辑符个数少于变量个数,则重复使用格式说明,每重复一次产生一个新纪录。例:PRINT (1X, I4,F5.1,E10.3),A,B,C,D,E,F,G,H则按如下顺序打印各项数据: A B C D E F G H例: WRITE(*,100)I100 FORMAT( I=)输出I=,永不停止,原因是漏写了I4编辑符带控制信息的输出语句(P51) WRITE(UNIT=6,FMT=(1X,2F8.2),IOS4TAT=M
26、这里就是一个指代没有特别的意义)X,Y各部分与输入语句中基本相同。输入输出语句l 表控格式l 自定格式(编辑符的使用:I、F、E、G、A、L、X、H等)l 带控制信息表每个关系表达式中的关系运算符只准出现1次,运算符两侧都是表达式; 错例:2<X<3( 2.LT.X.LT.3) 或 (a>b)<c2、运算对象:关系运算符两边的运算对象类型应相容:错例:A= =.TRUE. 2<Aq 复型:只能进行 = =、/=。不能比较大小q 字符型:可以进行各种关系运算q 实型量= =或/=要小心使用一般要改写:A=B 改写为ABS(A-B)<1E-6 A/=B 改写为A
27、BS(A-B)>=1E-6q .NOT. a:求反运算,q a.AND.b:a与b同时为真,表达式值才为真q a.OR.b: a与b有一个为真,表达式值就为真q a.EQV.b: a与b值相等,表达式值为真q a.NEQV.b: a与b值不相等,表达式值为真q .NOT.、.AND.、.OR.、 .EQV.、.NEQV. 高 低 q 两个逻辑运算符不能直接相邻,但 .NOT. 除外 :.AND. .NOT.B混合表达式中运算符优先顺序:(1)圆括号;(2)算术运算符;(3)关系运算符;(4)逻辑运算符。括号( ) 1算术运算 * 2*, / 3+, - 4关系运算 >,>=,
28、<,<=,=,/= 5逻辑运算.NOT. 6.AND. 7.OR. 8 .EQV.,.NEQV. 9注意顺序(优先级)1、表控格式I/O须先定义数据类型,再I/O例:LOGICAL: L1,L2READ (*,*)L1,L2WRITE(*,*) L1,L2输入时:.TRUE., .FALSE.或:T,F表控格式并不需要输出: T F!仅输出一个字符,T 或 F,左右没有点“.”,字段宽度由具体的计算机系统规定格式I/O例:LOGICAL:L1,L2READ (2L2),L1,L2PRINT (1X,L4,2X,L4),L1,L2运行时输入: TF 输出: TFL2表示逻辑I/O,字
29、段宽度为2右边通常为一条且只一条可执行语句。 错例:IF (A<B) T=A;A=B;B=T2.不能为以下语句:END、另一个逻辑IF、 块IF、ELSIF、ENDIF、DO错例:IF(X<2)END3.常应用于简单的条件赋值或条件转移(在循环结构中)4、不论条件真假都执行IF的下一个语句n 假设IF结构名为FIRST,则入口语句为: FIRST:IF (e1) THENn 出口语句为: END IF FIRST注意:n 入口、出口写结构名时,其结构名应该一致。n IF结构名与入口语句间要用冒号分隔,出口语句(ENDIF语句)与结构名之间要空1格,不能有冒号。n ELSEIF语句与
30、ELSE语句后可以写结构名,也可以不写,如果写,其结构名一定要与入口语句处的结构名一致。n SELECT CASE(情况表达式)情况表达式:q 整型变量、逻辑变量、字符型变量或相应的表达式q 不能是实型或复型表达式n 表达式列表(情况选择器):q 只能是常量,不能为变量,可有多条语句;q 类型与情况表达式类型应一致,尤其字符型时种别参数必须一致,但长度可以不同;q ,(逗号)分隔符表示分隔单个值的列表。 例: case(3,5,7)值不能重复q :(冒号)分隔符表示值的范围,连续的值 u 例: case(5:10); case(i:n)u 下界、上界可省略q Case default:最多出现
31、一次循环均由Do结构表示,其Do结构共有三种形式: 1不带循环变量的DO结构 2带循环变量的DO结构 3Do WHILE循环结构DO循环变量在循环体内不能赋以新值,但可以引用。即循环变量在循环体中不能出现在赋值号的左边。例: DO I=3,6 I=I+1 !错误 J=I+1;PRINT*,I ENDDO 循环变量在循环体内不能被重新赋值,但在循环体外可以被重新赋值。两个并列的DO循环可以使用相同的循环变量DO I=1,10,2ENDDO I=20DO I=1,5ENDDO循环可以不经ENDDO终止,但是不能从循环体外转入循环体内(GOTO)。例,以下结构是非法的:DO I=1,N10:A=A+
32、1ENDDOGOTO 10循环正常退出时,v的值超过循环变量的终值;循环非正常退出时,v保持当前值。输入M、N,求最大公约数分析:辗转相除法(欧几里德算法)PROGRAM GCDIMPLICIT NONEINTEGER:M,N,RPRINT*,'INPUT M,N:'READ*,M,NR=MOD(M,N)DO WHILE (R/=0)M=NN=RR=MOD(M,N)ENDDOPRINT*,'THE GCD IS',NEND最小公倍数=M*N/最大公约数循环嵌套中各层的循环控制变量不能同名;3、执行到EXIT语句,没有指明结构名时,转到当前循环体外;若指定了结构名
33、,则转出该结构名代表的循环体外;4、可以从循环体内转到循环体外,但不允许从DO结构外转到DO结构内!隐DO、显DO执行过程的区别输出一行注意:分母不能为零!1、一个Fortran90程序主程序单元个数:1个2、子程序单元:0-n个子程序单元不能独立存在,只能被主程序单元或被其它子程序单元调用,甚至可以递归调用(调用本身)1、函数子程序 分为内部函数子程序 外部函数子程序用于完成复杂的计算返回 一个或多个值2、子例行子程序 分为内部子例行子程序 外部子例行子程序用于完成复杂计算,返回一个或多个值,或用于其它数据处理虚元表:子程序的所有输入,及除函数值之外的其他计算结果的输出。虚元之间用逗号分隔,
34、都要在说明语句中说明类型。如果没有虚元,函数名后是一对空括号。虚元的含义:编写子程序时没有具体值(调用时或调用结束后才获得数值),因此只是一个符号,表示输入、输出,名字可随便用户取。说明部分应对程序体内一切变量、数组等实体(包括虚元)作出说明,同时还要说明函数结果变量名,但不可说明函数名。2、执行部分中必须对函数结果名至少赋值一次。l 程序单位定义l 虚元表 子程序所有输入和除结果名以外的输出l 结果名 不能和函数名同名l 说明语句l 虚元表中的所有虚元、函数结果名;其它中间变量l 不能说明函数名l 执行语句l 完成子程序单位的所有功能l 至少有一次对结果名赋值l 程序单位结束语句l END
35、Functionl 注意:实元与虚元一般必须在个数、次序、类型上保持一致;但实元与虚元名字可以不同。当虚元在模块中时,括号内就可以省略。l 4、函数子程序的调用是表达式形式。l 而子例子程序必须通过CALL语句来调用。l CALL 子程序名(实元表)l 下例情形必须使用接口块l 1、实元是关键字变元l 2、实元是缺省的可选变元。l 3、一个外部函数使系统中的内在操作符扩展了原有的功能。 l 4、外部过程扩展了赋值号的使用范围。l 5、用一个类属名调用过程。l 6、调用的外部过程是一个函数,且函数结果是一个数组;或函数结果值是一个字符型,且长度不是常数,也不是假定长度(*);或被调用过程中的虚元
36、是一个假定形状数组、一个指针变量、一个目标变量。l 一般原则:实元与虚元个数相等,类型一致,按位置结合l 灵活原则关键字变元、可选择变元、虚元改名当部分实元用关键字调用子程序时,第一个关键字变元前面的所有实元都必须与相应的虚元一一对应,一旦使用一个关键字,其后面的变元也必须使用关键字变元。可选择变元调用时可根据实际需要,只对虚元表中部分虚元作虚实结合(即虚元可无对应的实元)。虚元必须在过程中被说明成是可选择的。即要求它具有OPTIONAL属性。OPTIONAL属性:若一个虚元的类型说明语句中有该属性,便是可选的,没有该属性的是必选变元。PRESENT(X)函数:用来检查虚元X是否在程序执行时结
37、合到对应实元,有对应实元则返回为“真”。虚过程:虚元是一个过程名,对应的实元可以是内在函数或外部过程。、如果实元为内在函数: 主调程序中用 INTRINSIC属性说明。(属性见课本P38)2、如果实元为外部过程:主调程序中用EXTERNAL属性或接口块说明,以便让编译系统清楚该实元不是一般变量。、虚实过程的结合规则是:等价虚过程的使用增加了程序的功能,使程序更灵活!各程序单位共享信息的途径:虚实结合 模块单位功能:提供共享常量、变量、类型定义和过程;即公用的信息可放入模块单位。模块(1)模块应先定义,(2)模块不给其它单位调用,而用USE语句引用(3)模块中无可执行语句可以对模块内说明的变量、
38、派生类型及其成员的使用范围进行限制。Ø 加PRIVATE(专用)属性,模块以外的程序单元不 能使用。Ø 加PUBLIC(公用)属性。Ø 外部过程:未包含在主程序单元(或过程、模块)中的过程。外部过程独立成为一个程序单元,与主程序单元分别编译。Ø 内部过程:写在主程序单元(或过程、模块)之内,作为主程序(或某一过程、某一模块)内包含的一个过程。Ø 内部过程与外部过程的区别:1)内部过程通常没有说明语句,使用的变量等实体的说明应统一放在包含它的程序单元的说明部分。Ø 2)内部过程一般没有虚元。主调程序调用时也不需要虚实结合。变量可以直接使
39、用。调用过程名也只要简单的写一个过程名。Ø 在一些特殊场合,内部过程也可保留自己单独说明的少量虚元。如果变量是在内部子程序中单独说明的,它只是局部变量。Ø 通过特定过程扩展普通运算符的功能,使其具有新的含义。具有新含义的运算符仍符合规定的运算优先等级。Ø program conectØ implicit noneØ interface operator(+)Ø function concat(str1,str2) result(concat_result)Ø character(len=200):concat_result&
40、#216; character(len=100),intent(in):str1,str2Ø end functionØ end interfaceØ character(len=100):ch1,ch2 character(len=200):yØ read *,ch1,ch2Ø y=ch1+ch2 !y=concat(ch1,ch2)Ø print *,yØ end programØ 由类型决定是内在运算还是超载运算Ø 如上述“+”运算符可以用于连接两个字符串,但仍可以做数值的加法运算。Ø 操
41、作数为数值,做加法运算Ø 操作数不为数值,操作含义要到Ø function concat 中找Ø 子程序的虚元一定要有INTENT属性Ø 阅读画虚实表时注意顺序(第一操作数为第一个实元,第二操作数为第二个实元)Ø 超载赋值是指把赋值的含义扩展到新的数据类型。Ø 按规定赋值号两边的类型必须相容。用超载赋值时,可以进行类型不同的数据间赋值。Ø 例:把.true. 赋给一个整型变量得值1;Ø 把.false.赋给一个整型变量得值0。Ø 实现赋值号超载的方法是:Ø 1、先编写一个不同类型变量之间一一对应
42、关系的子例子程序。Ø 子程序只有两个虚元,第一个虚元具有intent(out)属性,第二个虚元具有intent(in)属性Ø 2、再在主调程序中编写一个接口,接口语句的形式为:interface assignment(=)Ø 3、超载赋值的执行:调用子程序Ø 注意:子程序的虚元一定要有INTENT属性Ø 阅读画虚实表时注意顺序(左进行超载赋值运算时,必须编写成子例子程序形式;Ø 要实现超载运算符功能时,必须简单变量是用来存储一个数据,占据独立的存储单元,彼此之间没有直接联系; Ø 数组是用来存储一批类型相同的被称为元素的有序
43、数据,在内存中占据连续的存储单元。编成函数子程序形式。Ø 操作数为第一个实元,右操作数为第二个实元)Ø 通过下标引用数组元素Ø 下标表达式应是整型表达式,允许出现+ - * 等算数运算符。操作数可以是常数、变量,也可以是简单的内在函数或数组元素,但表达式的值一定是整数。Ø d1 <= 下标表达式的值 <= d2Ø 例:A(3*2),A(ABS(-3),A(5+I),A(A(I)Ø 6、数组元素的下标取值必须在相应的维界偶范围内Ø 数组构成器是左右两端用 “(/ ”和 “ /)”定界的同类型数据的集合。Ø
44、 数组构成器用于多维数组一般赋值,必须用RESHAPE函数改变形状后赋值Ø 例:INTEGER,DIMENSION(2,3):BØ B=RESHAPE(SOURCE=(/1,2,3,4,5,6/),SHAPE=(/2,3/)Ø 如使数据按行优先的原则存放,需要使用ORDER选项。Ø 例:INTEGER,DIMENSION(2,3):BØ B=RESHAPE(SOURCE=(/1,2,3,4,5,6/),SHAPE=(/2,3/),ORDER=(/2,1/)Ø 注意:“ORDER=”不能省略可调数组: 说明可调数组时,大小说明中出现了整
45、型变量。 REAL,DIMENSION(M,N):C使用范围:只在子程序中作虚数组使用。注意点:调用含可调数组的子程序时,须确定维界变量的值(虚实结合、模块单位)Ø SUBROUTINE SUB(C,M,N)Ø INTEGER:M,NØ REAL,DIMENSION(M : N):C Ø 说明假定形状数组时,不出现上下维界,只用一个冒号“:”表示或只写上或下维界。Ø REAL,DIMENSION(:):D1Ø INTEGER,DIMENSION(:,:):D2Ø REAL,DIMENSION(3:):D3Ø 使用范
46、围: 假定形状数组只能在子程序中作虚数组用。Ø 注意点:调用时,必须写接口块且调用时它从实数组获得形状参数,要求虚实维数一致(维界可不一致)。 Ø 动态数组:Ø 说明时大小用冒号,且有ALLOCATABLE属性。Ø 动态的含义:说明时不分配存储单元,运行时由语句分配对应大小的内存,且大小可按需要变化。 Ø 使用范围:主程序、各子程序(不能作为虚元)Ø 把n个整数中最大的数找出来,并指出它在队列中的位置。Ø 当数组大小未知,可用动态数组实现Ø IMPLICIT NONEØ INTEGER,DIMENSION
47、(:),allocatable:A !说明动态数组Ø INTEGER:MAX,K,I,nØ Read*,nØ Allocate(a(n) !分配存储空间Ø READ*,(A(I),I=1,N)Ø MAX=A(1);K=1Ø DO I=2,nØ IF(A(I)>MAX)THENØ MAX=A(I);K=IØ ENDIFØ ENDDOØ Print*,max,kØ Deallocate(a) !释放空间Ø endØ 假定大小数组:说明时最后一维的上界为*
48、号,其余所有 的特征(维数、维界)都必须指定。Ø 使用范围:假定大小数组只能在子程序中作虚数组用。Ø 注意点:使用数组时必须写下标,即不能对名字操作,只能对元素或片段操作;且调用时它从实数组获得大小参数Ø 例:Subroutine assume(A)Ø Real ,dimension (2,2,*):AØ 调用:Ø Real ,dimension(8):xØ Call assume(x)Ø 也可以对数组直接赋某个标量(标准类型常量)值。 Ø INTEGER,DIMENSION(4):AØ A=5
49、元素的值均为5Ø 含义:A的每个数组与标量运算Ø 数组表达式可以与标量作算术运算,其结果是数组。Ø 例如:Ø INTEGER,DIMENSION(4):A,BØ B=A-5 !表示A中各个元素的值均减去5Ø 即B=A-(/5,5,5,5/)Ø 求数组大小函数(SIZE)Ø size(数组名,DIM)Ø 功能:求数组元素的个数,函数值一定是正整数。Ø 可选项DIM:指明选中哪一维来求函数值,DIM=1表求每一列的大小,即数组的行数;DIM=2表求每一行的大小,即数组的列数。 Ø MAXV
50、AL(A,2)MAXVAL(A,DIM,MASK=逻辑表达式)求数组每行的最大值,函数值是数组Ø 可选项MASK:起屏蔽作用,为逻辑表达式Ø 求数组A各元素之和的函数(SUM)Ø SUM(A,DIM,MASK)Ø 例如:Ø SUM(A,MASK=A>0)Ø SUM(B,MASK=B>0, DIM=1)Ø 5、求数组各元素之连乘积的函数(PRODUCT)Ø PRODUCT(array,DIM,MASK) Ø 没有满足条件的元素时,结果为1, MASK=可省略Ø 6、DOT_PRODUC
51、T(A,B)一维数组A、B的点积和(补)Ø 例:Ø INTEGER,DIMENSION(2):A,BØ A=(/2,2/)Ø B=(/2,3/)Ø PRINT*,DOT_PRODUCT(A,B)Ø ENDØ MATMUL(A,B)矩阵A、B相乘Ø 8、SHAPE(A)求数组A的形函数,值为数组。Ø 例:Ø INTEGER,DIMENSION(2:4,-1:3):AØ INTEGER,DIMENSION(2):BØ B=SHAPE(A)Ø PRINT*,B B=(/3
52、,5/)Ø 求数组维的上下界函数Ø LBOUND(ARRAY,DIM)Ø UBOUND(ARRAY,DIM)Ø 功能:缺省DIM时求出数组每维的上下界,否则求指定维的上下界。例:Ø 数组转置函数(TRANSPOSE)TRANSPOSE(MATRIX)要求数组MATRIX为2维数组Ø Where语句:Ø where(数组关系表达式)数组赋值语句Ø 要求所有数组形状一致,运算规则:对应位置上的元素进行操作Ø 例如:Where(A<0)B=0Ø 表示当A某一位置上的元素值小于0时,它对应位置上B的元素就置0,否则保持不变。Ø 相当于 DO I=1,SIZE(A)Ø IF(A(I)<0)B(I)=0Ø ENDDOØ 数组元素只能作为过程的实元,不能做虚元。数组元素作为实元时,与之相应的虚元可以是类型与之相容的变量,也可以是数组名。因此数组元素作为实元时,其虚元的有关规定与第6章的叙述相同Ø 虚数组可区分为:常数组、假定形状数组、可调数组和假定大小数组,不能是动态数组。Ø Dim=1 表示每一列的大小 dim=2 表示每一行的大小Ø
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 探索电的世界
- 江苏省扬州市翠岗达标名校2025年初三寒假网上测试生物试题含解析
- 辽宁省沈阳市东北育才双语校2025年中考冲刺(3)化学试题试卷含解析
- 山西省大学附属中学2024-2025学年高三下学期第一次统测历史试题含解析
- 柳州铁道职业技术学院《德语视听》2023-2024学年第二学期期末试卷
- 四川省广元市虎跳中学2025年高三下学期开学摸底(文理合卷)数学试题含解析
- 江西省上饶市民校考试联盟2025届高考数学试题模拟考最后一考试题含解析
- 吉林省长春市第103中学2025年初三二模冲刺生物试题(一)含解析
- 吉林省抚松五中、长白县实验中学2024-2025学年高三4月暑期摸底考试物理试题试卷含解析
- 四川省乐山市井研县2024-2025学年初三下学期中考考前质量检测试题三(5月模拟)物理试题含解析
- 建设工程施工合同GF-0201
- QC-T 1175-2022 电动汽车用高压接触器
- 吸收塔安装施工方案
- 辛弃疾词《青玉案·元夕》
- 2024年重庆市初中学业水平考试生物试卷试题真题(含答案详解)
- 整形外科诊疗规范
- 如果历史是一群喵
- 2024年四川省泸州市中考语文试卷真题(含答案)
- 2025届高三语文一轮复习学法指导专题讲座
- 2024年江苏省扬州市广陵区中考二模道德与法治试题
- 临床诊疗指南及规范自查报告
评论
0/150
提交评论