F90第八章

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数组声明语句必须出现在所有可执行语句之前。
第八章 数组
8.2 数组声明
DIMENSION语句

定义 声明1
<DIMENSION语句>→DIMENSION <数组声明表>


声明2
声明3
不能出现::,不允许给数组赋初值。
DIMENSION num1(3),count1(-3:6) DIMENSION num2(3,3),count2(-3:6,0:6) 数组类型由I-N规则确定。
三维第八章数组84数组的逻辑结构和存储结构三维84数组的逻辑结构和存储结构三维84数组的逻辑结构和存储结构84数组的逻辑结构和存储结构三维第八章数组85数组的输入输出使用do循环语句85数组的输入输出使用do循环语句85数组的输入输出85数组的输入输出使用使用隐含do循环使用数组名片段使用数组名片段根据数组逻辑结构下标使用do循环输入输出全部或部分数组元素
(1)隐含DO循环允许一行输入多个数据。 (2)输入语句中,循环项可以是数组元素、普 通变量,但不能是常数和表达式。 (3)输出语句中,循环项可以是数组元素、常 数、普通变量、函数和表达式。 (示例1)(示例2)
第八章 数组
使用隐含DO循环输入输出数组示例1
[例8.1]:已知5个学生成绩:85,94,78,51,35。按序输入,统计平均成绩,然后修改 第1,3,5个学生成绩,再统计平均成绩,输出5个学生最新成绩及修改前后平均成绩。
<维说明表>→<维说明符>{,<维说明符>}
<维说明符>→[<下界>:]<上界>
<数组初值>→(/<初值1>,<初值2>,…,<初值n>/)
声明下界为1的数组:例
声明数组下界不为1的数组:例
声明赋初值的数组:例
第八章 数组
8.2 数组声明

定义 声明1


声明2
声明3
声明下界为1的数组: INTEGER N(1:4),M(1:5,1:8) INTEGER N(4),M(5,8) REAL score(4),prices(15)

检测
数组元素出现在表达式中,参与某种运算。
第八章
数组
8.3 数组元素引用

概述 格式
数组元素的引用格式: <数组名>[(<数组下标>{,<数组下标>})] <数组下标>→[<算术表达式>]:[<算术表达式>] 引用一个元素:下标为一个算术表达式。

检测
引用部分元素(数组片断引用):下标为:号间隔的 两个算术表达式。
数组元素:数组中的每一个数据。 数组大小:数组元素的个数。 数组分类:


声明2
声明3
1. 静态数组:编译时分配存储空间,运行时数 组大小不能改变,运行结束后释放存储空间。 2. 动态数组:在程序运行过程中分配、改变和 释放存储空间,数组大小可以改变。

三种数组声明方式:
类型声明语句、DIMENSION语句、DIMENSION属性
8.2 数组声明/声明2
数组类型可以通过类型声明语句改变,类型声 明语句可位于DIMENSION的前面或后面。 INTEGER day DIMENSION num(3),day(12),count(-3:3) CHARACTER*20 num
第八章 数组
8.2 数组声明
DIMENSION属性:
INTEGER,DIMENSION(2)::t1,t2(10:15),t3(2,2)
可以给数组赋初值。
INTEGER,DIMENSION(5):: S=(/45,78,85,55,95/)
第八章 数组
8.3 数组元素引用

全部元素: 数组元素赋值;
DOUBLE PRECISION score(4),prices(15) CHARACTER*10 country(15)
第八章 数组
8.2 数组声明

定义 声明1
声明数组下界不为1的数组: INTEGER count(-3:3),week(2:6) REAL sc(-5:-1,5:9),ar(2:5,-1:2,4)

检测
检测某一维(指定维数,有第二参数),结果为整数。
第八章
数组
8.4 数组的逻辑结构和存储结构

概述 一维
数组有逻辑结构和存储结构两大特征
数组逻辑结构: 从用户角度看,数组是一个与计算机实现无关 的抽象的数据表。 数组存储结构: 从计算机角度看,数组是一个与计算机实现 (存储分配)有关的具体的数据表。


二维
三维
线性表。按照数组逻辑结构以列为主依次为数 组元素分配存储单元。

逻辑结构、存储结构的相互关系
第八章
数组
8.4 数组的逻辑结构和存储结构


逻辑结构:多层二维表格。
存储结构:线性表。 逻辑结构、存储结构的相互关系
概述 一维



二维
三维
第八章
数组
Tips
高效使用数组 Using Arrays Efficiently
INTEGER X(3,5),Y(3,5),I,J Y=0 DO I=1,3 INTEGER X(3,5),Y(3,5),I,J Y=0 DO J=1,3
DO J=1,5
X(I,J) = Y(I,J) + 1 END DO END DO …
DO I=1,5
X(I,J) = Y(I,J) + 1 END DO END DO …
数组类型声明语句说明: n维数组元素个数:


声明2
声明3
a(L1:U1,L2:U2,…,Ln:Un)
M=(U1-L1+1)(U2-L2+1)…(Un-Ln+1) 要求:上界≥下界,否则数组大小为0。 8.2 数组声明/声 明1 数组和变量可在同一个声明语句中混合声明。 INTEGER max,count(10)
(1)统计全校学生的身高。
(2)求解100元一次方程组。 结论:如果直接采用简单内部数据类型和普通 变量,难度大为增加,甚至无法设计和编写程序。 问题的解决:数组。
数组的重要性:最重要的一种数据类型和数据结构。
第八章 数组
8.2 数组声明

定义 声明1


数组:类型相同的一组数据的有序集合。


二维
三维
第八章
数组
8.4 数组的逻辑结构和存储结构

概述 一维
逻辑结构 线性表:a(1),a(2),…, a(n),数组元素下标 的大小顺序决定该元素在线性表中的位置。


二维
三维
存储结构
线性表。从计算机内存中分配一串连续的存 储单元,从第一个元素开始,按照逻辑结构次序 依次为元素分配存储单元。 逻辑结构、存储结构的相互关系


声明2
声明3
第八章
数组
8.2 数组声明

定义 声明1
声明赋初值的数组: INTEGER :: num(3)=(/12,23,34/),day(12) REAL :: a(-1:3)=(/1.5,2.5,3.5,4.5,5.5/)


声明2
声明3
第八章
数组
8.2 数组声明

定义 声明1
第八章 数组
1. 2. 3. 4. 5. 6. 7. 8. 数组概述 数组声明 数组元素引用 数组逻辑结构和存储结构 数组输入输出 给数组赋初值 动态数组 数组应用举例
《FORTRAN90程序设计》课多媒体课件
8.1 数组概述
问题的提出:
简单问题涉及数据量小,采用简单的内部数据类型、 普通变量。涉及大量数据的复杂问题:
Fortran 以列为主,C以行为主
第八章 数组
8.5 数组的输入输出

使用DO循环语句 使用隐含DO循环

根据数组逻辑结构下标,使用DO循环 输入输出全部或部分数组元素。

使用数组名片段
一维、二维数组输入输出。

使用DO循环,输入时每行只能输入一 个数据(与逻辑结构不一致);输出 时只要输出格式控制得当(使用\编辑 符,能够按照逻辑结构输出。 矩阵输入输出
数组元素的引用要保证数组下标落在相应维的上、 下界之间,否则会产生越界的运行错误。
内部函数(UBOUND、LBOUND):
UBOUND(<数组名>[ , [DIM=]<整型表达式>]) LBOUND(<数组名>[ , [DIM=]<整型表达式>]) 检测所有维(不指定维数,缺第二参数),结果为一 维整型数组。 例:1 2 3 4 5 INTEGER num(-5:-1,11:15,-2:2) LBOUND(num,1) UBOUND(num,2) LBOUND(num) UBOUND(num)
11,33,55↙ PRINT *,N,'名学生的最新成绩是:' DO i=1,N 输出结果: 5名学生的最新成绩是: sum=sum+score(i) WRITE(*,"(F5.1,',',\) “)(score(i),i=1,N-1)
94.0, 33.0, 51.0, 55.0 WRITE(*,"(F5.1)")score(N) 更新前平均成绩是: 68.60 av1=sum/N WRITE(*,"(' 更新前平均成绩是:',F7.2)") av1 更新后平均成绩是: 48.80 PRINT*, „输入第奇数个学生新成绩:' WRITE(*,"(' 更新后平均成绩是:',F7.2)") av2
第八章
数组
8.5 数组的输入输出


一维数组隐含DO循环语句
使用DO循环语句 使用隐含DO循环
(<循环项>,<循环变量>= <初值>, <终值>[, <步长>])
READ *,(arr1(I),I=1,8,2) READ *,(arr1(I),I=1,8)


使用数组名片段
二维数组隐含DO循环子句 READ *,((arr2(I,J),J=1,4),I=1,3) READ *,((arr2(I,J),J=1,4,2),I=1,3,2)

定义 声明1
<类型声明符>,DIMENSION(<维说明表>)::<数组声明表>


声明2
声明3
数组类型由类型声明符确定,维数及维的上下 界由维说明表确定;::必须出现。 INTEGER,DIMENSION(2)::num,total REAL,DIMENSION(-5:-1,5:9) :: sc,jp 允许在数组声明表中对数组进行特定维说明。
PROGRAM exam8_2 输入数据:以行为主输入 12 个矩阵数据,每行输入一个数据: PARAMETER(M=3,N=4)54.2 12.5 23.8 78.9↙ REAL A(M,N) 45.3 0 92.4 24.4↙ WRITE(*,“(„ 按逻辑结构输入',I3, ' 个矩阵数据:')") 84.2 32.8 72.8 43.2↙ READ *,((A(i,j),j=1,N),i=1,M) 输出结果:输出转置后数组: PRINT *,„输出转置后数组:’ 12.5 92.4 84.2 WRITE(*,"(<M>(' ',F4.1,' '))") ((A(i,j),i=1,M),j=1,N) 23.8 45.3 32.8 END 54.2 0.0 78.9
第八章 数组
8.2 数组声明


类型声明语句
定义 声明1
<类型声明符> [::] <数组声明表>
<类型声明符>→INTEGER∣REAL∣COMPLEX∣CHARACTER∣LOGICAL


声明2
声明3
<数组声明表>→<数组名>(<维说明表>)[=<数组初值>] {,<数组名>(<维说明表>)[=<数组初值>]}
PROGRAM exam8_1 PARAMETER(N=5) DO i=1,N 输入数据:输入 5 名学生的成绩,每行输入多个成绩: REAL :: sum=0,av1,av2,score(N)sum=sum+score(i) 85,94,78,51,35↙ WRITE(*,“(„ 输入’,I2, „名学生的成绩,每行输入多个成绩:') ") ENDDO 输入第奇数个学生新成绩: READ *,(score(i),i=1,N) av2=sum/N N
ENDDO READ *,(score(i),i=1,N,2) sum=0
第八章 数组
11.0,
END
使用隐含DO循环输入输出数组示例2
[例8.2]:已知矩阵A,输入矩阵数据并转置输出该矩阵。
12.5 矩阵A 92.4 84.2 23.8 45.3 32.8 54.2 0.0 72.8 78.9 24.4 43.2
逻辑结构 存储结构 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)
第八章
数组
8.4 数组的逻辑结构和存储结构


逻辑结构
二维表格(或矩阵)。 存储结构
概述 一维

引用全部元素:只给出数组名,不指定下标。 例:1 2 3 4 5
第八章 数组
INTEGER id(10) id=25 id(1)=2*id(1); id(5)=3*id(5) id(3:5)=15; id(:2)=35; id(6:)=35 id(:)=999
8.3 数组元素引用

概述 格式
相关文档
最新文档