版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Visual Fortran 90 程序设计7.4.3 对对数组进行操作的内在函数数组进行操作的内在函数 Fortran90提供了丰富的数组操作函数,但它们的提供了丰富的数组操作函数,但它们的函数值可函数值可以是数组,但不一定全是数组。以是数组,但不一定全是数组。(1)函数值个数)函数值个数2,函数值一定为数组函数值一定为数组(2)函数值个数)函数值个数=1,一般,一般函数值不是数组,函数值不是数组, 但但maxloc、minloc、shape函数值是数组函数值是数组 1 1、SIZESIZE( (数组名数组名,DIM=n),DIM=n) 求数组大小求数组大小( (数组元素的总数数组元素的总数
2、) )2 2、MAXVALMAXVAL( (数组名数组名,DIM=n,MASK=,DIM=n,MASK=数组逻辑表达式数组逻辑表达式) 求数组的最大值元素求数组的最大值元素3 3、MINVALMINVAL( (数组名数组名,DIM=n,MASK=,DIM=n,MASK=数组逻辑表达式数组逻辑表达式) 求数组的最小值元素求数组的最小值元素4 4、MAXLOCMAXLOC( (数组名数组名,DIM=n,MASK=,DIM=n,MASK=数组逻辑表达式数组逻辑表达式) 求数组的最大值元素位置求数组的最大值元素位置5 5、MINLOCMINLOC( (数组名数组名,DIM=n,MASK=,DIM=n,
3、MASK=数组逻辑表达式数组逻辑表达式) 求数组的最小值元素位置求数组的最小值元素位置6、 SUM(数组名数组名,DIM=n,MASK=数组逻辑表达式数组逻辑表达式) 求数组各元素之和求数组各元素之和常用数组内在函数常用数组内在函数 MAXLOCMAXLOC、MINLOCMINLOC函数值一定是数组函数值一定是数组选项的作用:选项的作用:1 1、DIM=nDIM=n选中哪一维来求函数值选中哪一维来求函数值 DIM=可省略不写可省略不写 2、 MASK=数组逻辑表达式数组逻辑表达式起屏蔽作用起屏蔽作用 凡满足条件的元素求其函数值,凡满足条件的元素求其函数值, 不满足条件的元素则被屏蔽在外。不满足
4、条件的元素则被屏蔽在外。例如:例如: SUM(A) SUM(A,2) SUM(A,MASK=A0) SUM(B,1,MASK=B0)选项选项1: DIM=1:选中行维,分别按列求和:选中行维,分别按列求和 DIM=2:选中列维,分别按行求和:选中列维,分别按行求和 DIM=3:选中页维,分别按行列求和:选中页维,分别按行列求和选项选项2:凡满足条件的元素求和凡满足条件的元素求和 没有满足没有满足MASK条件的元素时,结果为条件的元素时,结果为0A中每列大于中每列大于0的元的元素之和素之和,函数值是数函数值是数组组A中大于中大于0的所有元的所有元素之和素之和,函数值不是函数值不是数组数组INTE
5、GER,DIMENSION(1:2,1:3):A1 2 34 5 6121 2 3INTEGER,DIMENSION(1:2,1:3,1:2):B1 2 34 5 67 8 910 11 12 1 28 10 1214 16 18例例1:阅读下列程序,写出运行结果:阅读下列程序,写出运行结果PROGRAM mainIMPLICIT NONEINTEGER,DIMENSION(2,3,2):MINTEGER,DIMENSION(2,2):SM=RESHAPE(/1,2,3,4,5,6,7,8,9,1,&2,3/),(/2,3,2/)S=SUM(M,2,MASK=M3)PRINT*,SEN
6、D 程序阅读方法:程序阅读方法:利用数组逻辑结利用数组逻辑结构,跟踪处理结构,跟踪处理结果果答案:答案:5 10 16 8 16 8函数值是函数值是数组数组按列序输按列序输出出练习练习1:阅读下列程序,写出运行结果:阅读下列程序,写出运行结果PROGRAM mainIMPLICIT NONEINTEGER,DIMENSION(2,-1:1,2):aINTEGER:ia= RESHAPE(/(i, i=1,12)/),(/2,3,2/)print*, sum(a,3)end答案:答案:8 10 12 14 16 18程序阅读方法:程序阅读方法:利用数组逻辑结利用数组逻辑结构,跟踪处理结构,跟踪处
7、理结果果例例:INTEGER,DIMENSION(2,3):A size(a) size(a,DIM=1) size(a,2) 函数值均不是数组函数值均不是数组DIM=1:选中行维选中行维,表求每一列的大小表求每一列的大小(行数行数);DIM=2:选中列维选中列维,表求每一行的大小表求每一行的大小(列数列数)。例例: INTEGER,DIMENSION(2,3):A MAXVAL(A) MAXVAL(A,2) MAXVAL(A,1,MASK=A2)DIM=1:选中行维选中行维,求每列的最大值求每列的最大值DIM=2:选中列维选中列维,求每行的最大值求每行的最大值函数值不是函数值不是数组数组函数
8、值是数组函数值是数组例:例:INTEGER,DIMENSION(2,3):A INTEGER,DIMENSION(2):B A= RESHAPE(/1,2,6,3,4,5/),(/2,3/) B=MAXLOC(A,A3)PRODUCT(A, 2, A3) 数组内在函数数组内在函数(续续) 8 8、 shape ( (数组名数组名) ) 求数组的形状求数组的形状 形状:各维维长的序列形状:各维维长的序列 判定维数,求各维维长判定维数,求各维维长d2-d1+1 函数值为数组函数值为数组 数组内在函数数组内在函数(续续) 练习练习2:阅读下列程序,写出运行结果:阅读下列程序,写出运行结果IMPLIC
9、IT NONEINTEGER,DIMENSION(0:1,-1:1,2):):MINTEGER,DIMENSION(3):AM=RESHAPE(/1,2,3,4,5,6,7,8,9,&1,2,3/),),(/2,3,2/)A= SHAPE(M)PRINT*,AEND答案:答案:2 3 2例例2:阅读下列程序,写出运行结果:阅读下列程序,写出运行结果PROGRAM MAINIMPLICIT NONEINTEGER,DIMENSION(3):MINTEGER,DIMENSION(1):AM=(/1,2,3/)A= SHAPE(M)PRINT*,AEND函数值为数组函数值为数组同同MAXLO
10、CMAXLOC、MINLOCMINLOC答案:答案: 3练习练习3:阅读下列程序,写出运行结果:阅读下列程序,写出运行结果PROGRAM mainINTERFACESUBROUTINE S(b)INTEGER,DIMENSION(:,:):bEND SUBROUTINEENDINTERFACEINTEGER,DIMENSION(2,3):aa=RESHAPE(/1,2,3,4,5,6/),(/2,3/)Call s(a)EndSUBROUTINE S(b)INTEGER,DIMENSION(:,:):bPrint*,shape(b); End答案:答案: 2 3假定形状数组:假定形状数组:调用
11、时形状取调用时形状取对应实元的形对应实元的形状状9 9、 DOT_PRODUCT ( (数组名数组名1, 1, 数组名数组名2)2) 求两个求两个同形状同形状的的一维数组一维数组(向量)的点积(向量)的点积 点积:点积:REALREAL,DIMENSION(3):aDIMENSION(3):aREALREAL,DIMENSION(0:2):bDIMENSION(0:2):bDOT_PRODUCT (a,b): a(1)(a,b): a(1)* *b(0)+a(2)b(0)+a(2)* *b(1)+a(3)b(1)+a(3)* *b(2)b(2) 对应位置相乘再相加对应位置相乘再相加 数组内在函
12、数数组内在函数(续续) 练习练习4:阅读下列程序,写出运行结果:阅读下列程序,写出运行结果PROGRAM MAINIMPLICIT NONEINTEGER(2),DIMENSION(:),ALLOCATABLE:A,BINTEGER(2):CALLOCATE(A(1:5),B(1:5)A=(/1,2,3,4,5/);B=(/5,4,3,2,1/)C=DOT_PRODUCT(A,B)WRITE(*,FMT=(I5)CEND答案:答案:35程序阅读方法:程序阅读方法:利用数组逻辑结利用数组逻辑结构,跟踪处理结构,跟踪处理结果果1010、 UBOUND(数组名(数组名,DIM=n) LBOUND(数
13、组名(数组名,DIM=n) 求数组中维的上下界求数组中维的上下界 DIM=1DIM=1:选定:选定行行维,求维,求行行维界维界 DIM=2DIM=2:选定:选定列列维,求维,求列列维界维界 DIM=3DIM=3:选定:选定页页维,求维,求页页维界维界 数组内在函数数组内在函数(续续) 练习练习5 5、单项选择题、单项选择题若数组说明语句为:若数组说明语句为:REAL,DIMENSION(-2:2,-4:4, -3:3):aREAL,DIMENSION(-2:2,-4:4, -3:3):a则则UBOUNDUBOUND(a ,DIM=2)a ,DIM=2)的值是的值是_。A. 2 B. 4 C.
14、9 D. 3A. 2 B. 4 C. 9 D. 3答案:答案:B 其它函数:参见附录其它函数:参见附录2虚元的种类:只能为变量名、数组名、过程名。虚元的种类:只能为变量名、数组名、过程名。 7.6.4 数组作为虚元数组作为虚元 复习:虚元为变量名复习:虚元为变量名 1 1、对应的实元可为同类型的变量名、常量或表达、对应的实元可为同类型的变量名、常量或表达式、数组元素式、数组元素2 2、虚实结合规则:、虚实结合规则:传送地址传送地址,虚元、实元共享同,虚元、实元共享同一存储单元一存储单元复习:虚元为子程序名复习:虚元为子程序名 1 1、对应的实元可为同类型的固有函数名、对应的实元可为同类型的固有
15、函数名、 外部过程名外部过程名2 2、虚实结合规则:、虚实结合规则:等价等价,虚,虚子程序子程序用实用实子程序子程序替代替代虚元为数组名虚元为数组名 1 1、对应的实元可为同类型的数组名、数组元素、对应的实元可为同类型的数组名、数组元素名、数组片段。名、数组片段。注意:对应数组的维数、维界可以不同注意:对应数组的维数、维界可以不同2 2、虚实结合规则:、虚实结合规则:传送地址传送地址1 1、当、当虚实都为虚实都为数值型或逻辑型数值型或逻辑型数组名数组名时:时:实数组实数组将第一个元素的地址将第一个元素的地址传送给虚数组的第一个传送给虚数组的第一个元素,元素,由于数组在内存连续存放,其它元素按内
16、存顺序结由于数组在内存连续存放,其它元素按内存顺序结合(二维为合(二维为列序列序)注意:在虚实结合时,虚参数数组的最后一个元素注意:在虚实结合时,虚参数数组的最后一个元素必须落在实参数数组的范围内,否则将会出现意必须落在实参数数组的范围内,否则将会出现意想不到的错误。想不到的错误。虚实结合传送地址的方式虚实结合传送地址的方式1 例:下标不同时的对应关系:例:下标不同时的对应关系:PROGRAM MAIN1REAL,DIMENSION(1:8):ACALL SUB1(A)END PROGRAM MAIN1SUBROUTINE SUB1(B)REAL,DIMENSION(-1:5):BEND SU
17、BROUTINE SUB1主程序主程序A(1)A(2)A(3)A(4)A(5)A(6)A(7)A(8)存储单元存储单元子程序子程序B(-1)B(0)B(1)B(2)B(3)B(4)B(5)例:维数不同时的对应关系:例:维数不同时的对应关系:PROGRAM MAIN2REAL,DIMENSION(1:3,2:4):ACALL SUB2(A)END PROGRAM MAIN2SUBROUTINE SUB2(B)REAL,DIMENSION(0:8):BEND SUBROUTINE SUB2 主程序主程序A(1,2)A(2,2)A(3,2)A(1,3)A(2,3)A(3,3)A(1,4)A(2,4)
18、A(3,4)存储单元存储单元子程序子程序B(0)B(1)B(2)B(3)B(4)B(5)B(6)B(7)B(8)例例1:阅读下列程序,写出运行结果阅读下列程序,写出运行结果INTEGER,DIMENSION(2,3):AA=RESHAPE(/1,2,3,4,5,6/),(/2,3/)CALL S(A)PRINT*,AENDSUBROUTINE S(B)INTEGER,DIMENSION(4):BB=B+1END 实元为数组名实元为数组名答案:答案:2 3 4 5 5 6对应数组对应数组的维数、的维数、维界可以维界可以不同不同程序阅读方法:程序阅读方法:利用数组逻辑结利用数组逻辑结构,跟踪处理结
19、构,跟踪处理结果果练习练习1 1:阅读下列程序,写出运行结果:阅读下列程序,写出运行结果INTEGER,DIMENSION(3,3):AA=RESHAPE(/1,2,3,4,5,6,7,8,9/),(/3,3/)CALL S(A)PRINT*,AENDSUBROUTINE S(B)INTEGER,DIMENSION(2,2):BB=B+1END 答案:答案:2 3 4 5 5 6 7 8 9元素按列元素按列序结合序结合2 2、当虚元为数组名,实元为数组元素时:、当虚元为数组名,实元为数组元素时:实数组将实数组将指定的数组元素的地址指定的数组元素的地址传送给虚数组的第传送给虚数组的第一个元素,一
20、个元素,其它元素按内存顺序结合(二维为其它元素按内存顺序结合(二维为列序列序)虚实结合传送地址的方式虚实结合传送地址的方式2 例:实参数是数组元素时的对应关系:例:实参数是数组元素时的对应关系:PROGRAM MAIN3REAL,DIMENSION(1:8):ACALL SUB3(A(4)END PROGRAM MAIN3SUBROUTINE SUB3(B)REAL,DIMENSION(0:3):BEND SUBROUTINE SUB3主程序主程序A(1)A(2)A(3)A(4)A(5)A(6)A(7)A(8)存储单元存储单元子程序子程序B(0)B(1)B(2)B(3)例例2:阅读下列程序,写
21、出运行结果:阅读下列程序,写出运行结果INTEGER,DIMENSION(2,3):AA=reshape(/1,2,3,4,5,6/),(/2,3/)CALL S(A(2,1)PRINT*,AENDSUBROUTINE S(B)INTEGER,DIMENSION(2,2):BB=B+1END 实元为数组元素名实元为数组元素名答案:答案: 1 3 4 5 6 6 3 3、当虚元为数组名,实元为数组片段时:、当虚元为数组名,实元为数组片段时: 数组片段构成一个新的数组数组片段构成一个新的数组 新的实数组将第一个元素的地址新的实数组将第一个元素的地址传送给虚数组的传送给虚数组的第一个元素,第一个元素
22、, 其它元素按内存顺序结合(二维为列序)其它元素按内存顺序结合(二维为列序)虚实结合传送地址的方式虚实结合传送地址的方式3 例例3:阅读下列程序,写出运行结果:阅读下列程序,写出运行结果INTEGER,DIMENSION(3,3):AA=reshape(/1,4,7,2,5,8,3,6,9/), (/3,3/)CALL S(A(3:2:-1,1:2)ENDSUBROUTINE S(X)INTEGER,DIMENSION(4):XPRINT*,XEND实元为数组实元为数组片段片段形成新数组形成新数组虚数组可为假定大小数组和可调数组等多种情况。虚实结合方虚数组可为假定大小数组和可调数组等多种情况。
23、虚实结合方式同常界数组式同常界数组答案:答案: 7 4 8 5 如函数值为数组如函数值为数组, ,主调程序中主调程序中必须写接口块必须写接口块例例1:1:假设有两个形状相同(假设有两个形状相同(3 3行行4 4列)的数组列)的数组A A和和B B,编写求,编写求A+BA+B的函数子程序,并把的函数子程序,并把A+BA+B的值作为函数值。的值作为函数值。分析:函数子程序的传入数据分析:函数子程序的传入数据数组数组A A和和B B 函数子程序的传出数据函数子程序的传出数据数组数组C=A+BC=A+B补充补充 数组可作为函数过程的函数值数组可作为函数过程的函数值 Function f(a,b)res
24、ult(c)Implicit noneInteger,dimension(3,4):a,b,cC=a+bEndProgram mainImplicit noneInterface Function f(a,b)result(c) Implicit none Integer,dimension(3,4):a,b,c endendinterfaceInteger,dimension(3,4):a,b,cInteger:I,J;read*,a;read*,bC=f(a,b)Do I=1,3Print*,(c(I,j),j=1,4)Enddo; end函数值函数值为数组为数组主调程主调程序必须序必须写
25、接口写接口数组中写接口块数组中写接口块: :函数值为数组函数值为数组; ;假定形状数组假定形状数组7.7数组的应用举例数组的应用举例 一、累加和算法一、累加和算法 算法复习:算法复习:重复执行重复执行S S新新=S=S原原+ +通项通项 循环编程步骤:循环编程步骤:A A、重复语句、重复语句 B B、选择、选择DODO结构结构 C C、循环初值的确定、循环初值的确定 数组累加和算法数组累加和算法 1 1、元素法:、元素法: 算法:算法:重复执行重复执行S S新新=S=S原原+ +元素通项元素通项 元素通项:元素通项: 一维一维AA(I I) 二维二维AA(I I,J J)例例1 1: 输入输入
26、1010个整数,计算其累加和。个整数,计算其累加和。 一批数一批数据的处据的处理引入理引入数组数组PROGRAM MAINIMPLICIT NONEINTEGER,DIMENSION(10):AINTEGER:I,SREAD*,A程序结构:程序结构:单位定义单位定义说明所有数组说明所有数组输入数组输入数组数组的处理数组的处理输出数组输出数组单位结束语句单位结束语句元素法元素法Print*,SEND S=S+A(I)S=0DO I=1,10ENDDO阅读程序阅读程序验证验证练习练习1 1、求、求2 23 3二维数组的所有元素之和二维数组的所有元素之和INTEGER,DIMENSION(2,3):
27、ADO I=1,2READ(*,*)(A(I,J),J=1,3)ENDDOS=0DO I=1,2 DO J=1,3 S=S+A(I,J) ENDDOENDDOPRINT*,S; END元素法元素法2 2、调用内在数组函数:、调用内在数组函数:SUMSUM求累加和求累加和INTEGER,DIMENSION(2,3):AINTEGER:SDO I=1,2 READ(*,*)(A(I,J),J=1,3)ENDDOS=sum(A)PRINT*,S END函数法函数法练习练习2 2:求:求5 56 6数组的每行元素之和数组的每行元素之和元素法元素法二重循环设计思想:先外后内,逐层细化二重循环设计思想:先
28、外后内,逐层细化DO I=1,5求第求第I I行的和行的和ENDDO求第求第I I行的和行的和S(i)S(i)S(i)=0DO J=1,6 S(i)=S(i)+A(I,J)ENDDO引入引入2个数组个数组阅读程序阅读程序验证验证 INTEGER,Dimension(5,6): AINTEGER,Dimension(5): sINTEGER:I,J DO I=1,5 Read(*,*)(A(I,J),J=1,6) ENDDODO I=1,5ENDDO ;PRINT*,S;END初值位置初值位置S(I)=0DO J=1,6 S(I)=S(I)+A(I,J)ENDDO求第求第I行行的和的和S(i)阅
29、读程序阅读程序验证验证求求5 56 6数组的每行元素之和数组的每行元素之和函数法函数法1、INTEGER,DIMENSION(5):SS=sum(a,DIM=2)2、INTEGER,DIMENSION(5):SDO I=1,5 S(I)=sum(a(I,1:6)ENDDO 函数值为数函数值为数组组二、求最大(小)值及其位置二、求最大(小)值及其位置 算法复习:算法复习: 引入变量,存放最大值元素及其位置引入变量,存放最大值元素及其位置 A A、赋初值(常用第一个元素或最小值)、赋初值(常用第一个元素或最小值) B B、所有元素与、所有元素与最大值最大值比较比较 例例2 2:输入输入1010个整
30、数,求个整数,求最大值及其最大值的序号。最大值及其最大值的序号。1 1、元素法:、元素法: 算法:一批数据引入数组算法:一批数据引入数组A A存放存放 引入引入BIGBIG存放最大值存放最大值 K K分别存放最大值的序号分别存放最大值的序号 A A、BIG=ABIG=A(1 1);); K=1K=1 B B、所有元素与最大值比较、所有元素与最大值比较循环结构循环结构 循环体:通项循环体:通项元素元素A A(I I)与最大值比较)与最大值比较 比较:比较:IFIF结构实现结构实现 利用数组求最大(小)值及其位置:利用数组求最大(小)值及其位置:PROGRAM MAINIMPLICIT NONEI
31、NTEGER,DIMENSION(10):AINTEGER:I,K,BIGREAD*,ABIG=A(1);K=1DO I=1,10IF(A(I)BIG)THEN BIG=A(I); K=IENDIFEnddoPrint*,BIG,K; END !见例7-14 例7-18二维数组元素法元素法IF(A(I)BIG)BIG=A(I)K=I阅读程阅读程序序验证验证2 2、调用内在数组函数:、调用内在数组函数:MAXVALMAXVAL、MAXLOCMAXLOCPROGRAM MAINIMPLICIT NONEINTEGER,DIMENSION(10):AINTEGER,DIMENSION(1):KINT
32、EGER:I,BIGREAD*,ABIG=MAXVAL(A)K=MAXLOC(A)Print*,BIG,K; ENDMAXLOC函数函数值一定是数组值一定是数组INTEGER,Dimension(5,6):ADOI=1,5Read(*,*)(A(I,j),j=1,6)ENDDODoI=1,5Amax=A(I,1);N=1Doj=1,6If(a(I,j)Amax)THENAmax=A(I,j)N=jendifENDDOwrite(*,*)Amax,NENDDOEND练习练习3 3:输入:输入5 56 6的矩阵,求出每行的最大值的矩阵,求出每行的最大值及其所在的列号。及其所在的列号。调用内在数组函
33、数法调用内在数组函数法: :INTEGER,DIMENSION(5):AMAX,NAMAX=MAXVAL(A,2)N=MAXLOC(A,2)1 1、用数组片段、用数组片段: : 引入一维数组引入一维数组C C C=A C=A(K,:);A(K,:)=A(1,:);A(1,:)=CK,:);A(K,:)=A(1,:);A(1,:)=C2 2、用元素循环:、用元素循环:引入简单变量引入简单变量T T, 交换交换A A(1 1,J J)与)与A A(K K,J J) 三、交换数组的两行(第一行与第三、交换数组的两行(第一行与第K行)行)交换第交换第J列的列的两个元素两个元素 DO J=1 DO J=
34、1,N N T=A T=A(1 1,J J) A A(1 1,J J)=A=A(K K,J J) A A(K K,J J)=T=T ENDDO ENDDO四、筛选有序置数四、筛选有序置数 例例3 3:将数组:将数组A A中能被中能被3 3整除的数,有序保存到数组整除的数,有序保存到数组B B中,中,输出输出B B。算法:只能用元素筛选法算法:只能用元素筛选法顺序比较顺序比较 1 1、从第一个元素开始比较、从第一个元素开始比较 如满足筛选条件,保存到数组如满足筛选条件,保存到数组B B的指定位置的指定位置 否则,下一个元素比较否则,下一个元素比较 2 2、 B B的位置有序变化的位置有序变化 引
35、入位置变量引入位置变量K K 初值初值: K=1: K=1 有序变化有序变化:K=K+1:K=K+1 IMPLICIT NONEINTEGER,DIMENSION(20):):A,BINTEGER:K,IREAD*,AK=1DO I=1,20 IF(MOD(A(I),),3)=0)THEN B(K)=A(I) K=K+1 ENDIFENDDOPRINT*,(,(B(i),),i=1,K-1)END !例!例7-16合并数组合并数组B大小同大小同A当前当前K中无值中无值有序:引入有序:引入变量变量K=1 K=K+1在A(1)到A(N)中求最小值的位置K,交换A(1)与A(K).在A(2)到A(N
36、)中求最小值的位置K,交换A(2)与A(K).在A(N-1)到A(N)中求最小值的位置K,交换A(N-1)与A(K). 例例4: 4: 输入输入N N个数个数(N100),(N100),要求按从小到大的要求按从小到大的顺序重新加以排列顺序重新加以排列. .五、排序五、排序 选择排序法选择排序法循环体循环体:A(I):A(I)到到A(N)A(N)中求中求K,K,交换交换A(I)A(I)与与A(K)A(K)排序次数排序次数I=1,2N-1I=1,2N-1重复:循环结构重复:循环结构 假设假设N=20PROGRAMS2INTEGER,PARAMETER:N=20INTEGER,DIMENSION(N
37、):AREAD(*,*)(A(I),),I=1,N)WAI:DOI=1,N-1排序次数:排序次数:N-1次次第第I次排序次排序K=INEI:DOJ=I+1,NIF(A(J)A(J)THENQ=A(I);A(I)=A(J);A(J)=QENDIFENDDONEIENDDOWAIWRITE(*,*)AEND!第!第154页页阅读程序阅读程序验证验证 基本思想:基本思想: 若对若对N N个数据按递增排序:个数据按递增排序:第一遍石沉大海:从第一遍石沉大海:从A A(1 1)-A-A(N N)两两比较)两两比较 如如A A(1 1)AA(2 2),交换两数,否则不变),交换两数,否则不变 ; 如如A
38、A(2 2) A A(3 3) ,交换两数,否则不变;,交换两数,否则不变; 如如A A(N-1N-1) A A(N N),交换两数,否则不变。),交换两数,否则不变。重复重复N-1N-1次排完次排完, ,或某一轮未发生交换排完。或某一轮未发生交换排完。石沉大海、冒泡排序法石沉大海、冒泡排序法 programS3INTEGER,parameter:N=30REAL,Dimension(N):ARead(*,*)(A(I),I=1,N)DoI=1,N-1 最多最多N-1次次石石沉大海沉大海第第I次次石沉大海石沉大海DoJ=1,N-1IF(A(J)A(J+1)THENQ=A(J);A(J)=A(J
39、+1);A(J+1)=QENDIFENDDOENDDOwrite(*,*)AENDIP=0IP=1IP为标志变量,无交换为标志变量,无交换IP=0,有交换,有交换IP=1每轮扫描开始时每轮扫描开始时IP=0。IF(IP=0)EXIT 两种方法:两种方法: 1 1、顺序查找;、顺序查找; 2 2、折半查找。、折半查找。 例例5:输入输入N个数,从中查找某个指定的数。个数,从中查找某个指定的数。六、查找六、查找 1顺序查找顺序查找 将一组数存入一维数组将一组数存入一维数组A A中,待查找数存入变量中,待查找数存入变量X X中,中,把把X X与与A A数组中的元素,数组中的元素,从头到尾逐一比较从头
40、到尾逐一比较, ,查找查找X X的值的值在在A A数组中是否存在。数组中是否存在。 设设N=30N=30INTEGER,Parameter:N=30INTEGER:A(N)INTEGER:X,IP,IRead(*,*)(A(I),I=1,N)Read(*,*)xIP=0IP为标志变量,为标志变量,未找到未找到IP=0,找到,找到IP=1开始时开始时IP=0。DoI=1,NIF(X=a(i)ThenWrite(*,*)a(i),i;IP=1EXITENDIFENDDO IF(IP=0)PRINT*,X, NO FINDEND!也可见例!也可见例7-13 只能对只能对有序数据有序数据进行查找,假设
41、数据按升序排进行查找,假设数据按升序排好后放在数组好后放在数组A A中,待查数据放在中,待查数据放在X X中。步骤如下:中。步骤如下:引入变量引入变量toptop查找区间起点查找区间起点 botbot查找区间终点查找区间终点(1 1)MID=MID=(top+bottop+bot)/2/2查找区间中点查找区间中点(2 2)比较)比较a a(midmid)与)与x x 相等,表示已找到相等,表示已找到 不等,区间缩短一半不等,区间缩短一半重复,直至找到或重复,直至找到或topbottopbot终止。终止。技巧:引入标志变量技巧:引入标志变量p=.true.p=.true.表示找到表示找到 p=.
42、false.p=.false.表示找不到表示找不到2. 折半查找法折半查找法(对分查找)(对分查找) 例例6 6:设:设5050个数据已按升序排列存放于数组个数据已按升序排列存放于数组A A中。中。X X为待查找的数。为待查找的数。TOPTOP和和BOTBOT分别表示查找区间的端点,分别表示查找区间的端点,MIDMID为查找为查找区间的中点,逻辑变量区间的中点,逻辑变量P P为标志变量。为标志变量。logical:pInteger,parameter:n=50Integer,dimension(n):aINTEGER:X,TOP,BOT,MIDRead*,aread(*,*)xp=.false.;top=1;bot=nDOwhile(top=bot.and.not.p)取 区 间 中取 区 间 中点点区间缩小一半区间缩小一半mid=(top+bot)/2if(x=a(mid)thenp=.true.;write(*,*)x,midelseif(xa(mid)thenbot=mid1elsetop=mid+1endifenddoIf(.not.p)print*,x,notfind end!见例!见例7-170 .120 .110 .100 .
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《核安全法规介绍》课件
- 2026中国职业运动员训练基地洗衣服务特殊需求分析报告
- 2026冰川矿泉水资源开发许可获取及环境保护平衡策略研究报告
- 2026泡芙制造行业分析行业竞争分析目前市场活动未来价值评估研究方向布局规划设计报告
- 2026全球医用敷料市场供需结构及发展趋势分析研究报告
- 机械能及其守恒定律教学
- 智慧人生教育讲堂简报
- 四年级数学(小数加减运算)计算题专项练习与答案汇编
- 2026矿泉水社群营销模式与私域流量运营报告
- 2026期刊杂志产业市场深度调研及发展趋势与投资前景预测研究报告
- 昭通市2026年市直事业单位公开选调工作人员(42人)笔试参考题库及答案解析
- 中证信用增进股份有限公司招聘笔试题库2026
- 小学六年级少先队建队日活动方案课件
- ISO9001-2026《质量管理体系-要求》正文与附录整合版(雷泽佳编辑-2026年9月)
- 重症医学科进修汇报
- 2025年下半年安徽交控驿达集团招聘3人笔试历年参考题库附带答案详解
- 山东青岛华通国有资本投资运营集团有限公司招聘笔试真题2025
- 工厂内部5s巡查制度
- GB/T 46588-2025精细陶瓷粉体压实性能的测定
- 脊柱解剖课件教学
- tb-10314-2021《邻近铁路营业线施工安全监测技术规程》内容解析
评论
0/150
提交评论