Fortran数组之详细介绍.ppt

上传人:xt****7 文档编号:17039110 上传时间:2020-11-07 格式:PPT 页数:30 大小:282.50KB
返回 下载 相关 举报
Fortran数组之详细介绍.ppt_第1页
第1页 / 共30页
Fortran数组之详细介绍.ppt_第2页
第2页 / 共30页
Fortran数组之详细介绍.ppt_第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 例:将矩阵存放在数组中并输出。 输出: 1 4 7 2 5 8 3 6 9 三、用隐 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 程序输出为: T T F 例: INTEGER PP(-1:8) PP=(/3, 0, (i, i=1, 9, 2), 45, 34, 2/) WRITE(*,10) pp 10 FORMAT(1X,10I3) END 输出结果为: 301357945342 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 设有一个 4 5的 矩阵: 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交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!