《Fortran程序设计5-数组.ppt》由会员分享,可在线阅读,更多相关《Fortran程序设计5-数组.ppt(57页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、七、数组 数组定义(基本使用)数组赋值与运算(内容设置)数组的保存规则 可变大小的数组及其它 数组的应用数组是科学和工程计算问题中常见的向量和矩阵的反映和概括。数组在FORTRAN程序中有着重要的意义,在批量大的情况下,如果不利用数组就失去了计算机的优越性。数组是另一种使用内存的方法,配置一大块内存空间,用以存储一批数据。数数组组是是类类型型相相同同的的一一组组标标量量数数据据的的有有序序集集合合,即要求这些数据都必须类型相同,并按某种确定方式排列。向量是一维数组,矩阵可看成是二维数组。向量是一维数组,矩阵可看成是二维数组。类型可以是整型、实型、双精度型、逻辑型等任何一种。类型可以是整型、实型
2、、双精度型、逻辑型等任何一种。数组定义数组定义声明方法(例):声明方法(例):DATATYPE ARRAYNAME(size1,size2,size3)如:如:real:uwnd(359,180,9,12)real:stat(99,2),integer:statnum(99)组成数组的每一个元素称为组成数组的每一个元素称为数组元素数组元素 数组的维数称为数组的维数称为秩秩(rank)(rank),F90规定数组最多可以有7维;在某一维中元素的个数称为该维的在某一维中元素的个数称为该维的长度长度(extent)(extent);数组中所有元素的个数称为数组的数组中所有元素的个数称为数组的大小大小
3、(size)(size),它等于各维的长度的乘积,数组的大小可以为0。数组的数组的形状形状(shape)(shape)取决于秩和每一维的长度取决于秩和每一维的长度每一每一维维的大小都由一个下界和一个上界来指定,之间以冒的大小都由一个下界和一个上界来指定,之间以冒号分开,即下界号分开,即下界:上界上界 维维界界表表达达式式是是整整型型的的数数学学表表达达式式,维维界界值值可可以以是是正正、负负或或零零,但但维维上上界界必必须须大大于于维维下下界界的的值值。维维长长上上界界-下下界界+1。声明数组时声明数组时下界可以省略,此时维下界为默认值下界可以省略,此时维下界为默认值1 声明方法(严谨):声明
4、方法(严谨):DATATYPE ARRAYNAME(下界下界:上界,上界,)如:如:real:uwnd(1:359,1:180,1:9,1:12)real:stat(1:99,1:2),integer:statnum(99)integer:stanum(0:98)数组(元素)的引用:数组(元素)的引用:例例 real:a(1:359)uwnd 数组名称,指整个数组 uwnd(2)指定下标,确切指定一个元素uwnd(7:10)引用数组的一部分元素uwnd(1:359:2)引用数组的部分元素(三元下标,分别表示:下界、上界和步长。三元下标只能算一个下标)数组片段:数组片段:数组片段是数组所有元素集
5、合的一个子集。数组片段的元素可以是数组中任意的元素,它们不需连续或遵循某个规则。数组中的所有元素和片段的数据类型和种别都相同。如果指定数组的所有下标则得到的是数组元素(即标量),如果只指定部分下标则结果是部分数组元素的集合,即数组片段,数组片段本身也是数组。例:REAL A(2,3,4)则 A(1,2,3)是数组元素,而 A(1:2,2,2),A(1,1,4:2:-1)都是数组片段 数组赋值与运算数组赋值与运算赋初值赋初值1、用DATA赋初值:data var/2、在声明变量时直接赋值(、在声明变量时直接赋值(必须一次给齐所有初值必须一次给齐所有初值)其它赋值举例:其它赋值举例:C1=(/4,
6、8,7,6/)!标量表示C2=(/B(I,1:5),B(I:J,7:9)/)!数组表示C3=(/(I,I=1,4)/)!隐DO循环C4=(/4,A(1:5),(I,I=1,4),7/)!混合表示INTEGER C(4)!可以用方括号代替括号和斜线,等价 C=(/4,8,7,6/)!(/之间不能有空格C=4,8,7,6 !与上等价INTEGER D(3)!下面两种格式等价D=(/1:5:2/)!三元下标格式D=(/(I,I=1,5,2)/)!隐DO循环格式数组的运算数组的运算基本运算基本运算 允许把整个数组或数组片段作为一个单独的对象进行运算允许把整个数组或数组片段作为一个单独的对象进行运算。所
7、有的。所有的算术运算符算术运算符(+,-,*,/,*)、逻辑运算符、逻辑运算符(如如.AND.,.OR.,.NOT.)和所有关系运算符和所有关系运算符(如如.LT.,.EQ.,.GT.),以及许多内在函数都可以,以及许多内在函数都可以接受数组名称作为参数并对数组元素逐一运算。接受数组名称作为参数并对数组元素逐一运算。例:INTEGER,DIMENSION(100):even,odd,plu,min,tim,div,squeven=(/(2*i,i=0,49)/);odd=(/(2*i+1,i=0,49)/)plu=even+oddmin=even-oddtim=even*odddiv=even
8、/oddsqu=even*2使用数组名作为参数的内在函数称为基本内在函数,例使用数组名作为参数的内在函数称为基本内在函数,例:REAL A(5),B(5),C(5)INTEGER D(5)DATA PI/3.14159265/A=(/(REAL(I I)*PI/180.,I I=1,5)/)B=COS(A);C=SQRT(A);D=CEILING(A*180.)当两个以上数组出现在赋值语句或表达式中时,数组的形状应该相同当两个以上数组出现在赋值语句或表达式中时,数组的形状应该相同(称为相容称为相容)。例:A(2,3),B(2,3),C(2:3,6:8)相容;而 D(4,5),E(5,4),F(
9、5,2,2)则不相容如果数组片段指定的部分相容,也可用于表达式和赋值如果数组片段指定的部分相容,也可用于表达式和赋值例:REAL A(5),B(4,7)A=20.;B=5.;A=A-B(2,1:5)数组与数组 数组的运算数组的运算两个数组作算术操作的结果仍是一个形状相同的数组,它的每个位置上元素的值是参与操作的相同位置上一对元素操作后的结果值 例如有数组A、数组B,形状如下:则执行赋值语句C=A+B后,数组C的值即为:对于其它内部操作,如+、-、*、/、*等,操作结果也是一个形状相同的数组。其每个位置上的元素值是参与操作的数组相同位置(而非下标)上的一对元素作相同操作的结果。相当于?相当于?数
10、组与标量 数组的运算数组的运算数组表达式允许数组与标量作算术运算 例:当A、B为形状相同的数组时,赋值语句A=B+2是合法的。即:数组与标量操作相当于数组内每一元素与该标量操作。数组内在函数 数组的运算数组的运算数组表达式中允许对数组求基本函数,其函数值仍是一个形状相同的数组,它的每个位置上的元素值就是被操作数组对应位置元素取该函数值 例:A、B为形状相同的一维数组,则语句B=SQRT(A)表示:B(1)=SQRT(A(1)、B(2)=SQRT(A(2),。do j=1,2do j=1,2 do i=1,2 do i=1,2 b(i,j)=a(2-i+1,2-j+1)b(i,j)=a(2-i+
11、1,2-j+1)end do end doend doend dop136:WHERE 命令命令 (95新添)新添)通过逻辑判断来使用数组的一部分元素多重判断FORALL 命令命令 (95新添)新添)隐含式循环使用数组的方法练习练习 设数组设数组 1、E数组描述为数组描述为(1:2,1:3),F数组描述为(1:3),问下列数组表达式是否合法,不合法的说明理由,合法的写出计算结果:(1)E=A+B;(2)E=ABS(B)+2;(3)E=B+C(4)C=A+C;(5)F=D*D;(6)F=A(1:2,1)+B(1:3,1)(7)F=A(1,1:3)+B(1,1:3)2、用用WHERE构造,使上题中
12、构造,使上题中A元素元素2时,置时,置B相应元素为自身的绝对值,否则使相应元素为自身的绝对值,否则使B中元素中元素加加1,写出最后,写出最后B的内容的内容。数组的保存规则数组的保存规则一维数组:按照元素的顺序二维及多维数组:按列从低维到高维数组逻辑结构:数组是一个与计算机实现无关的抽象的数据表。数组逻辑结构:数组是一个与计算机实现无关的抽象的数据表。数组存储结构:数组是一个与计算机实现有关的具体的数据表数组存储结构:数组是一个与计算机实现有关的具体的数据表(线性表线性表),连续连续存储存储在若干存储单元中。在若干存储单元中。逻辑结构逻辑结构存储结构存储结构 a(1)a(2)a(3)a(4)a(
13、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)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)l数组说明:数组说明:INTEGER aINTEGER a(9 9)。)。l逻辑结构、存储结构、相互关系:逻辑结构、存储结构、相互关系:l数组说明:数组说明:INTEGER aINTEGER a(3 3,4 4)。)。l逻辑结构、存储结构、相互关系:逻辑结构、存储结构、相互关系:l数组说明:数组说明:INTEGER
14、 aINTEGER a(3 3,2 2,4 4)。)。l逻辑结构、存储结构、相互关系:逻辑结构、存储结构、相互关系:l数组说明:数组说明:INTEGER a(LINTEGER a(L1 1:U:U1 1,L,L2 2:U:U2 2,L Ln n:U:Un n)。l逻辑结构:逻辑结构:逻辑结构可看成是由逻辑结构可看成是由U Un n-L-Ln n+1+1个个n-1n-1维数组维数组构成构成,每个每个n-1n-1维数组维数组又可看成是又可看成是由由U Un-1n-1-L-Ln-1n-1+1+1个个n-2n-2维数组维数组构成构成,依次类推依次类推,直到每个直到每个二维数组二维数组又可看成是由又可看
15、成是由U U1 1-L-L1 1+1+1个个一维数组一维数组构成。构成。数组元素的下标数组元素的下标a(i,j,k,r,s)a(i,j,k,r,s)决定该数组元素在逻辑结构中的位置。决定该数组元素在逻辑结构中的位置。l存储结构:存储结构:存存储结储结构是在构是在计计算机内存中分配的一串算机内存中分配的一串连续连续的存的存储单储单元元,从第一个数从第一个数组组元素元素(如(如:a(La(L1 1,L,L2 2,L Ln n))开始开始,按照数按照数组逻辑结组逻辑结构构以列以列为为主主依次将数依次将数组组元素分配元素分配在在连续连续的存的存储单储单元元中。多中。多维维数数组组的存的存储结储结构是一
16、构是一维线维线性表性表,多多维维数数组组的元素的元素在存在存储结储结构中从左向右排列构中从左向右排列时时,其下其下标变标变化如同化如同加油站加油站计计数器数器反向反向变变化化,先从先从1 1维维开始开始变变化化,最后到最后到n n维变维变化化,由此可得到多由此可得到多维维数数组组的存的存储结储结构。构。l相互关系:一一对应关系。相互关系:一一对应关系。所以,应尽量避免使用高维数的数组;并在应用中充分考虑计算机存储和提所以,应尽量避免使用高维数的数组;并在应用中充分考虑计算机存储和提取数据的方式、原则,尽量编写效率较高的程序。取数据的方式、原则,尽量编写效率较高的程序。例:例:三维数组声明三维数
17、组声明 INTEGER a(-5:8,-3:4,10,15),有有672个数组元素个数组元素/数组元素数组元素a(2,1,13)在其存储结构中位于第在其存储结构中位于第400个元素。通过计算得到个元素。通过计算得到:8-(-5)+14-(-3)+1(13-10)+8-(-5)+11-(-3)+2-(-5)+1 =1483+144+8=400real uwnd(360,180,17,365)do l=1,365 do k=1,17 do j=1,180 do i=1,360 sumu=aveu+uwnd(i,j,k,l)end do end do end doend doF90的赋值语句考虑到了
18、在并行机上计算的功能,即使不是用的并行计算机,在形式上也是按并行化处理的。这与F77中的串行赋值是不同的,由此造成了数组的F90赋值结果与采用DO循环方式进行赋值的差异 90赋值语句与DO循环的差异 例:INTEGER:a(0:9)=(/0,1,2,3,4,5,6,7,8,9/)a(1:9)=a(0:8)a的所有元素是并行处理的,结果是(/0,0,1,2,3,4,5,6,7,8/):|a(0)|a(1)|a(2)|a(3)|a(4)|a(5)|a(6)|a(7)|a(8)|a(9)|a(0)|a(1)|a(2)|a(3)|a(4)|a(5)|a(6)|a(7)|a(8)|a(9)|如果用DO循
19、环的话DO i=1,9 a(i)=a(i-1)END DOA的元素是逐一处理的,结果是(/0,0,0,0,0,0,0,0,0/):|a(0)|a(1)|a(2)|a(3)|a(4)|a(5)|a(6)|a(7)|a(8)|a(9)|要用DO循环达到和上面同样的效果,需要数组的拷贝:INTEGER:a(0:9)=(/0,1,2,3,4,5,6,7,8,9/),b(0:9)b=a DO i=1,9 a(i)=b(i-1)END DO可变大小的数组(动态数组)可变大小的数组(动态数组)数组可以是静态的也可以是动态的。如果数组是静态的,则在编译时如果数组是静态的,则在编译时就被分配了固定的储存空间,并
20、且直到程序退出时才被释放就被分配了固定的储存空间,并且直到程序退出时才被释放。程序运行时静态数组的大小不能改变。静态数组的缺陷是,即使数组已经使用完毕,它仍占据着内存空间,浪费了系统资源。在给定的计算机内存资源情况下,耗费了其他数组可以利用的内存,并且超过资源的数组将导致程序执行错误。因此,F90增加了动态的数组功能,动态数组的储存在程序运行当中是可以分配、改变和释放的 动态数组只有两种:可分配数组和自动数组。自动数组和可分配数组很类似,区别在于当程序开始或结束时,自动数组会自动分配和释放内存。当用户分配动态存储空间时,数组的大小是在运行时而不是在编译时确定的。动态分配可以用于标量和任何类型的
21、数组。当用户给当用户给数组指定了可分配属性时并没有立即分配内存,而是直到使用数组指定了可分配属性时并没有立即分配内存,而是直到使用ALLOCATE语句后才分配。随后还可以用语句后才分配。随后还可以用DEALLOCATE语句释放内语句释放内存空间存空间,这时数组可以以其它形状或目的来使用 错误状态可以由错误状态可以由ALLOCATE语句中的语句中的STAT值获得。如果指定值获得。如果指定STAT选选项,语句的成功执行时将返回项,语句的成功执行时将返回0,否则返回正值。若未指定,否则返回正值。若未指定STAT选项选项且出现错误时,程序将中止执行且出现错误时,程序将中止执行 例:INTEGER,AL
22、LOCATABLE:A(:),B(:)INTEGER ERR_MESSAGEALLOCATE(A(10:25),B(SIZE(A),STAT=ERR_MESSAGE)IF(ERR_MESSAGE.NE.0)PRINT*,ALLOCATION ERRORDEALLOCATE语句用来释放已分配数组的内存语句用来释放已分配数组的内存 例:INTEGER,ALLOCATABLE:A(:),B(:)INTEGER ERR_MESSAGEALLOCATE(A(10:25),B(SIZE(A)DEALLOCATE(A,B,STAT=ERR_MESSAGE)IF(ERR_MESSAGE.NE.0)PRINT*
23、,DEALLOCATION ERROR例:INTEGER,DIMENSION(:),ALLOCATABLE:freqREAD*,limitALLOCATE(freq(1:limit)DEALLOCATE(freq)只有被只有被ALLOCATE语句分配的内存空间才可以被语句分配的内存空间才可以被DEALLOCATE语语句释放,否则产生运行错误。可以使用句释放,否则产生运行错误。可以使用ALLOCATED语句判断数组语句判断数组是否被分配,错误状态可以由是否被分配,错误状态可以由ALLOCATE语句中的语句中的STAT值获得值获得 用内在函数ALLOCATED来判断一个数组是否已被分配。它的形式为
24、:ALLOCATED(数组名)返回值是逻辑标量,已被分配时为真,现在还未被分配时为假,当数组的分配状态未定义时它也是未定义的。例:REAL,ALLOCATABLE:A(:).IF(.NOT.ALLOCATED(A)ALLOCATE(A(5)当过程的执行被RETURN或END语句中止时,除非可分配数组是有SAVE属性的,否则它的分配状态变成未定义的。但是,RETURN和END语句并不释放数组分配的内存,所以应该在退出子程序前主应该在退出子程序前主动释放数组分配的内存动释放数组分配的内存 应用举例:应用举例:1、排序、排序2、矩阵相乘、矩阵相乘?例例 计计算算N N个个测试测试数据的平均数据的平均
25、值值和和标标准偏差。准偏差。测试测试数据个数不定。数据个数不定。解:解:已知:已知:N N个个测试测试数据数据datadata为为:X X1 1,X,X2 2,X,X3 3,X,Xn n。从键盘输入。实型。从键盘输入。实型。求:平均值求:平均值XaXa和标准偏差和标准偏差XsXs。实型。实型。平均平均值计值计算公式算公式为为:X Xa a=(X=(X1 1+X+X2 2+X+X3 3+X+Xn n)/N)/N 标标准偏差准偏差计计算公式算公式为为:X Xs s=测测试试数数据据用用一一个个一一维维数数组组X X表表示示,平平均均值值用用变变量量XaXa表表示示,标标准准偏偏差差用用变变量量Xs
26、Xs表表示示。测测试试数数据据个个数数不不确确定定,假假设设最最大大个个数数maxmax为为50,50,实实际际个个数数为为N N。从从键盘输键盘输入数据入数据,数据以非数数据以非数值值字符字符为结为结束束标标志。志。程序程序:输入数据:输入数据:25.3225.32,18.3518.35,44.7844.78,57.3957.39,85.285.2,A A 输出结果:输出结果:测试数据:测试数据:25.32 18.35 44.78 57.39 85.20 25.32 18.35 44.78 57.39 85.20 平均值平均值 :46.21 46.21 标准偏差:标准偏差:26.74 26.
27、74PROGRAM array881PROGRAM array881!说明变量和数组说明变量和数组PARAMETERPARAMETER(max=50max=50)INTEGER:N=0INTEGER:N=0REAL:X(max),Xa,Xs,sum=0.0,dataREAL:X(max),Xa,Xs,sum=0.0,data!从键盘输入数据并求和从键盘输入数据并求和DO WHILE(.TRUE.)DO WHILE(.TRUE.)READ(*,*,IOSTAT=io)data READ(*,*,IOSTAT=io)data IF(io0)EXIT IF(io0)EXIT N=N+1 N=N+1
28、X(N)=data X(N)=data sum=sum+data sum=sum+dataENDDOENDDOXa=sum/NXa=sum/Nsum=0.0sum=0.0DO i=1,NDO i=1,N sum=sum+(X(i)-Xa)*2 sum=sum+(X(i)-Xa)*2ENDDOENDDOXs=SQRT(sum/(N-1)Xs=SQRT(sum/(N-1)WRITE(*,(1X,WRITE(*,(1X,测测试试数数据据:,F10.2),F10.2)(X(i),i=1,N)(X(i),i=1,N)WRITE(*,(1X,WRITE(*,(1X,平均值:平均值:,F10.2)Xa,F1
29、0.2)XaWRITE(*,(1X,WRITE(*,(1X,标准偏差:标准偏差:,F10.2)Xs,F10.2)XsENDEND 例例 根据根据试试卷卷难难易程度易程度,需要需要对对学生成学生成绩绩做适当做适当调调整整(加减分数加减分数)。给给定某定某班学生成班学生成绩绩和加减分数和加减分数值值,根据加减分数根据加减分数值调值调整学生成整学生成绩绩,调调整成整成绩绩大于大于100100分按分按100100分分记记,小于小于0 0分按分按0 0分分记记,按按优优、良、中、及格和不及格确定学、良、中、及格和不及格确定学生成生成绩绩等等级级。统计调统计调整前和整前和调调整后平均成整后平均成绩绩。输输
30、出出调调整前学生成整前学生成绩绩和平和平均成均成绩绩,以及以及调调整后学生成整后学生成绩绩、成、成绩绩等等级级和平均成和平均成绩绩。0 0 59 6059 60 69 7069 70 79 8079 80 89 9089 90 100100不及格不及格 及格及格 中中 良良 优优解:解:已知:已知:学生姓名学生姓名namename、成绩、成绩scorescore、加减分数、加减分数deltadelta。从键盘输入。从键盘输入。求:调整前平均成绩求:调整前平均成绩old_avold_av、调整后平均成绩、调整后平均成绩new_avnew_av、调整后成绩、调整后成绩等级等级gradesgrade
31、s。用四个数组:用四个数组:namesnames、old_scoresold_scores、new_scoressnew_scoress、grades,grades,分别存分别存储调整前姓名、成绩、调整后成绩、等级。储调整前姓名、成绩、调整后成绩、等级。其中:其中:namesnames和和gradesgrades为为字字符串数符串数组组,old_scores,old_scores和和new_scoresnew_scores为为整型数整型数组组。学生人数不确定学生人数不确定,假假设设最大数最大数maxmax为为200,200,实际实际学生人数学生人数为为n n。PROGRAM array882P
32、ROGRAM array882PARAMETERPARAMETER(max=200max=200)INTEGER:n=0,io,delta,score,old_scores(max),new_scores(max)INTEGER:n=0,io,delta,score,old_scores(max),new_scores(max)CHARACTER*10:name,names(max),grades(max)*6CHARACTER*10:name,names(max),grades(max)*6REAL:sum=0,old_av,new_avREAL:sum=0,old_av,new_avOPE
33、N(1,FILE=array881.dat)OPEN(1,FILE=array881.dat)DO WHILE DO WHILE(.NOT.EOF(1).NOT.EOF(1))READ(1,*)name,score READ(1,*)name,score n=n+1;sum=sum+score;names(n)=name;old_scores(n)=score n=n+1;sum=sum+score;names(n)=name;old_scores(n)=scoreENDDOENDDOold_av=sum/nold_av=sum/nWRITE(*,(1X,WRITE(*,(1X,输入一个加减分
34、数值:输入一个加减分数值:,),)READ*,deltaREAD*,deltaDO i=1,n !DO i=1,n !调整学生成绩调整学生成绩 new_scores(i)=old_scores(i)+delta;sum=sum+new_scores(i)new_scores(i)=old_scores(i)+delta;sum=sum+new_scores(i)ENDDO ENDDOWHERE(new_scores100)new_scores=100;WHERE(new_scores100)new_scores=100;WHERE(new_scores0)new_scores=0sum=0.0
35、sum=0.0DO i=1,nDO i=1,n sum=sum+new_scores(i)sum=sum+new_scores(i)IF(new_scores(i)60)THEN IF(new_scores(i)60)THEN grades(i)=grades(i)=不及格不及格 ELSEIF(new_scores(i)70)THEN ELSEIF(new_scores(i)70)THEN grades(i)=grades(i)=及格及格 ELSEIF(new_scores(i)80)THEN ELSEIF(new_scores(i)80)THEN grades(i)=grades(i)=中中
36、 ELSEIF(new_scores(i)90)THEN ELSEIF(new_scores(i)90)THEN grades(i)=grades(i)=良良 ELSE ELSE grades(i)=grades(i)=优优 ENDIF ENDIF ENDDO ENDDO new_av=sum/nnew_av=sum/n!输出数据输出数据WRITE(*,(1X,WRITE(*,(1X,学生姓名学生姓名,2X,2X,调整前成绩调整前成绩,2X,2X,调整后成绩调整后成绩,2X,2X,成绩等级成绩等级)WRITE(*,(1X,44A1)(-,i=1,44WRITE(*,(1X,44A1)(-,i=
37、1,44)DO i=1,nDO i=1,n WRITE(*,100)names(i),old_scores(i),new_scores(i),grades(i)WRITE(*,100)names(i),old_scores(i),new_scores(i),grades(i)ENDDOENDDOWRITE(*,(1X,44A1)(-,i=1,44)WRITE(*,(1X,44A1)(-,i=1,44)WRITE(*,(1X,WRITE(*,(1X,调整前平均成绩:调整前平均成绩:,F7.2)old_av,F7.2)old_avWRITE(*,(1X,WRITE(*,(1X,调整后平均成绩:调整
38、后平均成绩:,F7.2)new_av,F7.2)new_av100 FORMAT(1X,A10,2X,I10,2X,I10,2X,A6)100 FORMAT(1X,A10,2X,I10,2X,I10,2X,A6)ENDEND 使用数据文件使用数据文件,按规定格式输入有关输入数据按规定格式输入有关输入数据,如:如:王刚王刚 ,45 ,45 赵平全赵平全 ,78 ,78 司马俊男司马俊男,87,87 杨莉红杨莉红 ,98 ,98 张军张军 ,58 ,58 运行程序运行程序,从键盘输入数据:从键盘输入数据:输入一个加减分数值:输入一个加减分数值:1010 程序运行后程序运行后,输出结果为:输出结果为:学生姓名学生姓名 调整前成绩调整前成绩 调整后成绩调整后成绩 成绩等级成绩等级 -王刚王刚 45 55 45 55 不及格不及格 赵平全赵平全 78 88 78 88 良良 司马俊男司马俊男 87 97 87 97 优优 杨莉红杨莉红 98 100 98 100 优优 张军张军 58 68 58 68 及格及格 -调整前平均成绩:调整前平均成绩:73.20 73.20 调整后平均成绩:调整后平均成绩:81.60 81.60