1、数值赋初值操作:

例子:

INTEGER A(5)
DATA A /1,2,3,4,5/           !fortran77 通常用法
或者
INTEGER A(5)
INTEGER I
DATA (A(I),I=2,4) /2,3,4/    !用隐含式的循环将 A(2)=2,A(3)=3,A(4)=4赋值。

下面用FORTRAN95的用法赋值,例子如下:

integer::a(5)=(/1,2,3,4,5/)

直接将数组A的5个元素赋值,注意:省略DATA直接把初始值写在声明语句后面时候,每个元素都必须赋值,因此简单的做法是用隐含式DO循环完成,另外就是干脆把数组的全部元素都用一个相同值来赋值。例如下面:

integer::a(5)=1                  !a(1)=a(2)=a(3)=a(4)=(5)=5
或者
integer::I
integer::a(5)=(/(I,I=1,5)/)      !a(1)=1,a(2)=2,a(3)=3,a(4)=4,a(5)=5

2、对部分数组的操作: FORTRAN90为我们提供了一次只挑出部分数组来操作的功能,这一功能的实现类似于隐含式的循环操作,下面用如下几个例子来说明:

a(3:5)=5                    !a(3)=a(4)=a(5)=5,其他元素值不变
a(3:)=5                     !把a(3)以后的元素的值都赋值成5,a(1)和a(2)不变,
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中
a(:,:)=b(:,:,1)             !要保证三维数组B中的二维数组全部元素对应的赋值给二维数组A中

要注意的是多个隐含式循环,较低维的循环对应是内层循环,而且必须保证赋值符号两侧的数组元素是同样数目,如下面的例子:

integer::a(2,2),b(2,2)
b=a(2:1:-1,2:1,:-1)   !相当于 b(1,1)=a(2,2);b(2,1)=a(1,2);b(1,2)=a(2,1);
                      !b(2,2)=a(1,1)

3、应用where对部分数组操作

where是FORTRAN95新加入的功能,类似于IF的功能,使用它可以使得程序精简化,但是他的使用同样要保证两个数组质检的维数和大小是相同的。例如a和b都是一维数组而且都是含有5个元素的,那么下面:

where(a<3)b=1
elsewhereb=2
endwhere  !用a数组对应位置内容的大小来给b数组赋值

4、FORALL 对部分数组操作

FORALL是FORTRAN95新加入的功能,但是这个功能更为强大,例如:

integer::a(10,5)
integer::I,J
......
......
forall(I=1:5,J=1:5,a(I,J)<10)   !只处理数组小标在1~5范围而且元素内容小于10的元素a(I,J)=1
end forall

同样的,与IF、WHERE相似的地方是,只有一行代码时候,可以省略end forall。

另外在FORALL中可以使用WHERE。

5、数组在内存中的存储规则

FORTRAN程序的数组元素在内存中按列保存,用二维数组A(3,4)来说明它在内存中的保存:

     A(1,1)->A(2,1)->A(3,1) 先存第一列的各行元素
--->>A(1,2)->A(2,2)->A(3,2) 再存第二列
--->>A(1,3)->A(2,3)->A(3,3)
--->>A(1,4)->A(2,4)->A(3,4) 最后存储第四列

值得注意的是现在的计算机硬件结构中,会应用高速缓存Cache,当CPU使用数据时会先检查高速缓存中有没有这个数据,当没有时才会到存储器中拿数据,在拿数据的时候,不仅会拿所需的数据同时也会拿临近的数据,并把这列临近的数据存储在高速缓存中,如有CPU之后马上用到这些临近的数据会直接向高速缓存读取,这使得线性计算机的计算速度变得快,因此我们应该利用这个规则来安排数据的存放。

6、可变大小的数组

FORTRAN90比FORTRAN77功能强大的一点在于可以支持可变大小的数组,写法如下:

program ex0716
implicit none integer::students
integer,allocatable::a(:)  !声明一个可变大小的数组
integer::i
write(*,*) "How many students"
read(*,*)students
allocate(a(students))      !配置内存空间
......
end

另外释放空间可用DEALLOCATE。

当我们要检查一个变量是否已经被配置过内存空间时,可以用ALLOCATED函数,该函数返回一个逻辑值

if(.not.allocated(a)) thenallocate(a(5))
end if

数组操作 from《FORTRAN95 程序设计》相关推荐

  1. Numpy入门教程:03.数组操作

    背景 什么是 NumPy 呢? NumPy 这个词来源于两个单词 – Numerical和Python.其是一个功能强大的 Python 库,可以帮助程序员轻松地进行数值计算,通常应用于以下场景: 执 ...

  2. python json数据格式数组内元素递增赋值_python深浅复制,类型转换, json操作,数组操作...

    python深浅复制 import copy a = [1, 2, 3, 4, ['a', 'b']] #原始对象 b = a #赋值,传对象的引用 c = copy.copy(a) #对象拷贝,浅拷 ...

  3. php 常用数组操作

    php常用的数组操作函数,包括数组的赋值.拆分.合并.计算.添加.删除.查询.判断.排序等 array_combine 功能:用一个数组的值作为新数组的键名,另一个数组的值作为新数组的值 <?p ...

  4. php数组操作之合并相同键名的值,排序,排重,去空值等

    一.前言 数组操作是咱们在编程时候经常遇到的,只是数组函数有点多,用到的时候难免会想不起来.特别是针对多维数组的操作,有的时候用自带的数组函数真的很方便,可以避免多次的foreach循环,这里记录一下 ...

  5. C#字符串及数组操作

    一.一维: int[] numbers = new int[]{1,2,3,4,5,6}; //不定长 int[] numbers = new int[3]{1,2,3};//定长 二.多维 int[ ...

  6. 【C 语言】数组 ( 多维数组操作模型 | 取某个数组元素地址 | 取某个数组元素值 )

    文章目录 一.多维数组操作模型 1.取出某个数组元素地址 2.取出某个数组元素值 总结 一.多维数组操作模型 以 // 声明一个多维数组int array[2][3]; 二维数组为例 ; 1.取出某个 ...

  7. PHP内核探索之变量(4)- 数组操作

    原文:PHP内核探索之变量(4)- 数组操作 上一节(PHP内核探索之变量(3)- hash table),我们已经知道,数组在PHP的底层实际上是HashTable(链接法解决冲突),本文将对最常用 ...

  8. mongoDB的shell数组操作器

    http://www.2cto.com/database/201304/205024.html mongoDB数组操作器 $push会向数组末尾加入一个元素,如果数组不存在,则会创建这个数组. 增加评 ...

  9. 将0移到最后,在原数组操作,并且不能改变源数据顺序(JS编程)

    一.问题描述: 将0移到最后,在原数组操作,并且不能改变源数据顺序. 示例:输入:[2,0,0,1,0,3],  结果:[2,1,3,0,0,0] 二.问题分析与解决: 注意是在原数组上操作,不要进行 ...

  10. Java 常用类库 之 Arrays 数组操作类

    http://www.verejava.com/?id=16993047728690 /**知识点 : Arrays 数组操作类 */ import java.util.Arrays; public ...

最新文章

  1. Wide Deep的OneFlow网络训练
  2. 无线红外探测器01-产品简介和功能需求
  3. linux下忘记mysql root密码
  4. winrar压缩文件但是排除指定目录
  5. conn.execute参数
  6. visual studio 代码提示_《微软模拟飞行2020》代码暗示下一代Xbox或支持VR
  7. capwap学习笔记——capwap的前世今生(转)
  8. linux的vi命令详解,Linux上Vi命令详解
  9. html文件设置ftp6,vsftp的安装与配置
  10. 【HDU - 5468】Puzzled Elena(容斥原理,dfs序,数学,素因子分解,有坑)
  11. 计算机图形学E10——Bezier曲线
  12. 选择操作、投影操作、交操作
  13. 转:Kafka、RabbitMQ、RocketMQ消息中间件的对比 —— 消息发送性能 (阿里中间件团队博客)...
  14. win10家庭版设置本地策略组
  15. 小玩意 - 银行业务的模拟系统(C++)
  16. SQL Server 2008 SP3简体中文版官方下载
  17. mac python 连接oracle数据库(mac cx_Oracle.DatabaseError: DPI-1047: )
  18. 交流纯电容电路中电容的容抗、容量和频率以及电压与电流的关系
  19. [渝粤教育] 西南科技大学 仓储与配送管理 在线考试复习资料
  20. word表格分开快捷键_word文档如何快速拆分表格,干货!怎样快速拆分表格以及快速合并表格技巧介绍...

热门文章

  1. 美图秀秀5 android,美图秀秀Android版v1.4.5上线 优化拼图排版秀北爱
  2. 游戏控制管理器(a11s)
  3. 岂曰无衣 与子同袍——解析月狂病amp;壳之少女的世界
  4. 青岛鑫江东方城购物中心远程预付费电能管理系统的应用
  5. x5内核html5,X5内核+HTML5应用 Q立方浏览器预览版
  6. 有哪些连接oracle的工具,连接oracle数据库工具有哪些
  7. 木马群起攻击Word文档 360补丁保护办公安全
  8. 保研复习——信号与系统1:信号与系统(绪论)
  9. Python生成舒尔特的Excel表格
  10. oracle mysql odbc驱动程序_用于 Oracle 的 ODBC 驱动程序