第2章-Fortran程序设计基础课件.ppt

上传人(卖家):晟晟文业 文档编号:4607952 上传时间:2022-12-24 格式:PPT 页数:71 大小:900.50KB
下载 相关 举报
第2章-Fortran程序设计基础课件.ppt_第1页
第1页 / 共71页
第2章-Fortran程序设计基础课件.ppt_第2页
第2页 / 共71页
第2章-Fortran程序设计基础课件.ppt_第3页
第3页 / 共71页
第2章-Fortran程序设计基础课件.ppt_第4页
第4页 / 共71页
第2章-Fortran程序设计基础课件.ppt_第5页
第5页 / 共71页
点击查看更多>>
资源描述

1、第5章数组数组的概念 在实际问题中,往往遇到要处理的数据是一组或一批同类型的数据,而且它们是按一定次序进行排列的。如,某班30名学生的单科成绩:85,79,81,68,(分)某厂3个车间全年各季度的产量:一车间:15.8,12.4,18.2,19.6二车间:8.7,9.6,10,8,9.8 三车间:12.3,14.8,16.7,11.3数组的概念 对上述问题,欲保留学生成绩则需要定义30个变量;保留某厂各车间各季度的产量就需要十二个变量。并且某个变量所表示的数据的顺序也无法确定。若有1个班50人,或一个厂有10个车间,就需要定义大量变量来保存这些数据,显然这会使程序笨长,也不便于阅读。怎样解决

2、这一问题?数组。数组的概念数组:一组带下标的变量如对成绩:定义数组:x(30)x(1),x(2),x(3),x(30)用于存放30名学生的成绩。数组名数组名下标下标数组的概念如:对某厂三个车间的产量。定义数组:q(3,4)q(1,1),q(1,2),q(1,3),q(1,4)q(2,1),q(2,2),q(2,3),q(2,4)q(3,1),q(3,2),q(3,3),q(3,4)用于存放三个车间全年各季度的产量。这里的x(i),q(i,j)称为数组元素(或下标变量)。数组的概念求30名学生的平均成绩:用变量:定义变量x1,x2,x30存放30名学生成绩 sum=0.0 sum=x1+x2+x

3、3+x30 avg=sum/30用数组:定义数组:x(30)存放30名学生成绩 sum=0.0 do i=1,30 sum=sum+x(i)enddo avg=sum/30数组的说明与引用 使用数组必须遵循“先说明,后使用”的原则。说明的目的是通知编译系统为数组分配相应的存贮单元。数组名 数组特性 维数,即下标的个数(17)下标取值范围(上界、下界)类型,由数组名类型决定 用两种方法说明数组:用类型说明语句(“显式说明”)用dimension语句(“隐式说明”)数组的说明与引用一、用类型语句说明数组 一般形式:类型说明 数组说明符,其中,数组说明符的一般形式为:数组名(维说明符,)其中,维说明

4、符由“下标下界:下标上界”组成。数组的说明与引用例:real xn(1:10),w(1:2,1:3),kw(10:20)Integer bc(1:100),py(0:2,0:3,0:5)二、用dimension语句说明数组 一般形式:dimension 数组说明符,数组的说明与引用例1:dimension x1(1:10),nw(1:2,1:3)例2:dimension tk(1:100),imax(1:2,1:3)integer tk real imax例3:real(8),dimension(1:10):a,b,c Integer,dimension(4,5):d,e数组的说明与引用注意一

5、下几点:在数组说明符中,维说明符(下标)的个数称为数组的维数。维数说明符只能使用整型常量或整型符号常量及表达式。例:parameter(i=1,j=10)real kx(i:j+5)read(*,*)n real sum(n)违背了先说明的规则数组的说明与引用维说明符的下标下界为1时,可以省略。例:integer bc(1:100),w(1:2,1:10)integer bc(100),w(2,10)数组说明语句必须写在所有可执行语句之前。数组名与同一程序单位中的变量名不能同名。2022-12-2413数组的说明与引用三、数组元素的引用程序中对数组元素的操作,与同类型的简单变量相同。一般形式:

6、数组名(下标,)即要有确定的数组名和下标值。例:xn(5)=10;w(1,3)=kw(1,2,3)引用数组元素时,下标可用算术表达式。例:bc(i)=py(i+j,k)!i,j,k是维数定义范围的具体值数组的说明与引用注意:下标表达式不能“越界”例如:integer s(10)i=10 s(i+1)=s(i)*2 下标的个数要与对应的数组维说明符相同例如:dimension w(5,12)w(2,10)=123.4 w(4)=567.8 X 数组的逻辑结构和存储结构 数组的逻辑结构数组所表示的实际数据结构。数组的存储结构数组在机内存储时的排列结构。一、一维数组 此逻辑结构为一组依次排列的一串数

7、据。例:a(5)a(1),a(2),a(3),a(4),a(5)此存储结构为一组连续存放的一列数据块。例:a(5)a(1)a(2)a(3)a(4)a(5)16数组的逻辑结构和存储结构二、二维数组 此逻辑结构为一张二维表数据。例:a(3,4)可以看作一张3行4列的二维表数据。即:a(3,4)行 列a(1,1)a(1,2)a(1,3)a(1,4)a(2,1)a(2,2)a(2,3)a(2,4)a(3,1)a(3,2)a(3,3)a(3,4)数组的逻辑结构和存储结构 此存储结构为一组按列连续存放的数据块。例:a(3,4)a(1,1)a(3,2)a(2,4)a(1,4)a(3,3)a(2,3)a(1,

8、2)a(3,1)a(2,1)a(1,3)a(2,2)a(3,4)2022-12-2418数组的逻辑结构和存储结构三、三维数组 此逻辑结构为若干张二维表数据。例:a(2,2,3)2行2列的表,共3页。即:行 列 页a(1,1,1)a(1,2,1)a(2,1,1)a(2,2,1)a(1,1,2)a(1,2,2)a(2,1,2)a(2,2,2)a(1,1,3)a(1,2,3)a(2,1,3)a(2,2,3)第第二二页页第第三三页页第第一一页页2022-12-2419数组的逻辑结构和存储结构此存储结构为一组按页连续存放的数据块。例:a(2,2,3)了解数组的逻辑结构和存储结构,对我们合理地选用数组和对

9、数组进行输入输出有很大好处。a(1,1,1)a(2,1,2)a(1,2,3)a(2,1,3)a(1,1,3)a(2,2,2)a(2,2,1)a(1,2,1)a(2,1,1)a(1,2,2)a(1,1,2)a(2,2,3)2022-12-2420数组的输入和输出有三种方式:用数组名 用do循环 用隐含do循环2022-12-2421数组的输入和输出一、用数组名进行数组的输入输出 在用数组名进行数组的输入输出时,其顺序要与数组元素在机内的存储顺序一致。例如:dimension k(5)read*,k 对数组的整体进行操作等价于:read*,k(1),k(2),k(3),k(4),k(5)2022-

10、12-2422数组的输入和输出例2:试输入以下2名学生3门功课的成绩。integer g(2,3)read*,g等价于:read*,g(1,1),g(2,1),g(1,2),g(2,2),g(1,3),g(2,3)键盘输入(按列输入):86,87,75,70,72,83837087727586制图英语数学2022-12-2423数组的输入和输出二、用do循环进行数组的输入输出例:试输入以下2名学生3门功课的成绩。837087727586制图英语数学数组的输入和输出编程如下:integer g(2,3)do i=1,2 do j=1,3 read(*,*)g(i,j)enddo enddo en

11、d 键盘输入(按行输入):86,75,72,87,70,83837087727586制图英语数学数组的输入和输出 integer g(2,3)read(*,*)(g(i,j),j=1,3),i=1,2)write(*,*)(g(i,j),j=1,3),i=1,2)end do i=1,2 do i=1,2 do j=1,3do j=1,3 read(read(*,*)g()g(i i,j j)enddo enddoenddoenddo内循环内循环外循环外循环等同于:等同于:read(*,*)g(1,1),g(1,2),g(1,3),g(2,1),g(2,2),g(2,3)由于是一个由于是一个r

12、ead语句,所以既可以一行输入,也语句,所以既可以一行输入,也可以分多行输入。键盘输入如下:可以分多行输入。键盘输入如下:86,75,72 87,70,83数组的输入和输出 要记注:一个read语句可以分多行输入,而有多个read语句时,每一个read语句必须从新的一行读数。将若干名学生的学号及五门课程的成绩,编成一个较完整的输入输出程序如下:数组的输入和输出 parameter(m=30,n=5)dimension kd(m,n)character num(m)*5 定义一个字符型数组 read(*,*)(num(i),(kd(i,j),j=1,n),i=1,m)print*,序号 学号 语

13、文 英语 数学 物理 化学 print 100,(i,num(i),(kd(i,j),j=1,n),i=1,m)100 format(1x,i3,3x,a5,2x,5i4)end read(*,*)(num(i),(kd(i,j),j=1,n),i=1,m)数组的输入和输出do i=1,m read(*,*)num(i),(kd(i,j),j=1,n)enddodo i=1,m read(*,*)num(i),kd(i,1),kd(i,2),kd(i,3),kd(i,4),kd(i,5)enddo数组的输入和输出10 format(1x,i3,3x,a5,2x,5i4)print 10,(i,

14、num(i),(kd(i,j),j=1,n),i=1,m)Do i=1,m print 10,i,num(i),(kd(i,j),j=1,n)EnddoDo i=1,m print 10,i,num(i),kd(i,1),kd(i,2),kd(i,3),kd(i,4),kd(i,5)enddo 7.4 数组的输入和输出输出结果的形式为:序号 学号 语文 英语 数学 物理 化学 1 00101 78 84 90 80 91 2 00102 30 00130 给数组赋初值 在Fortran程序中,可用data语句给变量或数组赋初值。一般形式:data 变量表/初值表/,变量表/初值表,功能:在程序

15、编译期间给变量或数组赋初值。其中,变量表可以是变量名、数组名、数组元素、隐do循环;初值表只能是常量,不允许出现任何形式的表达式。2022-12-2432给数组赋初值例1:data x,y,z/15.7,42.4,108.5/例2:data a,b/7.85,9.1/,i,j,k/5,10,15/例3:dimension k(2,3)data(k(i,j),j=1,3),i=1,2)/90,23,20,42,14,32/或:data k/90,42,23,14,20,32/给数组赋初值例4:dimension a(10)data a/10*-1.0/(表示“10个-1.0”)注:data语句属

16、说明语句,但它可以放在end语句之前的任意行。其作用相当于赋值。给数组赋初值 使用数组赋值符赋初值 一般形式:数组名=(/取值列表/)例如:integer m(6)m=(/2,3,4,5,6,7/)给数组赋初值 integer p(-1:8)p=(/3,0,(i,i=1,9,2),45,56,6+2*8/)print 100,(p(i),i=-1,8)100 format(1x,10i5)end给数组赋初值 Fortran 90 中,除了可以对一个一个的元素慢慢来设定初值外,还可以一口气把整个数组内容设置为同一个数值。Integer:A(3)=3!A(1)=A(2)=A(3)=3数组应用举例例

17、:从键盘输入10个整数,然后将最大数与第一个数交换,最小数与最后一个数交换。integer,dimension(10):ainteger m,kdo k=1,10 read(*,*)a(k)enddom=1do k=2,10 if(a(m)a(k)m=k enddo n=a(m);a(m)=a(10);a(10)=n print 100,(a(k),k=1,10)100 format(1x,10i6)end数组应用举例例7.10:设有一个45矩阵。(1)求下面矩阵的所有元素之和及平均值。(2)保留所有大于平均值的元素,其余元素清零59671040128315946232713 integer

18、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=0do i=1,4 do j=1,5 sum=sum+a(i,j)enddoenddoaverage=sum/(4*5)print*,sum=,sumprint*,average=,average do i=1,4 do j=1,5 if(a(i,j)C题目5.1 输入若干学生一门课的成绩,统计各分数段的人数。凡不及格(60)都由一个计数器来统计,其他以10分一个分数段。题目5.2 输入54矩阵,求出每行元素之和,并把和值最大的那一行元素和第一行元素对调。部分数组运算

19、A(3:5)=5 A(3:)=5 A(3:5)=(/3,4,5/)A(1:3)=b(4:6)A(1:5:2)=3 隐式循环 A(1:10)=a(10:1:-1)A(:)=b(:,2)A(:,:)=b(:,:,1)等号两边所使用的数组元素数目要一样多 同时使用多个隐式循环时,较低维度的循环可以想象为内层循环 Intetger:a(2,2),b(2,2)B=a(2:1:-1,2:1:-1)B(1,1)=a(2,2)B(2,1)=a(1,2)B(1,2)=a(2,1)B(2,2)=a(1,1)常用内在函数 Fortran语言中的内在函数通常都可以接受数组作为参数来进行运算,此外还有一些专用的函数适用

20、于处理数组所特有的运算。本节就将介绍这些内在函数在数组领域的应用。内部基本函数 在Fortran语言的数组表达式中,允许将数组作为内部基本函数的参数。此时,内部基本函数的函数值就是一个同参数数组形状相同的数组,它的每个位置上的元素值就是被操作数组对应位置上的数组元素取该基本函数所得的值。例如数组A和B都是形状相同的一维数组,则语句B=SQRT(A)的执行结果可以表示如下:矩阵乘积函数该函数的作用是执行数值型或逻辑型数组A与B的矩阵乘法。函数的原型为:C=MATMUL(A,B)使用时,数组A和B必须是秩为1或2(也就是一维或二维)的数值型或逻辑型的有值数组,且数组A和B中至少有一个的秩为2。传入

21、矩阵乘积函数的数组A与B的类型必须相同。数组A与B的矩阵乘积规则和结果与数学上的矩阵乘法定义一致,也就是说数组A的最后一维的长度必须和数组B的第一维的长度相同。结果数组C的秩和形状取决于参数数组的秩和形状:如果A的形状为(n,m),B的形状为(m,k),则结果数组C的秩为2,形状为(n,k)。如果A的形状为(m),B的形状为(m,k),则结果数组C的秩为1,形状为(k)。如果A的形状为(n,m),B的形状为(m),则结果数组C的秩为1,形状为(n)。向量点乘函数该函数的作用是执行数值型或逻辑型数组A与B的点积乘法。函数的原型为:C=DOT_PRODUCT(A,B)使用时,数组A和B必须是秩为1

22、(即数学上所说的向量,也即一维数组)的数值型或逻辑型的有值数组,且数组A与B的类型必须相同。一维数组A与B点乘的结果是标量,函数的点乘规则和结果值与数学上的定义相同。如果一维数组A和B中有一个的长度为0,且数组为数值型数组,则结果为0;如果数组为逻辑型数组,则结果为.FALSE.。例如DOT_PRODUCT(/1,2,3/),(/3,4,5/)的结果为26,计算过程为(1 x 3)+(2 x 4)+(3 x 5)=26。元素求和函数 元素求和函数属于数组规约函数中的一种。数组规约函数是一组功能类似的数组函数的统称。这组函数的主要作用就是沿着数组中的某一维,对在屏蔽表达式中值为.TRUE.的所有

23、数组元素进行某种操作。这组函数包括SUM、PRODUCT、MAXVAL、MINVAL、COUNT、ANY和ALL函数。元素求和函数的主要作用是沿着数组中的某一维,对在屏蔽表达式中值为.TRUE.的所有元素求和。函数的原型为:C=SUM(A,DIM,MASK)元素连乘求积函数该函数的主要作用是沿着数组中的某一维,对在屏蔽表达式中值为.TRUE.的所有数组元素求连乘积。函数的原型为:C=PRODUCT(A,DIM,MASK)其中的注意事项和说明同元素求和函数。下面是一些实例。比如数组A=(/2,4,6/),则PRODUCT(A)的值是48;又如PRODUCT(B,MASK=B5),all(ab)A

24、ny(mask,dim)对数组做逻辑运算,如果任意元素合乎条件就返回真值,否则返回假值,例如all(a5),all(ab)count(mask,dim)对数组做逻辑运算,返回合乎条件的元素的数目数组大小查询函数该函数是数组查询函数中的一种。数组查询函数一组功能类似于数组函数的统称。这组函数包括:SIZE、SHAPE、ALLOCATED、LBOUND和UBOUND函数。这里只介绍其中的两种:数组大小查询函数和数组形状查询函数。数组大小查询函数的作用是求数组沿着某一维的长度或者数组元素的总数目。函数原型为:C=SIZE(A,DIM)其中A是被查询数组,可以是假定大小数组,但不能是未定义的指针数组或

25、未分配空间的可分配数组。当DIM等于1时,表示查询数组有几行;当DIM等于2时,表示查询数组有几列;当DIM被省略时,表示查询数组有多大(即有多少个元素)。Shape(a)返回数组的维数及大小,假设a为n维数组,返回值为大小为n的一维数组Lbound(a,dim)ubound(a,dim)返回数组声明时的下限和上限值数组形状查询函数 该函数的功能就是求数组或标量的形状。函数的原型为:C=SHAPE(A)其中,A表示被查询对象,可以是标量或数组,但不能是假定大小数组、未定义的指针或未分配空间的可分配数组;C保存查询结果,是一个一维整型数组。比如SHAPE(2)将返回一个零长度一维数组;如果对数组

26、B(-2:5,9:10)进行查询,则SHAPE(B)将返回一维数组(8,2)。数组合并函数数组合并函数是数组构造函数中的一种。数组构造函数也是一系列功能相似的函数的总称,它们用于从已有数组的元素构造出新数组。这组函数包括:MERGE、PACK,UNPACK和SPREAD函数。数组合并函数的只要用途就是在屏蔽表达式的控制下,对两个独立数组进行合并操作。该函数的原型为:C=MERGE(TSOURCE,FSOURCE,MASK)其中,TSOURCE可以是任意类型的数组或标量,FSOURCE是必须与TSOURCE具有相同的类型和类型参数的数组或标量。屏蔽表达式MASK必须是逻辑型数组;若MASK值为真

27、,则结果是TSOURCE,若MASK值为假,则结果是FSOURCE。数组压缩函数 该函数的作用就是在屏蔽表达式的控制下,将数组压缩成向量数组。数组的原型为:C=PACK(A,MASK,VECTOR)A表示被压缩对象,可是任意类型的数组;屏蔽表达式MASK必须是逻辑型数组,并且与数组A相容(也就是形状相同);VECTOR是可选参数,必须为向量数组,并且与数组A具有相同的类型和类型参数。根据数组在内存中的排列顺序,按照mask的运算值,把判断成立的数值从A中取出,放到返回值的一维数组中。当vector没有输入时,返回值数组大小为a中成立的数值数目。Vector 有输入时,返回值数组大小与vecto

28、r相同。数组形状扩展和重构形函数 这是一个由两个函数组成的函数族,包括SPREAD函数与RESHAPE函数,用于完成数组形状重构和扩展的任务。SPREAD函数的主要功能就是将数组沿着某一维的方向拷贝规定次数后扩展成一个新的数组。函数的原型为:C=SPREAD(A,DIM,NCOPIES)其中,A为被拷贝对象,可以是标量或任意类型的数组。当DIM等于1时,表示沿着第一维下标变化的方向扩展,也称为向下扩展;当DIM等于2时,表示沿着第二维下标变化方向扩展,也称为向右扩展。NCOPIES用于指定拷贝的次数。数组转置函数 数组转置函数是数组运算函数中的一种。数组运算函数是数组函数中同矩阵运算相关的一组

29、函数的总称,这组函数包括:TRANSPOSE、EOSHIFT和CSHIFT三个函数。数组转置函数的用途就是对秩为2的数组(就是二维数组)进行转置操作。函数的原型为:C=TRANSPOSE(MATRIX)其中,数组MATRIX必须是一个二维数组。转置后的结果数组C的形状正好与数组MATRIX的形状相反。也就是说MATRIX(n,m)转置后的结果为C(m,n)。去端移动函数 该函数的作用是对秩为1的数组作去端移位处理,或沿着某一维对秩大于1的数组在所有秩为1的完整数组片段上作去端移位处理。函数的原型为:C=EOSHIFT(A,SHIFT,BOUNDARY,DIM)其中,A为被进行去端移位处理的数组

30、。SHIFT表示移动的位数,必须为整数;当SHIFT为正时,表示去端左移,当SHIFT为负时,表示去端右移。在数组或数组片段的一端被移出的元素被丢弃,并在另一端移入相同数量的BOUNDARY的值。DIM表示要进行去端移位处理的数组的维,默认为1。不同的片段可以有不同的BOUNDARY值,并可在不同的方向上移动不同的位数。Boundary未赋值时,会自动填充0循环替换函数 该函数的作用是将秩为1的数组的所有元素或高维数组的指定维上的元素进行循环移动。在一端上移走的元素被插到另一端。函数的原型为:C=CSHIFT(A,SHIFT,DIM)其中,A为被操作数组。SHIFT为正值时被移向左端,负值时则

31、移向右端。DIM可以指定要进行操作的数组的维,默认值为1。比如数组A=1,2,3,4,5,6,则CSHIFT(A,SHIFT=2)的结果是3,4,5,6,1,2;而CSHIFT(A,SHIFT=-2)的结果则5,6,1,2,3,4。最大值元素定位函数该函数是两个数组定位函数之一,另一个不用说也知道是最小值元素定位函数(MINLOC)。函数的原型为:C=MAXLOC(A,DIM,MASK)函数根据屏蔽表达式MASK的真值条件确定数组A中的所有元素或沿某一维DIM所有元素中第一个最大值元素出现的位置。结果C的形式取决于数组A的秩:当秩为1时,C为标量;当秩不为1时,C为一维数组。例如MAXLOC(

32、/1,8,8,7/)的值为2。再如数组A(3,4)的形式为:554162132304Fortran95的数组操作语句 Fortran 95中提供了许多新的数组操作语句,例如FORALL、WHERE语句等。这些语句大大提高了Fortran语言中的数组操作特性,使其在数值计算领域的优势中得到进一步加强。WHERE语句和WHERE构造在Fortran 90/95中提供了一种新的屏蔽数组操作语句WHERE,该语句可用于从数组中提取出部分内容进行设置。实质上,WHERE语句是一种带判断条件的数组操作语句,也就是说该语句只对那些符合条件要求的数组元素进行操作。在使用上,可以分为语句形式和构造形式两种。1W

33、HERE语句WHERE语句的一般形式为:WHERE(屏蔽表达式)赋值语句2WHERE构造除了上面这种语句声明形式的用法外,还可以使用WHERE构造。3WHERE构造的嵌套同IF构造相似,WHERE构造也允许进行嵌套。注意:Where 是用来设置数组的,所以它的程序模块中只能出现与设置数组相关的命令。而且整个程序模块中所用的数组必须是同样维度及大小。FORALL语句FORALL语句也是Fortran 90/95标准中新增的数组操作语句,是数组屏蔽赋值功能(WHERE语句和WHERE构造)的一对一元素的推广。从对数组的作用形式来看,该语句同隐式DO循环操作数组的过程类似,但在功能上更为强大。1FO

34、RALL语句FORALL语句的一般形式为:FORALL(循环三元下标,循环三元下标,屏蔽表达式)赋值语句2FORALL构造除了前面介绍的FORALL语句外,FORALL也能像IF构造和WHERE构造一样以构造的形式进行实用。FORALL构造的一般形式为:构造名:FORALL(循环三元下标,循环三元下标,屏蔽表达式)块END FORALL 构造名3.Forall 也可以写成多层嵌套结构。题目5.3 输入若干学生的学号和四门课的成绩,求(1)全体学生的平均分;(2)把成绩高于平均分的学生学号和成绩打印出来。要求尽可能地使用数组运算,尽可能避免循环操作。题目5.4 输入任意矩阵,打印出某个元素的位置,该元素在行上最大,而在列上最小课堂测验 请编写Fortran 90程序完成一个二维函数分布的求值Z(x,y)=x2+y2,X取值范围为【-50,50】,Y的取值范围为【-100,100】,x和y的取值间隔为1。要求:尽量采用数组运算,避免循环操作

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第2章-Fortran程序设计基础课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|