VB5 数组教学课件_第1页
VB5 数组教学课件_第2页
VB5 数组教学课件_第3页
VB5 数组教学课件_第4页
VB5 数组教学课件_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VisualBasic

'程序选id

第五章数组

武小川xiaochuan_wu@163.com

中国药科大学计算机教研室

VisualBasic

教学要求'程序:

掌握静态数组和动态数组的概念和基本操作

掌握控件数组的建立和使用方法

掌握常用算法

,裕品中国药科大学

2

以计算机教研室

VisualBasic

教学内容'程序:

5.1教组的概念

5.2教组的基本掾作

5.3动态教组

5.4控件数组

5.5程序示例

3•漓Y中国药科大学

计算机教研室

VisualBasic

5J数组的概念'程序:

5.1.1数组命名与数组元素

5.1.2数组定义

5.1.3数组的结构

5.1.4数组函数及数组语句

.漓卜中国药科大学

4

以计算机教研室

VisualBasic

基本^概^念^'程序:

前面所说的变量都是指简单变量,即一个变量名对应一

个存储单元,只能存储一个值,各个变量之间无关联。

本章我们要介绍的是一种下标变量——数组,是通过一

个数组名和下标的组合来表示多个值。用一个相同的名字引

用一组变量的数据。

数组,是VB支持的一种复合结构的数据类型。

数组,易用于保存一组具有相同数据类型的有序的变量

的集合。

,裕品中国药科大学

5

U计算机教研室

5.L1数组命名与数组元素VisualBasic

•命名规则与简单变量相同。(参阅P45)

•数组名不是代表某一变量,而是一组变量。

•数组元素:

今由数组名和该元素在数组中的编号(索引、下标)唯一

确定,下标是连续的整数。

少数组元素的一般形式:

数组名(下标1L下标2,…])

•数组的维数:

“一维数组——只需一个下标即可唯一确定一个数组元素

“多维数组——有两个或两个以上下标的数组,每个下标

对应一个“维”。

6/编工中国药科大学

呼计算机教研室

VisualBasic

5.L2数组定义'程序:

■数组必须先定义后使用。

•定义数组时,确定其名称、数据类型、维数、每一维的上、

下界。

•数组定义时,系统分配连续的内存空间,用于依次保存所

有数组元素。

・固定大小数组与动态数组。

.漓卜中国药科大学

7

U计算机教研室

VisualBasic

1、数组说明语句________________'程序:

[格式]:

Public|Private|Static|Dim数组名([<下界1>To]<上界1>

[,卜下界2>To]<上界2>,…])As类型

[说明]:

“声明关键字决定作用域,见下页

“〈下界〉TOv上界》决定了每一维的大小,下界指下标的最

小值,上界指下标的最大值,其中[〈下界>TO]可省略,此

时,默认下界是0。

“我们习惯于下标是从1开始,可在模块的“通用”声明段中

使用如下语句

OptionBase1

则在缺省下界的情况下,默认下界是1。

8「潇工中国药科大学

垓计算机教研室

VisualBasic

'程序:

关键字使用位置作用域

Public在标准模块的声明段中全局

Private和Dim在模块的声明段中模块

Dim在过程中局部

Static在过程中局部、静态

注意:全局数组、全局符号常量和全局定长字符

串只能在标准模块中定义,念.中国药科大学

U计算机教研室

VisualBasic

2数组的上、下界'程序:

•上、下界表示下标的最大、最小值;

•下界《上界;

•在固定大小数组定义时,上、下界是常量或常量表达式,不

得是变量;

•上、下界应是整数,若不是,则自动四舍五人。

举例:Dimmasinteger

Constn=5asinteger

Dima(n)asinteger

Dimb(1to6.6)asinteger

Dimc(1to2*3)asinteger

Dimd(0tom)asintegerX

io,念.中国药科大学

b计算机教研室

VisualBasic

3数组的类型'程序:

今可为任一简单数据类型

4数组的大小

,指数组中包含元素的个数。

,一维数组元素个数:上界-下界+1

,二维数组元素个数:

(上界「下界1+1)*(上界2-下界2+1)

京东中国药科大学

11学计算机教研室

5.L3数组的结构VisualBasic

•数组的所有元素是按一定顺序存储在连续的存储单元的。

i.一维数组的结构

*例:Dimstra(3)

它逻辑结构:(stra(0),stra(1),stra(2)stra(3))

叱存储结构:按照下标从小到大依次存储

Str(O)Str(1)Str(2)Str(3)

京东中国药科大学

12学计算机教研室

VisualBasic

2二维数组的结构'程序:

•例:Optionbase1

Dimy(3,4)asinteger

•逻辑结构:

'y(l,l),y(l,2),y(l,3),y(l,4)‘

y(2,l),y(2,2),y(2,3),y(2,4)

、y(3,l),y(3,2),y(3,3),y(3,4).

•存储结构:

“按列存放”

京东中国药科大学

13学计算机教研室

VisualBasic

3三维数组的结构'程序:

•行、列和页组成的三维表。

•逻辑结构:见书P88

•存储结构:“逐页逐列”

.漓卜中国药科大学

14

以计算机教研室

VisualBasic

5.1.4数组函数及数组语句'程序:

1、2返回上、下界函数:

上界:UBound(数组名[,d])

下界:LBound(数组名[,d])

说明:d代表维数。省略时表示返回第一维的值。

举例:DimA(5)AsInteger,B(2,3to5)AsInteger

al=LBound(A)

al=UBound(A)

bl=LBound(B,l)

b2=LBound(B,2)

结果:

b3=UBound(B,l)050325

b4=UBound(B,2)

Printal;a2;bl;b2;b3;b4_____,科大学

计算机教研室

VisualBasic

3Erase初始化数组语句'程序:

格式:Eraseal[,a2,...]

功能:对普通数组初始化(按数组类型给元素赋初值),

对动态数组进行存储空间释放。例:P.89

OptionBase1

PrivateSubForm_Click()

Dima(3)AsInteger

a(l)=1:a(2)=2:a(3)=3

Printa(l),a(2),a(3)

Erasea

Printa(l),a(2),a(3)

EndSub

言.中国药科大学

16

U计算机教研室

VisualBasic

4ForEach-Next数组循环结构'程序:

格式:ForEachElementIn〈数组名)

语句组

[ExitFor]

语句组

Next[Element]

功能:依次(存储次序)处理每一个数组元数,直到数组结束。

说明:Element是Variant变量,它逐个地代表数组中的每一

个变量。

.漓卜中国药科大学

17

U计算机教研室

VisualBasic

例:'程序:

Fori=1To2

Forj=1To3

E(iJ)=iM0+j

Nextj

Nexti

ForEachVInE

PrintV;处理顺序为该数组的存储顺序——按列!

NextV

EndSub

TK

VisualBasic

5.2数组的基本操作程序迭

5.2.1教组元素的赋值

5.2.2教组元素的输出

5.23教组元素的引用

行才中国药科大学

19型计算机教研室

VisualBasic

5.2.1数组元素的赋值'程序:

1用赋值语句给单个数组元素赋值。

Dimscore(3)asinteger

score(1)=90:score(2)=80:score(3)=68

2在循环结构中,用赋值语句逐一给数组元素赋值。

Dima(1to6)asinteger

Fori=1to6

a(i)=int(99*rnd)+1|一维数组用一层循环结构

Nexti

3在循环结构中,利用Inputbox函数给数组元素赋值。

Dima(lto6)asinteger

Fori=1to6

a(i)=inputbox(“请输入a("&str(I)&“数组赋值”)

Nexti

VisualBasic

4、Array赋值函数'程序:

格式:变体变量名=Array([nl,n2,...])

功能:将一个变体型变量创建成为一个一维数组,并包含指定

的元素。元素的引用方式与一般数组一样。

注意:Array赋值函数只能给变体型变量赋值。不能给其他类

型的变量及任何类型的数组赋值。

1510

OptionBase1b-ray

PrivateSubForm_Click()

DimaAsVariant,bAsIntegerMicrosoftVisualBasic

a=Array(l,2,3,4,5,6,7,8,9,10)实时错误T3’:

Printa(l),a(5),a(10)类型不匹配

a="Array''

Printa

b=Array。,2,3,4,5,6,7,8,9,10)

EndSub姆◎|结束量”随闻迹寸

VisualBasic

5.2.2数组元素的输出'程序:

•用Print方法显示在窗体或图片框上

•赋值给文本框的Text属性,在文本框中显示

•调试时,调用Debug的Print方法在“立即”窗口中显示

5.2.3数组元素的引用

注意:在引用数组元素时,元素的下标一定要在定义的上

下界范围之内,否则“数组越界”出错。

,裕品中国药科大学

22

以计算机教研室

VisualBasic

OptionBase1'程序:

PrivateSubForm_click()

Dimcompare(12)AsInteger,iAsInteger出

最5

DimmaxAsInteger,minAsInteger

Randomize大1

Fori=lTol2值

compare(i)=Int(90*Rnd)+10、

Printcompare(i);最

Nexti小

12

.rint值

max=compare⑴:min=compare⑴两

Fori=2Tol2位

Ifcompare(i)>maxThen

max=compare(i)

Elselfcompare(i)<minThen,

min=compare(i)

EndIf中

Nexti找

Print”最大教是;";max

Print”最小教是min

EndSub

例:有'―4—>维数组a(20),要求按照每行6个.

VisualBasic

格式输出。数组元素为100-200之间的随机数。'程序山J

I.Foral

OptionBase1

171153158129130178

PrivateSubForm_Click()1011761821T1104141

Dima(20)AsInteger187179137197188105

DimiAsInteger,jAsInte;195136

Fori=1To20

a(i)=Int(101*Rnd)+100

Nexti

Fori=1To20

Printa(i);

j=j+l

IfjMod6=0ThenPrint

Nexti

EndSub,念.中国药科大学

b计算机教研室

例:二维数组的赋值与输出

OptionExplicit程序分析:

OptionBase1

PrivateSubForm_Click()程序执行时,计数变量i和j的变化为:

DimiAsInteger,jAsIntegeri=l时,j从1变化到4,结束内层循环,i变成2

Dima(3,4)AsInteger

Randomizei=2时,j从1变化到4,结束内层循环,i变成3

<Fori=1To3

i=3时,j从1变化到4,结束内层循环,i变成4

Forj=1To4

a(i,j)=Int(Rnd*31+20)结束外层循环。循环变量(i,j)的变化过程为

Nextj

Fori=1To3

Forj=1To4

s=s&a(i,j)

Nextj

s=s&Chr(13)&Chr(10)正好和二维数组引用的下标一致。

NextI

Textl.Text=s二维数组引用必须用二重循环实现

Enad计算机教研丁

例:下列程序完成在窗体上输出二维数组每行元素之和。回答问题:

1、程序有没有错?2、错在哪里?3、输出语句应出现在什么地方?

OptionBase1

PrivateSubForm_Click()W.Foral・]回凶

Dima(4,5)AsInteger171153158129130

DimiAsInteger,jAsInteger178101176182171

DimsumAsInteger104141187179137

197188105195136

Fori=1To4

1I和741

Forj=1To5

2B和808

a(i,j)=Int(101*Rnd)+1003和748

B

Printa(i,j);4和821

Nextj

Print

Nexti

Print

Fori=Uh-J-----Sum=O

Forj=1To5

sum=sum+a(i,j)程序执行结果界面

NextJ

NextIPrint"第i;”行元素之和为:”;sum

Print"第";i;''行元素之和为sum

EndSub,念.中国药科大学

U计算机教研室

VisualBasic

有关二维数组的常见问题:'程序:

•转置

•求对角线元素之和

•求周边元素之和

•求上、下三角形元素之和

•求最大、最小元素

•二维数组相乘

京东中国药科大学

27学计算机教研室

例:产生一个3行4列的矩阵,数据为[20,50]之间的随机数,然后

将矩阵转置输出。

OptionBase1

PrivateSubForm_Click()

DimiAsInteger,jAsInteger,a(3,4)AsInteger

Randomize

Fori=1To3

Forj=1To4

a(iJ)=Int(Rnd*31+20)

Printa(i5j);

Nextj

Print

NextI

Fori=1To4Forj=1To4

Forj=1ToFori=1To思考题:

Printa(j,i);Printa(i,j);

NextjNextj求n阶方阵的转置

PrintPrint

NextiNexti矩阵,并输出?

FT再为甲f大学

EndSub十算机教研室

VisualBasic

_____mj____'程序:

1、分别求一个3*3二维数组的主、付对角线元

素之和。

2、求二维数组周边元素之和。

5.3动态数组_________________VisualBasic

定义:在程序运行过程中,可重新定义大小的数组。

说明语句:

①Dim数组名()as类型一在变量说明部分

②ReDim[Preserve]<数组名)(维界定义)一在可执行语句中

PrivateSubForm_ClickQ

DimPin()AsInteger,说明整型的动态数组Pin

DimxasInteger

X=Val(Textl.text)

ReDimPin(x),重新说明数组Pin

•••

EndSub

注意:-Redim是可执行语句,只能出现在过程中

-重新定义动态数组时,不能改变数据类型

,漓中国药科大学

-重定义时,维界定义中可以有变量U计算机教研室

VisualBasic

说明'程序:

-如果Redim重定义的数组不存在,则相当于一个说明语句

-当缺省Preserve参数时,定义后,原来存储在数组中的数据

全部丢失,此时可重新定义数组的维数和各维的上下界。

-当有Preserve参数时,可保留原数组中的数据,但不能改变

数组的维数,且只能改变最后一维的维上界。

-用Dim语句声明过的数组,只是一个空数组,系统并没有给它

分配内存空间,此时,不能对数组元素进行存取操作,否则出

错。必须用ReDim语句重新定义其大小,系统才给它分配内存,

用户才能对此数组元素进行操作。

31看品中国药科大学

以计算机教研室

VisualBasic

举例:'程序:

Optionbase1

Dimdynarry()asinteger

Dimxasinteger,yasinteger

Dynarry(1)=1非法语句,出错

Redimdynarry(9)

Dynarry(1)=1给一维数组元素赋值

x=2:y=4

Redimdynarry(x,y)

Dynarry(1,1)二1给二维数组元素赋值

Erasedynarry

Dynarry(1,1)二1非法语句,出错.漓卜中国药科大学

U计算机教研室

VisualBasic

举例'程序逐匕

OptionExplicit

OptionBase1

PrivateSubFonn_Click(:

DimiAsInteger,a'

ReDima(4)

Fori=1To4

a(i)=i如果省去Preserve会怎样?

Printa(i);

Nexti

Print

ReDimPreservea(6)

a(5)=5

a(6)=6

Fori=1To6

Printa(i);

Nexti

EndSub司药科大学

茬机教研室

VisualBasic

5.4控件数组'程序:

5.4.1基本概念

5.4.2建立控件数组

5.4.3使用控件数组

ALoad语句

AUnload语句

.漓卜中国药科大学

34

以计算机教研室

VisualBasic

5.4.1基本概念'程序:

——由一组具有相同名称的同类型控件组成。

---控件数组中的每个控件都由其下标属性-皿4箜标识。

即:控件数组名(下标)

如,Optionl(O)、Optionl⑴、Optionl(2)

——控件数组中的每一个控件元素可有自己独立的属性设置,

但共享同一个事件过程,即无论是控件数组中的哪一个控件

响应用户的事件,都触发同一事件过程,但相对于简单控件,

事件过程增加了Index参数,由其指明具体响应的控件。

例如:PrivateSubOption1_Click(lndexAsInteger)

■■■

EndSub

注意:控件数组的第一个下标为0

优点:使用控件数组编写代码简单、易于维护

健去中国药科大学

35

a计算机教研室

VisualBasic

w4-z建立控件数组'程序:

L创建同名控件

b在窗体中放置一组控件(同类型),确定某个控件为第一

个元素(可将其Index属性设为0)。

e按顺序将其它控件的Name(名称)属性改成第一个控件

名称(同名)。

b系统提示“已有一个控件为***,创建一个控件数组

吗?”,若第一个控件的Index属性已设为0,则不出现提示。

.漓卜中国药科大学

36

U计算机教研室

VisualBasic

'程序:

2.复制现存控件

今在窗体中放置一个控件,设置好相应的属性

今选定该控件,单击“复制”按钮

今单击“粘贴”按钮

今系统提示”已有一个控件为***,创建一仝控解海吗?“

今单击“是"按钮件Index

属性,7

系统给每个数组控件标明唯二的索引号,

即为该对象的Index属性(下标)。"麝端

例如:在窗体上有一个包含四个命令按纽的控件数组。这4个命令

按纽的名称相同,均为Commandl,系统通过下标一Index属性,

区别4个不同的控件:Commandl(O),Commandl(l),

Commandl(2),Commandl(3)。

这个由4个按纽组成的命令按纽控件数组,具有相同的事件过

程,由参数Index决定,到底是哪个按纽被触发。在事件过程中,

应根据Index参数,分别进行不同的操作。

PrivateSubCommandl_Click(Indexasinteger)

Selectcaseindex

Case0

••♦

Case1

••♦

Endselect

EndSub

38「国药科大学

计算机教研室

VisualBasic

5.4.3使用控件数组'程序:

LOAD语句

[格式]loadobject(index)

[功能]在程序运行时,向控件数组中添加控件。

UNLOAD语句

[格式]unloadobject(index)

[功能]在程序运行时,删除控件数组中用Load产生的对

象数组元素。____-—

注意上二明白了吗?还是飞

-index可以跳序;上机验证一下吧!

-UNLOAD语句只能删除由L0A«一

-由LOAD语句添加的控件,其Visible属性为false,所以

要在程序中设置True,才能在窗体上可见;

-由LOAD语句添加的控件,其大小、位置与原控件一样,

隐藏在其背后,所以要重新破置它的Top等属性;⑥*疆藉

isualBasic

演示裁判程序设火

京东中国药科大学

40

U计算机教研室

PrivateSubCommandl_Click()

DimiAsInteger,scoreAsSingle

Fori=0To5

PrivateSubTextlKeyPress(IndexAsInteger,KeyAsciiAsInteger)

IfKeyAscii=13Then

IfIndex=5Then

Commandl.SetFocus

Else

Textl(Index+l).SetFocus

EndIf

EndIf

EndSubu

VisualBasic

5.5程序示例'程序:

a选择法排序

®冒泡法排序

a顺序查找

®二分查找

京东中国药科大学

42学计算机教研室

VisualBasic

例5-2:选择法排序。(设从大到小排序'程序山J

[分析]:先将N个数存入数组A(N),

第一轮比较,修A(l)与A(2)比较,若A(l)vA(2),则交换A(l)

和A(2)的值;再招1A(1)与A(3)、A(4)…A(N)依次按以上规则

比较和交换,第一轮比较完毕,N个数中最支数存放到A(l)中

第二轮比较,^A(2)与A(3)、A(4)…A(N)依次比较,结束后,

N个数中第二大数存放到A(2)日;

第三轮比较,将A(3)与A(4)、A(5)...A(N)依次

比较,完毕后,N个数中第三大数存放到A(3)中;

•••

第N-1轮比较,A(N-l)与A(N)进行比较;完毕后,A(N・1)中

存放第二小的数,显然A(N)中是最小的数。

这样,数组A中的N个元素经过N-1轮扫视,按从大到小的顺

序排列。

43/密鼠中国药科大学

母计算机教研室

[实例说明]:设无序数据为1、2、3、4、5、6,共有6个元

素,进行6-1=5轮比较。5次比较情况如下:

第一轮比较:

第二轮比较:第三车

A(l)a(2)a(3)a(4)a(5)a(6);比较:

6、2、1、3、4、5

213456vr6、5、2、1、3、4

3124566、3、1、2、4、5

6、5、3、1、2、4

412356、4、1、2、3、5

-------------6

5123466、5、4、1、2、3

6、5、1、2、3、4

6^1~2-5

第五轮比较:

6、5、4、3、2、1

44益中国药科大学

b计算机教研室

VisualBasic

[选择排序程序]'程序:

i既控制外层循环执行的次数,

又可作为被比较数的下标

ForN-l^-j既控制内层循环执行的次

Forj^Hl^toN数,又可作为比较数的下标

IfA(i)<AQ)Then

TEMP=A(i)

A(i尸A(j)

Ag)=TEMP

EndIf

Nextj

Nexti

,裕品中国药科大学

45

以计算机教研室

VisualBasic

直接排序法'程序:

•选择排序法的改进,每轮扫视,只交换一次数据——A(I)

仅与其后序元素中最大的元素交换。

•实现:增设一个point变量,记录本轮最大元素的下标。

在每轮扫视开始时,先设初值为I,然后让A(POINT)依

次与其后元素比较,当比某元素小时,将该大元素的下标

赋给POINT,即让A(POINT)指向本轮大的元素。

•当每轮扫视结束后,比较I与POINT的值,若不同,说明

A(I)中不是本轮的最大元素,则交换A(I)与A

(POINT)中的元素,否则不交换。

46针》中国药科大学

42计算机教研室

[直接排序程序]VisualBasic

'程序:

Fori=ltoN-l

point=i

Forj=i+1tuN

IfA(point)vA(j)Thenpuint=j

Nextj

Ifiv>pointthen

TEMP=A(i):A(i)=A(point):A(point)=TEMP

Endif

Nexti

虑.中国药科大学

47

U计算机教研室

VisualBasic

例:冒泡法排序。(设从大到小排序)'程序:

[分析]:

第一轮比较:将A(1)和A(2)比较,若A(1)vA(2)

则交换这两个数组元素的值,否则不交换;然后再用A(2)和

A(3)比较,处理方法相同;以此类推,直到A(N-1)和

A(N)比较后,这时A(N)中就存放了N个数中最小的数。

第二轮比较:将A⑴和A(2)、A(2)和A(3),........,

A(N-2)和A(N-l)依次比较,处理方法和第一轮相同,这

一轮比较结束后,A(N-1)中就存放了N个数中第二小的数。

第N-1轮比较:将A(1)和A(2)进行比较,处理同上,

则A(2)中存放了第二大的数,A(1)中显然是最大的数。

这样,经过N-1轮扫视,数组A中的N个元素按从大到小的顺

序排列。

48「潇工中国药科大学

垓计算机教研室

[实例说明]:设无序数据为1、2、3、4、5、6,共有6

个元素,进行6-1=5轮扫视。5次扫视情况如下:

第一轮扫视:

第二轮扫视:第三轮扫视:

、3、4、5、6

3、2、4、5、6、

2、、4、5、64、3、5、6、2、1

3、4、2、5、6、

2、3、4、1、5、6

vr4、5、3、6、2、1

2、3、4、5、1、63、4、5、2、6、

4、5、6、3、2、1

2、3、4、5、6、13、4、5、6、2、--------"

--------------------------

第四轮扫视:第五轨扫视:

^5.4、3、2、1

5、4、6、3、2、1

5、6、4、3、2、1

____

49中国药科大学

计算机教研室

VisualBasic

冒泡排序程序'程序:

For14也一红------i只控^夕谡循环执红的次数

Fori=l_j既控制内层循环执行的次

一数,又可作为比较数的下标

Ifa(j)va(j+l)Then

TEMP=A0):A(j尸A(j+l):A(j+l)=TEMP

EndIf

Nextj

Nexti

虑.中国药科大学

50

U计算机教研室

VisualBasic

改进的冒泡排序'程序:

Ub=Ubound(a)

Switch=True

DoWhileswitch

switch=false

Ub=ub-1

Forj=ltoub

Ifa(j)va(j+l)Then

swtich=true

TEMP=A(j):Ag)=AO+l):A(j+l)=TEMP

EndIf

Nextj

NextI

----------------------------------------------31---------------------------------二川一,…I大学

学计算机教研室

选择法:逐个比较,逆序交换

冒泡法:两两比较,逆序交换

XZ

要数

-例

PrivateSubForm_Click()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论