第5章数组-西安交通大学教师个人主页-首页.ppt

上传人:ga****84 文档编号:492556 上传时间:2018-10-14 格式:PPT 页数:37 大小:134KB
下载 相关 举报
第5章数组-西安交通大学教师个人主页-首页.ppt_第1页
第1页 / 共37页
第5章数组-西安交通大学教师个人主页-首页.ppt_第2页
第2页 / 共37页
第5章数组-西安交通大学教师个人主页-首页.ppt_第3页
第3页 / 共37页
第5章数组-西安交通大学教师个人主页-首页.ppt_第4页
第4页 / 共37页
第5章数组-西安交通大学教师个人主页-首页.ppt_第5页
第5页 / 共37页
点击查看更多>>
资源描述

1、第五章 数 组,Fortran 90数组的特点:* 可以逐个元素对数组进行操作,也可以对数组整体、数组段直接进行操作;* Fortran 90提供了针对数组操作的构造块和函数;* Fortran 90提供了动态数组,以有效利用内存;* Fortran 90 数组具有隐式循环和数组赋值的功能。,数组声明实例 REAL,DIMENSION(15) :X !下界缺省值为1 REAL,DIMENSION(1:5,1:3) :Y REAL,DIMENSION(-4:0,1:3) :Z (1)维(rank) 代表下标个数。X为一维数组,Y和Z为二维数组。(2)界(bounds) X下界1、上界15,Y下界

2、1和1,上界5和3,Z下界-4和1、上界0和3。(3)度(extent) 维上的元素个数。X度为15,Y和Z度为5和3。(4)大小(size) 总的元素个数,或特定维上的元素个数。X、Y和Z的大小为15。(5)形状(shape) 由维和度决定。X的形状为(/15/),Y和Z形状为(/5,3/)。(6)一致的(conformable) 形状相同的数组是一致的或兼容的,一致的数组才能相互赋值,这里Y和Z 形状相同。,第一节 数组声明,数组声明的一般形式: TYPE,DIMENSION( dl:,dudl: du) :Arr TYPE : Arr( dl:, dudl: du) TYPE代表数据类型

3、,dl 和du 分别为维的下界和上界,Arr 为数组变量。下列都是合法的数组声明: REAL,DIMENSION(100) :R REAL,DIMENSION(1:10,1:10) :S REAL :T(10,10) REAL,DIMENSION(-10: -1) :X INTEGER,PARAMETER :1da=5 REAL,DIMENSION(0:1da-1) :Y REAL,DIMENSION(1+1da*1da,10) :Z表明:(1)上、下界可以任意规定;(2)缺省下界为1;(3)可省略 DIMENSION 属性,如 T ;(4)数组大小可以为0;(5) Fortran 77数组声

4、明分2步:先数组类型,再数组维数及大小。,例 5-1 一维数组的使用,从保存有学生学号、姓名和成绩三列数据的文件中读取全部数据,并在屏幕上显示 PROGRAM Main IMPLICIT NONE INTEGER,PARAMETER : MAX = 100 ! 最大行数 CHARACTER(20) NO(MAX),NAME(MAX) ! 学号、姓名 REAL MARK(MAX) ! 成绩 INTEGER IO,I,N ! N 代表实际行数 OPEN (1,FILE = DATA.TXT) READ(1,*,IOSTAT = IO) (NO(I),NAME(I),MARK(I),I=1,MAX)

5、 IF(IO0)THEN ! 遭遇文件尾 N=I-1 ELSE N=MAX END IF PRINT*,N WRITE(*,(2A,F4.1) (NO(I),NAME(I),MARK(I),I=1,N) CLOSE(1) END PROGRAM,例5-2 二维数组的使用,从保存有学生学号、姓名和成绩三列数据的文件中读取全部数据,并在屏幕上显示 PROGRAM Main IMPLICIT NONE INTEGER,PARAMETER : MAX = 100 !最大行数 CHARACTER(20) Stud(MAX,3) !学号、姓名、成绩,共3列 INTEGER IO,I,J,N OPEN (1

6、,FILE = DATA.TXT) READ(1,*,IOSTAT = IO) (Stud(I,J),J=1,3),I=1,MAX) IF(IOC其中,A、B 和 C 是3个形状完全相同的数组,不过 A 为逻辑型数组,B 和 C 为同类型的数值型数组。,3. 数组段操作Fortran 90除针对整个数组进行操作外,还能对数组段进行操作。数组段的下标三元组形式为: : :数组段起始于下标 bound1 ,终止于下标 bound2,步长为 stride。例如: A(:) !整个数组; A(m:n:k) !A(m)A(n),步长为k A(m:) !A(m)A(上界),步长1; A(:n) !A(下界

7、)A(n),步长1; A(:2) !A(下界)A(上界),步长2; A(m:m) !一个元素的数组段数组段的操作语法类似于隐式循环,如: A(3:5) =5 其中,将A(3)、A(4)、A(5)的值设置为5,其他值不变。,A(3:) =5其中,将A(3)以后所有元素的值设为5,其他值不变。 A(3:5) = (/3,4,5/) 其中,将A(3) 、A(4)、 A(5) 的值分别设为 3、4、5,其他值不变。 A(1:3) = B(4:6)其中,设置A(1) B(4)、 A(2) B(5)、 A(3) B(6)。 A(1:10) = A(10:1:-1)其中,A(1:10)翻转,即将A(1)设为

8、A(10),A(2)设为A(9),依次类推。 A(:) = B(:,2)其中,假设 A 和 B 分别声明为 INTEGER A(5)、 INTEGER B(5,2),这里将二维数组B第2列的 5 个元素的值赋给一维数组 A 的5个元素,注意必须保持元素个数的一致。,4. 数组输出数组元素、数组整体和数组段都可以表控输出(PRINT*),对33矩阵假设有下列输出语句: PRINT*,Array element =,a(3,2) PRINT*,Array section =,a(:,1) PRINT*,Sub array =,a(:2,:2) PRINT*,Whole Array =,a PRIN

9、T*,Array Transp“d =,TRANSPOSE(a)输出结果为: Array element = 6 Array section = 1 2 3 Sub array =1 2 4 5 Whole Array =1 2 3 4 5 6 7 8 9 Array Transosed =1 4 7 2 5 8 3 6 9,5. WHERE构造关于WHERE的说明:WHERE用来取出部分数组内容进行操作,WHERE的操作是按照逻辑判断,使用满足条件的部分数组元素。关于WHERE的实例:使用 WHERE 构造计算应上交的所得税,每年收入3万元以下,所得税为10%;收入为3万元到5万元之间,所得

10、税为12%;收入5万元以上,所得税为15%例5-3 WHERE 构造的使用 PROGRAM Main IMPLICIT NONE REAL : income(10)=(/25000,30000,50000,40000,& 35000,60000,27000,45000,20000,70000/) REAL : tax(10) = 0 INTEGER I CALL Proc_Where;PRINT*,tax CALL Proc_IF;PRINT*,tax CONTAINS,SUBROUTINE Proc_Where ! Where构造 WHERE(income30000.0) tax = inc

11、ome*0.1 ELSEWHERE(income50000.0) tax = income*0.12 ELSEWHERE tax = income*0.15 END WHERE END SUBROUTINE SUBROUTINE Proc_IF ! IF构造 DO I = 1,10 IF(income(I)30000.0)THEN tax(I)=income(I)*0.1 ELSE IF(income(I)50000) income = 50000此时,WHERE 构造转化为 WHERE语句,WHERE语句和 IF 语句在构造形式上是相同的,但省去了循环语句,结构精简。WHERE(logica

12、l-expr) 执行语句,WHERE 构造也可以被命名,例如: name:WHERE(income50000) income = 50000 END WHERE nameWHERE 构造也可以嵌套使用,例如: WHERE(income50000.0) WHERE(income0) A=1 IF(ANY(A = 0) A=-1 Dot = SUM(X*Y),作为例程参数使用的数组有固定形状、假定大小和假定形状数组3种形式,不管是哪一种形式的数组参数,其传递均采取引用方式传递。1. 固定形状数组固定形状数组,其维具有明确的上、下界,其形状规定采取如下形式: (dl: du,dl: du)其中:dl

13、 和 du 分别代表下、上界,若下界省略,其缺省值为1,维的上、下界取整数。说明: 假设至少有一维的界由非常量表达式表示,这样的数组称为大小可调数组,其实际大小待例程调用时方能确定。非常量表达式中的变量,要么是虚参,要么是公用区中的变量。实例:例5-6。,第四节 数组参数,例5-6 固定形状数组,数组可调大小 PROGRAM MAIN IMPLICIT NONE REAL,DIMENSION(3,2):A1=(/1.0,2.0,3.0,4.0,5.0,6.0/) PRINT*,THE_SUM(A1,3,2) CONTAINS FUNCTION THE_SUM(A,M,N) INTEGER M,

14、N,I,J REAL A(M,N),THE_SUM,SUMX ! A为可调大小数组 SUMX=0.0 DO J=1,N DO I=1,M SUMX=SUMX+A(I,J) END DO END DO THE_SUM=SUMX END FUNCTION END PROGRAM* 函数THE_SUM 中的虚参数组A为可调大小数组,运行时,可调大小数组A的大小由与虚参M和N对应的实参决定。,2. 假定形状数组假定形状数组,不明确规定维的上界,其形状规定形式为: (dl:,dl:)下界 dl 若省略,缺省值为1。例5-7 假定形状数组参数的使用 PROGRAM Main IMPLICIT NONE R

15、EAL,DIMENSION(3:5,2:3):A1=(/1.0,2.0,3.0,4.0,5.0,6.0/) PRINT*,THE_SUM(A1) CONTAINS FUNCTION THE_SUM(A) REAL A(-1:,:),THE_SUM,SUMX !A为假定形状数组 INTEGER I,J SUMX=0.0 DO J=1,UBOUND(A,2) DO I= -1,UBOUND(A,1) SUMX=SUMX+A(I,J) END DO END DO THE_SUM=SUMX END FUNCTION END PROGRAM,假定形状数组虚参采取和实参数组的形状相同,或者说,实参 数组将

16、形状传递给虚参数组,然后两者按列主方式逐个元素进 行对应,在例 5-7 中,实参数组和虚参数组的对应关系为:A1:A1(3,2), A1(4,2), A1(5,2), A1(3,3), A1(4,3), A1(5,3)A: A(-1,1), A(0,1), A(1,1), A(-1,2), A(0,2), A(1,2) 程序中采用 UBOUND 函数,直接获取对应后的虚参数组上界。 若外部例程采用假定形状数组参数,则须在调用程序中建立其接口块,例如: INTERFACE FUNCTION THE_SUM(A) REAL A(-1:,:) END FUNCTION END INTERFACE,3

17、. 假定大小数组假定大小:是指虚参数组和实参数组的大小相同。假定大小数组的形状规定为: (expli-shape-spec,dl:*) 其中:expli-shape-spec 代表固定形状规定,dl 指最后一维的下界,缺省值为1,*指最后一维的上界。具体见实例5-8:假定大小虚参数组的使用。 PROGRAM Main IMPLICIT NONE REAL,DIMENSION(3,2) :A1=(/1.0,2.0,3.0,4.0,5.0,6.0/) INTEGER :ROW=3,COL=2!使用代表行、列数的参数,来对数组中的各元素进行循环 PRINT*,THE_SUM(A1,ROW,COL)

18、CONTAINS FUNCTION THE_SUM(A,M,N) INTEGER I,J,M,N REAL A(M,*),THE_SUM,SUMX !A为假定大小数组 SUMX=0.0 DO J=1,N DO I=1,M SUMX=SUMX+A(I,J) END DO END DO THE_SUM=SUMX END FUNCTION END PROGRAM,动态数组:有时数组的实际大小事先无法确定,为适应可能的情况,通常声明一个超大的数组,这无疑会浪费内存空间。因此定义动态数组,程序执行时,决定数组的实际大小和为数组动态分配内存空间,当不需要时,将动态分配给数组的内存释放掉,从而高效地利用资源。 Fortran 90 支持动态数组,Fortran 77不支持动态数组。动态数组的使用一般要经历3个步骤:(1) 声明动态数组,规定数组的维数,但不给出维的大小和上、下界。 如:REAL,DIMENSION(:),ALLOCATABLE :X。(2) 给动态数组分配内存。如:ALLOCATE( X(N) )。(3) 将分配的内存释放掉。如:DEALLOCATE( X )。实例:动态数组的使用,例5-9,5-10,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。