您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > FORTRAN程序设计第七章
FORTRAN程序设计1.数组概述2.数组声明3.数组元素引用4.数组逻辑结构和存储结构5.给数组赋初值6.数组输入输出7.数组应用举例第七章数组前面章节涉及的问题都是比较简单,编写的程序也不复杂,这些程序的一个突出特点是所处理的数据量非常少,采用的数据类型都是简单的内部数据类型,使用的变量都是普通变量。然而在实际的生产活动中,往往遇到的是一些涉及大量数据的复杂问题,如:统计100年内月平均温度及高于平均温度的月数。统计学校1500名学生的平均身高及大于平均身高的男女生人数。统计某商场近10年月平均销售额及高于平均销售额的月份。求解100元一次方程组。求解高阶微分方程。计算5050阶矩阵的转置矩阵。对某班30名学生的学习成绩进行排序处理。以上问题都要涉及几十、几百、几千,甚至上万个数据,如果在程序中采用简单的内部数据类型和变量来求解这类问题,其难度将大大增加,甚至无法设计和编写程序。一数组概述简单变量是用来存储一个数据数组是用来存储一批类型相同的被称为元素的有序数据例:1,3,5,7,9例:3个学生4门课程的成绩98,89,88,95.578,67,87,6667,75,88,88一维数组:一行或一列数据二维数组:一页表格三维数组:若干页表格存储在数组A中存储在数组B中变量与数组的区别数组的分类维数最多可用到七维一维二维!统计15个数的平均值及大于平均值的数据个数。使用普通变量和顺序结构实现。PROGRAMexample2REALa1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,sum,avINTEGERnumREAD*,a1,a2,a3,a4,a5,a6,a7,a8,aa9,a10,a11,a12,a13,a14,a15sum=a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12+a13+a14+a15av=sum/15;num=0IF(a1av)num=num+1IF(a2av)num=num+1IF(a15av)num=num+1PRINT*,'平均值为:',av;PRINT*,'大于平均值的数据个数:',numEND!统计15个数的平均值及大于平均值的数据个数。使用数组和循环结构实现。PROGRAMexample4PARAMETER(max_num=15)REALa(max_num),sum,avINTEGERnumsum=0.0DOi=1,max_numREAD*,a(i)sum=sum+a(i)ENDDOav=sum/max_num!该程序变量少,程序短,数据输入一遍。num=0DOi=1,max_numIF(a(i)av)num=num+1ENDDOPRINT*,'平均值为:',avPRINT*,'大于平均值的数据个数为:',numEND数组的引入数组是FORTRAN提供的一种数据结构,是变量的集合。数组概念:包含若干个同种类型的变量数组元素或下标变量数组名:统称了一批数据数组元素:是数组中某一个数据的名称数组元素的写法:一维数组:数组名(下标表达式)数组元素与下标二维数组:数组名(行下标表达式,列下标表达式)三维数组:数组名(行下标表达式,列下标表达式,页下标表达式)注意:下标表达式值自动取整数。下标值可正、可负、可为零。下标就是序号例:1,3,5,7,9存储在数组A中①设1为第一个元素,数组A的各元素为:A(1)、A(2)、A(3)、A(4)、A(5)②设1为第0个元素,数组A的各元素为:A(0)、A(1)、A(2)、A(3)、A(4)③设1为第-1个元素,数组A的各元素为:A(-1)、A(0)、A(1)、A(2)、A(3)例:98,89,88,95.5存储在数组B中78,67,87,6667,75,88,88设表中行号为1,2,3,列号为1,2,3,4则78为B(2,1)75为B(3,2)数组是类型相同的一组变量的有序集合。任何一组类型相同且有序的数据都可使用数组存储。如:保存30名学生成绩数据的一组变量:s1,s2,s3,…,s30REALs1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15这组变量可用数组s取代,数组元素s(1),s(2),…,s(15),分别取代s1,s2,…,s15。REALs(15)数组大小为数组元素个数。数组声明有3种方式:类型声明语句、DIMENSION语句二数组的说明注:数组的说明包括(1)确定数组的名称;(2)确定数组元素的类型;(3)确定数组的结构。程序中所有数组要先说明类型、名字、大小,再使用用类型声明语句和DIMENSION属性进行数组声明1.数组定义的一般标准格式:类型标识符数组名1(维说明1[,维说明2,…])[,数组名2…]2.DIMENSION语句DIMENSION数组名1(维说明1[,维说明2,…])[,数组名2…]维说明的形式:维下界:维上界(或下标下界:下标上界)REALA(1:10),B(80:90),C(-5:4),NUM1(1:2,1:5)INTEGERD(0:10,0:4),MUM2(2:5)DIMENSIONS(3:5),M(1:10)注:数组名不能与本程序单元中的其他任何标识符重复REALA(10)INTEGERA(2,3)×注意(1)下标必须是整型常量或整型常量表达式(2)不能超出数组定义的范围INTEGERcount(-3:3)!声明一个一维整型数组,有7个数组元素INTEGERweek(0:6)!声明一个一维整型数组,有7个数组元素REALsc(-5:-1,5:9)!声明一个二维实型数组,有25个数组元素REALar(2:5,-1:2,4)!声明一个三维实型数组,有64个数组元素注意:(1)在程序中,一个数组名只能被定义一次,而且定义数组的语句必须出现在所有可执行语句之前。(2)定义数组时,维说明符中的下标下界和下标上届必须是整型常量或整型常量表达式,且上界的值大于下界的值。(3)数组声明中,维下界可以为1,维下界为1可缺省。(4)用DIMENSION语句定义数组时,按I—N原则确定数组元素的类型,也可以用类型说明语句对数组惊醒显式说明,这时对数组说明的DIMENSION语句应放在前面,类型说明语句放在其后。(5)数组声明中,出现::,才能在声明语句中给数组赋初值。3.用类型声明语句和DIMENSION属性进行数组声明FORTRAN90在类型声明语句中引入DIMENSION属性,将类型声明语句和DIMENSION语句合二为一,通过DIMENSION属性进行数组声明。一般格式是:类型声明符,DIMENSION(维说明表)::数组声明表下面给出合法的数组声明:INTEGER,DIMENSION(3)::num,totalREAL,DIMENSION(-5:-1,5:9)::sc,jp数组num和total为整型一维数组。数组sc和jp为实型二维数组。INTEGER,DIMENSION(5)::S=(/45,78,85,55,95/)必须出现::,可给数组赋初值。说明:①所声明数组的类型由类型声明符确定。所声明数组的维数及维的上下界由DIMENSION属性后的维说明表确定。符号::必须出现。②数组声明表中数组,一般不在给出维说明表,这时数组的维数和维的上下界由DIMENSION属性给出的维说明表确定。当一些数组有相同的维说明时采用这种数组声明比较简洁。FORTRAN90也允许给出某个数组的特定维说明,改变DIMENSION属性的维说明。INTEGER,DIMENSION(3)::num,total,price(4,5)数组num和total由DIMENSION属性维说明确定为整型一维数组。数组price由自身维说明确定为整型二维数组。③采用DIMENSION属性声明数组,在数组声明时可以赋初值。INTEGER,DIMENSION(3)::num=(/12,23,34/)数组num被赋予3个初值,num(1)=12,num(2)=23,num(3)=34。1.若有语句:INTEGERB(-1:2,3:7),则数组B中所包含的元素个数为()2.下面关于数组说明语句的正确描述是()A在数组说明语句的维说明符中,下标的上、下界只能是整型常量B在数组说明语句的维说明符中,下标的上、下界可以是整型常量或实型常量C在数组说明语句的维说明符中下标的上、下界可以是整型常量或已赋值的整型变量D在数组说明语句的维说明符中下标的上、下界必须是整型常量或整型常量表达式20D3.以下不正确的描述是()A不能在数组说明语句中对一个数组重复说明BDIMENSION语句可用来说明数组及数组的类型C同一程序单位中,对某个数组的定义只能有一次DDIMENSION语句是非执行语句B数组声明只是确定了一个数组的类型、维数和元素个数。在程序中需要引用数组的某个元素、某些元素和全部元素,或者给数组元素赋予新的值,数组元素可参与某种运算,可作为操作数放在表达式中。示例程序:INTEGERnum(-2:2),sum=0.0num(-2)=100;num(-1)=200;num(0)=300;num(1)=400;num(2)=500av1=(num(-2)+num(-1)+num(0)+num(1)+num(2))/5.0DOI=-2,2sum=sum+num(I)ENDDOav2=sum/5.0PRINT*,'av1=',av1PRINT*,'av2=',av2END三数组元素及其引用数组元素引用一般格式:数组名[(数组下标1{,数组下标2})]数组下标→[算术表达式]:[算术表达式]如:INTEGERid(10)id=25!等价id(1)=25;id(2)=25;…;id(10)=25id(1)=2*id(1);id(5)=3*id(5);id(10)=2*id(2)+3*id(9)id(2:4)=15;id(6:9)=35id(:10)=999!等价于id(1:10)=999步骤id(1)id(2)id(3)id(4)id(5)id(6)id(7)id(8)id(9)id(10)125252525252525252525250252525752525252512535015151575353535351254999999999999999999999999999999说明:①数组名必须是经数组声明语句声明的数组。②只给出数组名,不指定数组下标,表示引用数组的全部数组元素。③数组名后指定数组下标,下标个数由数组维数决定。若下标为一个算术表达式,则引用某个数组元素。若下标为用冒号间隔的二个算术表达式,则依次引用若干数组元素,冒号前表达式指定第一个引用的数组元素,冒号后表达式指定最后一个引用的数组元素,这种数组元素引用称为数组片段引用。注(1)引用数组元素时,数组元素的下标可以是任意的表达式.如果数组下标是实型表达式,则表达式的值将自动取整。例如:A(I),B(J+K),C(X*SIN(X)+3)下面两个赋值语句等价:id(2.5)=25id(2)=25下面语句是合法的:id(sin(0.315)*5+1)=18id(i+5)=75(2)引用数组元素时,数组元素的下标值必须在维说明所指定的上下界范围内,否则出错。例如:DIMENSIONA(10)DO10I=1,10A(I)=I10CONTINUEWRITE(*,*)I,A(I)三元下标(FORTRAN90新增)三元下标用三个值分别代表数组片段的下界,上界和步长。其一般形式为:[下界]:[上界][:步长]。如果省略下界,缺省值为数组相应维的下界;如果省略上界,缺省值为数组相应维的上界;如果省略步长,缺省值为1。如果下标都省略了则缺省片段为这个维的全长。例:REALA(10)A(1:5:2)=3.0!把元素A(1),A(3),A(5)置为3.0A(:5:2)=3.0!把元素A(1),A(3),A(5)置为3.0,因为缺省下界为1A
本文标题:FORTRAN程序设计第七章
链接地址:https://www.777doc.com/doc-3216604 .html