第八章 数组高级特性.pptVIP

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第八章 数组高级特性.ppt

Fortran95/2003程序设计 第八章 数组高级特性 本章学习目标: ? 学会如何定义和使用二维数组 ? 学会如何定义和使用多维数纽 ? 学会什么时候如何使用WHERE 结构 ? 学会什么时候如何使用FORALL 结构 ? 理解如何分配、使用、释放可分配数组 8.1 二维数组 二维数组元素通过两个下标来定位。 8.1.1 声明二维数组 3行6列实数数组 例: 7行10列的字符型数组,每个元素为6 个字符的字符串。 101行21列整数数组,行下标0-100,列下标0-20。 8.1.2 二维数组的存储 N 行M 列大小的二维数组占据了计算机内存中的MxN 个连续的空间。 Fortran 总是以列为主顺序为数组元素分配空间,即,在内存中首先为第一列分配空间,接着是第二列、第三列等等。 8.1.3 初始化二维数组 用赋值语句对二维数组进行初始化 Fortran 95/2003 提供了一个内部函数RESHAPE ,可以在不改变数组中元素的数量的情况下,改变一个数组的结构: arrayl 包含数组的数据, array2 是描述新结构的一维数组,每个元素的表示维数的大小。 把一个lx12 数组转化为一个4×3数组,然后赋给istat。 当RESHAPE 改变了数组的结构时,它以列为主要顺序进行数据从旧结构向新结构映射。因此,形成的数组中第一元素是istat (1, 1) ,第二个是istat(2,1) 。 用类型声明语句对二维数组进行初始化 用READ 语句初始化二维数组 Initial.dat 如果文件INITIAL 1.DAT 包含有下述数据: 下面代码可以得到相同的数组istat 8.1.4 举例 例8-1 发电机发电站的4 台发电机在6 个不同的时间段内输出电能的测量值。编写程序,从磁盘文件中读取这些数据,计算每台发电机在测量时间段的平均发电量,以及所有发电机在每一个测量时间段上的总发电量。 为了保证文件中的矩阵结构和程序中的矩阵结构一样,在读或写二维数组的时候应该使用D0 循环和/或隐含的DO 循环,有助于提高程序的可理解性. 8.1.5 整个数组的操作和部分数组 8.2 多维数组 fortran支持下标多达7 个的复杂数组,这些大数组的声明、初始化和使用方式都和二维数组相同。 2x2×2的3 维数组的内存分配 8.3 对数组使用Fortran 内置函数 Fortran 95/2003 有三大类内置函数elemental functions (基本函数)、inquiry functions(查询函数)和transformational functions (变换函数)。 8.3.1 基本内置函数 ABS 、SIN 、COS 、TAN 、EXP , LOG 、LOG10 、MOD 以及SQRT 8.3.2 内置查询函数 例8-2 判断数组属性。 8.3.3内置变换函数 8.4 加掩码的数组赋值:WHERE结构 假设需要获取数组部分元素的对数值 可以使用称为掩码数组赋值( masked array assignment) 的数组赋值语句一次完成所有这些计算。 8.4.1 WHERE 结构 mask_expr1是一个逻辑数组,它和数组执行语句中处理的数组具有同样的结构。 表达式value0 生成一个逻辑数组,这个数组中的元素当value 数组中的对应元素大于0 时为TRUE ,当value 中的元素小于或等于0时为FALSE。 8.4.2 WHERE 语句 Fortran 95/2003 中也提供了一条单行WHERE 语句: 例如,限制数组的值在最大值1000和最小值-1000之间。 使用D0 、IF 结构的程序如下: 使用WHERE 结构的程序如r: 8.5 FORALL 结构 一系列操作可以对数组中部分元素逐个使用,这些元素通过下标索引和通过逻辑条件来进行选择。 8.5.1 FORALL 结构的格式 FORALL 语句中的每个索引都是通过下标的三元组形式来指定的: 求一个nXm 数组work 的所有元素的倒数 但可能对于work 中任意一个为0的元素产生一个运行错误。正确的应该为: 8.5.2 FORALL 结构的重要性 任何一个可以用FORALL 结构表示的表达式也可以用包含有IF 结构的嵌套DO 结构来表示 那么为什么在Fortran 语言中还要有FORALL 结构呢? 答案是在DO 循环结构中的语句必须按照一种严格的顺序来执行,而FORALL 结构中的语句可以按照任意顺序来执行。 在FORALL 结构中可以根据处理机选择的任意顺序来处理同一组的元素。这种自由意味着使用大型并行计算机可以优化程序,通过给每台独立的处理机分配元素来最大地提高运行速度。 如果FORALL 结构体中包含了不止一条语句,那么首先完成第一条语句所

文档评论(0)

heroliuguan + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8073070133000003

1亿VIP精品文档

相关文档