Fortran数组之详细介绍

上传人:ning****hua 文档编号:243014846 上传时间:2024-09-13 格式:PPT 页数:30 大小:282.50KB
返回 下载 相关 举报
Fortran数组之详细介绍_第1页
第1页 / 共30页
Fortran数组之详细介绍_第2页
第2页 / 共30页
Fortran数组之详细介绍_第3页
第3页 / 共30页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第七章 数组,数组的概念,数组的说明与引用,数组元素的存储结构,数组的输入输出,给数组赋初值,数组的应用,7.1,数组的概念,数组:把具有相同数据类型的一批数据看成一个整体,INTEGER,PARAMETER:N=5,INTEGER I,REAL P(N),AVER=0,DO I=1,N,READ(*,*) P(I),AVER=AVER+P(I),END DO,AVER=AVER/N,DO I,N,PRINT(*,*) P(I)-AVER,END DO,END,7.2,数组的说明与引用,一、数组的说明,1.,用,DIMENSION,语句说明数组,格式:,DIMENSION,数组说明符,数组说明符,数组说明符:,数组名,(,维说明符, ,维说明符,),维说明符的一般形式是:,维下界,:,维上界,下界为,1,时,可以省略不写,冒号也省略 。,维下界和上界都只能是,整型,常量,表达式。维上界的值必须大于维下界的值。,例:,IMPLICIT INTEGER(A-C), REAL(I,J),DIMENSION B(3:15), IX(10),注意:,(1) DIMENSION,语句在程序单位的可执行语句之前。,(2),用,DIMENSION,语句说明数组时,需用类型说明语句或,IMPLICIT,语句指明数组的类型,否则数组的类型服从,I-N,规则。,例:,DIMENSION JU(20),NAME(-10:10,1:2),REAL JU,CHARACTER NAME,一维实型数组,JU,,有,20,个元素。二维字符型数组,NAME,,共有,42,个元素,每个元素的定义长度为,1,。,格式:,类型符, DIMENSION(,维说明符,维说明符,) :,数组名,数组名,2.,用类型说明语句说明数组,格式:,类型符 数组说明符, ,数组说明符,例如:,CHARACTER*6 CH(-10:10,5:9)*8,REAL KK(8),REAL(8) A(30),3.,用,DIMENSION,语句和类型说明语句同时说明数组,例如:,REAL(8),DIMENSION(0:10) : A,B,C,INTEGER,DIMENSION(4,5) : D,E,三个双精度型数组,A,B,C,,各含有,11,个元素。两个整型数组,D,E,,各含有,20,个元素。,例如:,REAL,DIMENSION(0:10) : A,B(20),C(4,5,3),说明,A,为,A(0:10),,而,B,为,B(20),,,C,为,C(4,5,3),。,以数组名后面的维说明为准。,数组名,(,下标, ,下标,),二、数组元素的引用,其中,1:5:2,的含义是从,1,变化到,5,,每次增加,2,。,三元表达式的形式是: 初值,:,终值,:,步长,其中步长为,1,时,步长可以省略。,允许对数组进行整体操作,例如:,INTEGER , DIMENSION(1:5) : A,A(:)=0,!或写成,A=0,,将,A,的全部元素赋为,0,INTEGER , DIMENSION(4,5) : A,A(:,:)=10,!或写成,A=10,,将,A,的全部元素赋为,10,A(:,1:5:2)=470,!再将,A,第,1,3,5,列元素赋为,470,7.3,数组元素的存储结构,B(1,1),B(2,1),B(3,1),B(2,4),B(3,4),B(1,2),B(3,2),B(2,2),A(2),A(3),A(4),A(10),A(1),例:,INTEGER A(10),B(3,4),数组元素按列存放,7.4,数组的输入输出,一、 使用,DO,循环输入输出数组元素,INTEGER :I, J,REAL: MAT(2, 3),DO I=1, 3,DO J=1, 2,READ(*,*) MAT(J, I),END DO,END DO,DO I=1, 2,DO J=1, 3,WRITE(*, 10) MAT(I, J),END DO,END DO,10 FORMAT(1X, F6.2),END,特点:每执行一个输入语句输入一个数组元素值,(,一个数组元素值组成一个输入记录,),。,每执行一个输出语句输出一个数组元素值,(,每一行输出一个数组元素值,),。,数组元素按照在内存中的排列顺序一次全部输入输出。,二、以数组名作为输入输出项,INTEGER W(3, 3),READ(*,*) W,!,按列的顺序输入,WRITE(*, 10) W,!,按列的顺序输出,10 FORMAT(1X, 3I3),输入:,1,,,4,,,7,,,2,,,5,,,8,,,3,,,6,,,9,1 2 3,4 5 6,7 8 9,例:将矩阵存放在数组中并输出。,输出:,147,258,369,三、用隐,DO,循环对数组元素进行输入输出,既可灵活控制输入输出元素的顺序和个数,又能通过执行一次输入输出语句完成。,隐,DO,循环的形式:,(,输入,/,输出表, i=e1, e2 , e3 ),例:,WRITE(*,*) (3, 4, I=1, 3),等价于:,WRITE(*,*) 3, 4, 3, 4, 3, 4,例:,WRITE(*,100) ( I, A(I), I=1, 10, 2),100 FORMAT( 1X, 5( I2, I4 ),隐,DO,循环可以多层嵌套。,INTEGER W(3, 3),READ(*,*)W,WRITE(*, 10)(,(,W( I, J ),J=1, 3,),I=1, 3,),10 FORMAT(1X, 3I3),内循环,外循环,输出:,W(1, 1) W(1, 2) W(1, 3),W(2, 1) W(2, 2) W(2, 3),W(3, 1) W(3, 2) W(3, 3),通过内外循环的顺序可控制输入输出顺序,注意以下两种方法的差异:,WRITE(*,*) (A(I), I=2, 14, 3),一次输出,A(2),、,A(5),、,A(8),、,A(11),和,A(14),的值。,DO I=2, 14, 3,WRITE(*,*)A(I),输出,5,次,END DO,7.5,给数组赋初值,例,: REAL PP(6),COMPLEX*8 LPP,INTEGER, DIMENSION(20) : A,DATA PP, LPP/6*0, (8.0, -89)/,DATA(A(I),I=1,20,2)/10*1/, (A(I), I=2, 20, 2)/10*0/,一、使用,DATA,语句赋初值,DATA,项目表,/,常量表,/,项目表,/,常量表,/,项目表:变量名、数组名、数组元素名、,字符子串名和隐,DO,循环。,与常量 个数、类型、顺序一一对应。,DATA,语句可以放在,END,语句之前任何位置。在程序编译阶段赋初值。,二、使用数组赋值符赋初值,格式:数组名,=(/,取值列表,/),例:,INTEGER W(6),W=(/3,0,9,45,34,2/),!用数组名给数组赋值,LOGICAL L(3),K=89,L=(/.TRUE., K+1K, .FALSE. .AND. .TRUE./),WRITE(*, 10) (L(I), I=1, 3),10 FORMAT(1X, 3L3),END,程序输出为: ,TTF,例:,INTEGER PP(-1:8),PP=(/3, 0, (i, i=1, 9, 2), 45, 34, 2/),WRITE(*,10) pp,10 FORMAT(1X,10I3),END,输出结果为:,3,0,1,3,5,7,9,45,34,2,implicit none,integer : a(10),integer: m, n, k, temp,do k =1, 10,read(*,*) a(k),end do,m=1; n=1,do k=2, 10,if (a(m)a(k) n=k,end do,temp=a(1); a(1)=a(m); a(m)=temp,temp=a(10); a(10)=a(n); a(n)=temp,write(*,*) (a(k), k=1, 10),end,P110,例,7.2,从键盘输入,10,个整数存入一个一维数组,然后将数组最大值与第一个元素互换,最小值与最后一个元素互换,其余元素不变。,PROGRAM LETTER,CHARACTER CH,INTEGER:LEN (5),INTEGER COUNT, J,DO J=1,5,LEN(J)=0,END DO,DO COUNT=1, 100,READ(*,*)CH,IF (CH=A.OR.CH=a) THEN,LEN(1)=LEN(1)+1,ELSE IF(CH=E.OR.CH=e) THEN,LEN(2)=LEN(2)+1,ELSE IF(CH=I.OR.CH=i) THEN,LEN(3)=LEN(3)+1,ELSE IF(CH=O.OR.CH=o) THEN,LEN(4)=LEN(4)+1,ELSE IF(CH=U.OR.CH=u) THEN,LEN(5)=LEN(5)+1,END IF,END DO,P111,例,7.3,输入,100,个字母,分别统计元音字母,A,、,E,、,I,、,O,、,U,出现的次数。,Parameter (n=10),Integer P(n), i, j, num, x,Logical flag,num=1,!,统计不同数据的个数,do i =1, n,read(*,*) x,flag=.true.,do j=1, num-1,if (p(j)=x) then,flag=.false. ; exit,end if,end do,if (flag) then,p(num)=x,num=num+1,end if,end do,write(*,*)(p(i), i=1, num-1),end,P111,例,7.4,从键盘输入,N,个整数存入数组,要求数组中无 重复数据。,!,简单交换排序,integer(4) , parameter:n=10,integer(4) : x(n),integer: i, j, t,do i =1, n,read(*,*) x(i),end do,do i=1, n-1,do j=i+1, n,if ( x(i)x(j) then,t=x(i),;,x(i)=x(j),;,x(j)=t,end if,end do,end do,write(*,*) (x(i), i=1, n),end,I,从,1,变化到,N-1,X(I),与,X(J),互换,X(I)X(J)?,J,从,I+1,变化到,N,Y,N,P112,例,7.5,:将,N,个数从小到大顺序排列。,!,选择排序,PARAMETER(N=10),INTEGER, DIMENSION(N):X,INTEGER I, J, T, L,DO I=1, N,READ *, X(I),END DO,DO I=1, N-1,L=I,DO J=I+1, N,IF (X(L)X(J) THEN,L=J,ENDIF,ENDDO,T=X(I); X(I)=X(L); X(L)=T,ENDDO,WRITE(*,*)(X(I), I=1, N),END,I,从,1,变化到,N-1,X(I),与,X(J),互换,X(L)X(J)?,J,从,I+1,变化到,N,Y,N,L=I,L=J,!,冒泡排序,implicit none,integer(4) , parameter:n=10,integer(4) : x(n),integer: i, j, t,read(*,*) (x(i), i=1, n),do i=1, n-1,do j=1, n-I,if ( x(j)x(j+1) then,t=x(j),x(j)=x(j+1),x(j+1)=t,end if,end do,end do,write(*,*) (x(i),i=1,n),end,I,从,1,变化到,N-1,X(J),与,X(J+1),互换,X(J)X(J+1)?,J,从,1,变化到,N-I,Y,N,P117,例,7.8,数据检索问题。设有,N,个数已存在数组,A,中,要找的数据为,X,。,PARAMETER(N=10),INTEGER A(N), I, X,DO I=1, N,READ *, A(I),ENDDO,READ *, X,DO I=1, N,IF (A(I)=X) THEN,EXIT,ENDIF,ENDDO,IF ( IN ) THEN,PRINT *, This data has not been found.,ELSE,PRINT *, This data has been found. It is A(, I, ).,ENDIF,END,P119,例,7.9,设有一个,45,的矩阵:,2 6 4 9 -13,5 -1 3 8 7,12 0 4 10 2,7 6 -9 5 3,求,(1),矩阵所有元素之和及平均值。,(2),保留所有大于平均值的元素,其余元素清零。,INTEGER A(4, 5),DATA A/2,5,12,7,6,-1,0,6,4,3,4,-9,9,8,10,5,-13,7,2,3/,SUM=0,DO I=1, 4,DO J=1, 5,SUM=SUM+A(I, J),ENDDO,ENDDO,AVERAGE=SUM/(4*5),PRINT *, Sum, SUM,PRINT *, Average, AVERAGE,DO I=1, 4,DO J=1, 5,IF (A(I, J) ABS(X(I, K) THEN,K=J,END IF,ENDDO,WRITE(*,*) I, K, X(I, K),ENDDO,END,integer a(11),integer x, i, j,data (a(i), i=1, 10)/1,3,5,7,9,11,13,15,17,19/,Read *, x,i=1,do while(i=a(i),i=i+1,enddo,if(i=10)then,do j=10, i, -1,a(j+1)=a(j),enddo,a(i)=x,else,a(11)=x,endif,write(*, 10)a,10 format(1x, 11I4),end,P124 2,有一个已排好序的数组,今输入一个书。要求按原来排序的规律将它插入数组中。,integer a(11),integer x, i, j,data (a(i), i=1, 10)/1, 3, 5, 7, 9, 11, 13, 15, 17, 19/,read*,x,do i=1, 10,if(x=a(i)exit,enddo,if(ia(max)max=i,enddo,t=a(1); a(1)=a(max); a(max)=t,min=1,!最小元素下标,do i=2, n,if(a(i)max) max=a(i, j),if(a(i, j)min) min=a(i, j),enddo,enddo,print*, max=, max, min=, min,end,P124 7,求,3*4,矩阵中的最大元素和最小元素。,character *20 a(20),integer i, maxlen,maxlen=1,read(*,10) a(maxlen),do i=2, 20,read(*, 10) a(i),if(ichar(a(i)(1:1)=32)exit,if(len_trim(a(maxlen)len_trim(a(i)maxlen=i,enddo,print*,a(maxlen),10 format(A),end,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!