fortran数组及其应用课件_第1页
fortran数组及其应用课件_第2页
fortran数组及其应用课件_第3页
fortran数组及其应用课件_第4页
fortran数组及其应用课件_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数组及其应用童传佳1.数组的基本概念2.数组声明3.数组元素引用4.数组的逻辑结构与存储结构5.数组的输入输出6.给数组赋初值7.WHERE语句8.动态数组

1.数组的基本概念

数组是一个集合,它的元素必须是标量,其标量元素可以属于任何的固有数据类型,派生数据类型,甚至是结构,但数组最关键的一个特征是:数组的所有标量元素必须属于同一个数据类型,并且具有同样的种别参数。

这个特征决定了数组是一种功能强大的数据结构,因为存在大量的实际问题,需要用同一个计算过程来处理大规模的同种类型的数据。

数组实际上是一组带下标的变量,例如含有五个元素的数组A可写为A(1),A(2),A(3),A(4),A(5)。

2.数组声明数组包括静态数组与动态数组,在程序中使用时,必须进行数组声明。其一般格式为:<数组声明语句>→<类型声明符>[::]<数组声明表>

数组声明表包括了数组名以及维说明表(上、下届及初值)。例如下面都是合法的数组声明:INTERGERnum(-3:3)!说明数组num是一个一维整型数组,有7个元素REALtcj(-4:2,3:7)!说明数组tcj是一个二维整型数组,有24个元素若数组声明中含有符号::(双冒号),则允许在声明中给数组赋初值,否则不允许。如:INTERGER::a(3)=(/10,20,30/),b(4)数组a被赋予初值a(1)=10,a(2)=20,a(3)=30.默认下界为1.数组b未赋初值,数组初值默认为0,即b(1)=b(2)=b(3)=b(4)=0DIMENSION语句<DIMENSION语句>→DIMENSION<数组声明表>用DIMENSION语句声明数组,数组类型由隐含规则确定,即由数组名第一个字母确定,如:DIMENSIONnum(3),day(12),ihour(5:7),count(-3:3)其中整型数组有num和ihour,实型数组有day,count。数组类型可结合类型声明语句改变,在上述语句前加上(INTERGERday,count),则全为整型数组。DIMENSION语句中不允许出现符号“::”,不能给数组赋初值。(结合类型声明符则可以)如:DIMENSION::num(3)=(/10,20,30/)!此语句非法INTERGER,DIMENSION(3)::num(/10,20,30/)!此语句合法3.数组元素引用在程序中常常需要引用数组的某个、某些或全部元素,这时得用到数组元素引用INTERGER::a(3)=(/10,20,30/);sum=(a(1)+a(2)+a(3))/3.0<数组元素引用>→<数组名>[(<数组下标>{,<数组下标>})]数组元素被引用时,若只给出数组名,不指定数组下标,则引用数组全部元素。INTERGERa(8),b(8),c(3,4)a=10!将10赋值于a数组所有8个元素b=a!将数组a的8个数组元素一次赋值于数组b的8个数组元素c=20!将20赋值于c数组所有12个元素a(3:7:2)=a(8)+10!第3、5、7个数组元素赋值20,元素间增加步长为2数组下标可以是整型或实型表达式,若为实型则表达式值将自动取整。3个赋值语句“d(0.315*5+1)=25”、“d(2.575)=25”、“d(2)=25”等价FORTRAN95提供两个内部函数(UBOUND、LBOUND)来检测数组的下标下界和下标上届,在此不多做赘述!4.数组的逻辑结构与存储结构数组有逻辑结构与存储结构两大特征。数组逻辑结构:从用户角度看,数组是一个与计算机实现无关的抽象的数据表。数组存储结构:从计算机角度看,数组又是一个与计算机实现存储分配有关的具体的数据表。两者是一一对应关系。一维数组是按照数组逻辑结构次序依次将数组元素分配在连续存储单元中。逻辑结构存储结构a(1)a(2)a(3)a(4)a(5)a(6)a(7)a(8)a(9)a(1),a(2),a(3),a(4),a(5),a(6),a(7),a(8),a(9)5.数组的输入输出

INTERGERa(8)DOi=1,8READ*,(a(i),i=1,8)READ*,a(i)ENDDO输入语句中使用隐含DO循环,循环项可以是数组元素或普通变量,但不能是常数、函数或表达式,而输出语句中都可以,如:READ*,(x+10,i=1,5)!此句非法PRINT*,(10,i=1,5)!输出5个10PRINT*,(ABS(-20),i=1,5)!输出5个20使用DO循环语句使用隐含DO循环子句7.WHERE语句WHERE语句是FORTRAN95专门用于处理数组的语句,也称过滤数组语句。其功能类似IF语句,有三种格式:逻辑、块、多分支WHERE语句。逻辑WHERE语句的一般格式为:<逻辑WHERE语句>→WHERE(<条件>)<赋值语句>块与多分支WHERE语句类似IF语句,格式如下:[构造名:]WHERE(屏蔽表达式1)[块][ELSEWHERE(屏蔽表达式2)[块][ELSEWHERE[条件3][块]ENDWHERE8.动态数组对于静态数组,在编译时就被分配在固定的储存空间,并且直到程序退出时才被释放,因此数组大小始终不变。其优点是存储分配算法简单,运行速度快,缺点是存储开销大,存储空间浪费严重。在求解数组元素个数不确定的问题时,可以使用动态数组。动态数组占用的内存大小是在程序执行期间按需分配的,满足需要又不浪费。动态数组占用的内存可以释放掉。对输入不超过200个数求和

PROGRAMstaticPROGRAMdynamic

PARAMETER(max=200)INTEGER,Dimension(:),Allocatable::A

INTEGERA(max),i,n,sumINTEGERi,n,sumREAD*,nREAD*,nREAD*,(A(i),i=1,n)Allocatate(A(n))sum=0READ*,(A(i),i=1,n)DOi=1,nsum=0sum=sum+A(i)DOi=1,nENDDOsum=sum+A(i)print*,“所有数的和为”,sumENDDOENDprint*,“所有数的和为”,sumEND静态数组

动态数组动态数组的定义方式:1、类型说明,Dimension(RANK),Allocatable::数组名2、类型声明,ALLOCATABLE::数组名(RANK)RANK规定了数组的维数,一个:代表一维,:之间用逗号隔开。不能指定各维的上下界。Real,Dimension(:),ALLocatable::A!定义一维动态数组AReal,Allocatable::B(:,:,:)!定义三维动态数组BInteger,Dimension(:),Allocatable::C(1:5)!非法语句,不能指定上下界Integer,Allocatabl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论