fortran经典课件-chp5数组

上传人:小** 文档编号:47837194 上传时间:2018-07-05 格式:PDF 页数:83 大小:890.87KB
返回 下载 相关 举报
fortran经典课件-chp5数组_第1页
第1页 / 共83页
fortran经典课件-chp5数组_第2页
第2页 / 共83页
fortran经典课件-chp5数组_第3页
第3页 / 共83页
fortran经典课件-chp5数组_第4页
第4页 / 共83页
fortran经典课件-chp5数组_第5页
第5页 / 共83页
点击查看更多>>
资源描述

《fortran经典课件-chp5数组》由会员分享,可在线阅读,更多相关《fortran经典课件-chp5数组(83页珍藏版)》请在金锄头文库上搜索。

1、2007-9-211第五章 数组(ARRAY)第五章第五章 数组(数组(ARRAYARRAY)2007-9-212第五章 数组(ARRAY) 基本使用 数组内容的设置 数组的保存规则 数组的运算 可变大小的数组 数组的应用2007-9-2135.1 基本使用 数据是由Fortran提供的一种数据结构,每个 数组代表一组具有同一类型的变量 数组中所包含的变量称为“带下标的变量”或数组元 素 一维数组的声明 常数包括直接填入 数字或者使用声明 为PARAMETER的 常数2007-9-214只有常数才能被 拿来赋值数组的 大小根据座号读取每位 同学的成绩到数组 student中根据号码来 查询成绩

2、2007-9-215 使用数组时超出范围是很危险的,绝对 要避免发生这种情况 在编译过程中,通常不会检查数组使用 是否超过范围,这个责任都是由程序员自 行负担。 这两行程序就很有 可能会超出数组所 能使用的范围2007-9-216数组声明 可以使用自定义类型2007-9-217二维数组 声明数组大小时,如果使用两个数字, 它就变成二维数组 不同的声明语法2007-9-218多维数组 除了二维数组,还可以声明更高维的数 组 使用多维数组,头脑一定要清楚,使用 多维数组会很容易把坐标位置搞混 Fortran最多可以声明高达七维的数组2007-9-219例: 让用户输入 两个22矩 阵的值,再 把这

3、两个矩 阵相加2007-9-2110另类数组的声明 没有特别赋值的情况,数组的索引值从1 开始 可以经过特别的声明来改变这个默认规 则 索引的起始值可以改成任意值2007-9-2111一些名词 数组是类型相同的一组标量数据的有序集合 组成数组的每一个元素称为数组元素 数组的维数称为秩(rank) 在某一维中元素的个数称为该维的长度(extent)。 数组中所有元素的个数称为数组的大小(size) 它等于各维的长度的乘积,数组的大小可以为0 数组的形状(shape)取决于秩和每一维的长度 例:REAL A(10,3,2)的秩为3,大小为 103260,形状为10乘3乘2,或表示成 (10,3,2

4、)。 数组的形状可用内在函数SHAPE得到,如 SHAPE(A)的结果是一维数组,其元素取值为 10,3,2。2007-9-2112 每一维的大小都由一个下界和一个上界来指定,之间以冒号分开,即下界:上界 维界表达式是整型的数学表达式,维界值可以 是正、负或,但维上界必须大于维下界的值 维长上界-下界+ 1 声明数组时下界可以省略,此时维下界为默认值1。 例如:REAL B(0:9,-1:1,4:5,9) 无论何种情况,数组的秩总是要指定的2007-9-21135.2 数组内容的设置 数组每个元素的内容,可以在程序执行 中一个个的设置,也可以在声明的时候 给初值 Fortran 90和Fort

5、ran 95还有提供直接 对整个数组来操作的功能2007-9-2114赋初值 数组可以像一般变量一样使用DATA来 设置数组的初值 DATA的数据区中可以使用星号“*“来表 示数据重复2007-9-2115 “隐含式”循环的功能可以用来设置数组 的初值 “隐含”的循环省略了DO的描述2007-9-2116 “隐含式”循环除了应用在声明的初值设置,还 可以应用在其他的程序代码,如用来输出数组 的内容 “隐含”循环,只要在最后面再多加一个数字, 同样可以改变计数器的累加数值,默认值为12007-9-2117 ”隐含式”循环也可以是多层嵌套的,所 以也可以应用在多维数组上 Fortran 90中,可

6、以省略掉DATA描 述,直接设置初值2007-9-2118 省略DATA时,不能像使用DATA时一样,用 隐含循环对数组中的部分元素设置初值 每个元素都必须给定初值 上面的写法必须把a(1)和a(5)的初值补齐才行2007-9-2119 Fortran 90的隐含循环的功能更强大,像下面的初值 设置方法是Fortran 77和其他语言所做不到的 Fortran 90中,除了可以一个个元素慢慢来给定初值 之外,还可以一口气直接把整个数组内容设置为同一 个数值2007-9-2120 由括号和斜线之间的一系列值或隐DO循环组 成的我们称之为数组构造器 其一般形式为:(/取值列表/) 取值列表可以是标

7、量,隐DO循环或任意秩的数组 如果表中出现数组,它的值是按来赋的。 数组构造器的替换格式: 用方括号代替括号和斜线, 冒号三元下标(代替隐DO循环)来指定值的范围和 步长等价等价2007-9-2121 例:查询学生成绩2007-9-2122 例:输出二维矩阵使用了两层的隐含式 循环来输出二维数组 的内容运行结果2007-9-2123对整个数组的操作 Fortran 90语法添加了许多设置数组内 容的方法 可以使用一个简单的命令来操作整个数组2007-9-21242007-9-21252007-9-21262007-9-2127 例 二维矩阵相加2007-9-2128对部分数组的操作 除了一次对

8、整个数组进行操作之外,Fortran 90还有提供一次只挑出部分数组来操作的功 能 取出部分数组的语法看起来有点类似隐含式循环2007-9-21292007-9-2130 要拿数组中一部分内容来使用时,只要把握两 个原则就可以 等号两边所使用的数组元素数目要一样多 同时使用多个隐含式循环时,较低维的循环可以想 像成是内层的循环2007-9-2131与DO循环的差异 F90的赋值语句考虑到了在并行机上计算的功 能, 即使是用的并计算机,在形式上也是按并化 处的,这与F77中的串行赋值是不同的a的所有元素是并行处理的,结果是(/0,0,1,2,3,4,5,6,7,8/):如果用DO循环的话A的元素

9、是逐一处理的,结果是(/0,0,0,0,0,0,0,0,0/):2007-9-2132 例隐含式循环,低维的 是内层循环只写a等于a(1:2:1, 1:2:1),而低维的是 内层循环a(:,1)等于a(1:2:1,1)2007-9-2133一些概念 在程序执行部分中,数组的三种成份可供运算或输入输出: 数组名- 代表数组中所有元素; 数组元素 - 代表数组中某一个元素; 数组片段 - 代表数组中若干个元素,它们可以 相连或分离。 数组中单独的标量称为元素。标量的秩为0,而数组的秩至少是1 如果没有下标则指整个数组。 对每一维指定确的一个下标则定义一个 数组元素,还可以通过下标可以引用数组的 一

10、部分元素 例如A指整个数组,A(1)指数组A的第1个元素, A(3:4)指数组A的第3和第4个元素,A(1:10:2)指 的是数组A的第1,3,5,7,9个元素2007-9-2134 数组的下标必须用逗号隔开,下标是整 型常量、变量或表达式,可正、可负、 也可以为0,但必须在引用的数组的维数 之内 引用下标的个数要和声明的数组的维数 一致 可以使用函数或数组元素作为下标2007-9-2135数组片段 数组片段是数组所有元素集合的一个子集。 数组片段的元素可以是数组中任意的元素,它们 需连续或遵循某个规则 数组中的所有元素和片段的数据类型和种别 都相同 如果指定数组的所有下标则得到的是数组元素(

11、即标量),如果只指定部分下标则结果是部 分数组元素的集合,即数组片段 数组片段本身也是数组 如果定义REAL A(2,3,4),则A(1,2,3)是数组 元素,而A(1:2,2,2),A(1,1,4:2:-1), A(1,2:3,(/2,4/)都是数组片段。2007-9-2136 数组片段由下标列表确定,下标列表有两种: 三元下标和向量下标。 三元下标 用三个值分别代表数组片段的下界,上界和步长。 其一般形式为:下界:上界:步长 如果省略下界,缺省值为数组相应维的下界; 如果省略上界,缺省值为数组相应维的上界;如果省略步长,缺省值为1。 如果下标都省略了则缺省片段为这个维的全长2007-9-2

12、137 对于一个多维数组的数组片段,它的每 一维都可以用三元下标来声明 数组的步长不能是0。当步长为负值时, 数组子片段从上界开始递减至下界 三元下标的值可以在数组的边界以内 例如对于数组B(10),数组片段B(3:15:6)是 由B(3)和B(9)组成的数组。2007-9-2138向量下标 三元下标以上升或下降的顺序指定数组元素, 而向量下标可以以任何顺序来指定数组元素 向量下标是一个一维整数数组(即向量),它可 以从整个数组中选择片段。2007-9-2139 向量下标的值应该在定义的边界之内, 向量下标可以有多个重复的值,此数组 片段称为多对一数组片段2007-9-2140WHERE WH

13、ERE是Fortran 95添加的功能,它也是用 来取出部分数组内容进行设置 前面是由数组坐标值很规则地使用一部分元素,WHERE命令则可以经过逻辑判断来使用数组的一 部分元素2007-9-2141 使用WHERE命令的程序代码比较精简,执行 起来也会比较快 尤其是如果计算机有多个CPU,而编译器又支持多 CPU的并行处理能力 用DO循环写的程序不能拿来做并行处理 如果程序模块只有一行命令时,可以把这一行 命令写在WHERE后面,并且省略END WHERE2007-9-2142 WHERE是用来设置数组的,所以它的 程序模块中只能出现与设置数组相关的 命令 在它的整个程序模块中所使用的数组变量

14、, 都必须是同样维数及大小的数组2007-9-2143 WHERE除了可以处理逻辑成立的情况之外, 还可以配合ELSE WHERE来处理逻辑不成立 的情况b的最后结果2007-9-2144 WHERE描述还可以做多重判断,只要 在ELSE WHERE后面接上逻辑判断就行 了2007-9-2145 WHERE也可以是嵌套的,和循环一样可以取名字,2007-9-2146 假设年所得3万以下所得税率为10,3万到5 万之间为12,5万以上为15。使用 WHERE命令来计算,并记录10个人的所得税 金额2007-9-2147WHERE的一般形式 WHERE语句的一般形式为:WHERE(屏蔽表达式) 赋

15、 值语句 WHERE构造的一般形式为: 构造名: WHERE(屏蔽表达式1) 块 ELSEWHERE(屏蔽表达式2) 构造名 块 ELSEWHERE 构造名 块 END WHERE 构造名2007-9-2148FORALL FORALL是Fortran 95新添的,可以看成一种 使用隐含循环来使用数组的方法,不过它的功 能更强大2007-9-2149FORALL的详细语法为 FORALL中可以赋值好几个triple,数组最多有 几维就可以赋值多少个用来赋值数组坐标范围的值,如 forall(I=1:5)中的I=1:5就是一个 triple,跟隐含式循环一样,省略第 3个数字时默认的增值就是1mask是用来做条件 判断,和WHERE 命令中使用的条件 判断类似2007-9-2150 mask用来限定FORALL程序模块中,只作用于数组中 符合条件的元素,或者做其他的条件限制2007-9-2151FORALL描述中的程序模块如果只有一行 程序代码时,可以省略END FORALL2007-9-2152 声明一个二维数组作为二维矩阵使用。它使用 FORALL命令把矩阵的上半部设置为1,对角 线部分设置成2,下半部设置成32007-9-2153 FORALL可以写成多层的嵌套结构 它里

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

当前位置:首页 > 商业/管理/HR > 经营企划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号