计算导论与程序设计:chap10结构、联合和枚举_第1页
计算导论与程序设计:chap10结构、联合和枚举_第2页
计算导论与程序设计:chap10结构、联合和枚举_第3页
计算导论与程序设计:chap10结构、联合和枚举_第4页
计算导论与程序设计:chap10结构、联合和枚举_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

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

文档简介

1、 1 第十四章第十四章 结构、联合和枚举结构、联合和枚举 2 14.1 引言 14.2 结构(类型) 1. 1. 结构类型的定义结构类型的定义 2. 2. 结构变量的定义与初始化结构变量的定义与初始化 3. 3. 访问结构变量成员访问结构变量成员 4. 4. 结构作为函数的参数结构作为函数的参数 5. 5. 结构数组结构数组 14.3 类型定义typedef 14.4 联合(类型) 14.5 枚举(类型) 提纲提纲 3 14.1 引言引言 在日常生活中,我们经常会用到一些表格。例如,下图在日常生活中,我们经常会用到一些表格。例如,下图 是一张图书目录:是一张图书目录: 为了用计算机程序实现对上

2、述表格的管理,需要先将上为了用计算机程序实现对上述表格的管理,需要先将上 述表格进行存储。如何存储?述表格进行存储。如何存储? 书名书名作者作者出版商出版商版权日期版权日期页数页数册数册数价格价格 书名1 张三 出版商1 2008809066 书名2 李四 出版商2 2008786777 书名3 王五 出版商3 2008908780 4 14.1 引言引言 根据以前的知识,可以定义根据以前的知识,可以定义7个数组来存储个数组来存储100本图书本图书 信息信息: char bookName10030; /存储书名存储书名 char author10030; /存储作者存储作者 char publ

3、isher10030; /存储存储出版商名出版商名 char date10010; /存储版权日期存储版权日期 int pages100; /存储页数存储页数 int copies100; /存储册数存储册数 float price100; /存储价格存储价格 5 14.1 引言引言 存在的问题:存在的问题: 1.任何一本图书的信息分散在内存各处,要了解任何一本图书的信息分散在内存各处,要了解一本图书一本图书 的信息,必须到各个数组的相应元素中去查找,很不的信息,必须到各个数组的相应元素中去查找,很不 方便。而且因为内存不集中,所以查找效率不高。方便。而且因为内存不集中,所以查找效率不高。 2

4、.存储结构显得比较零散,存储结构显得比较零散,不易管理。 而图书目录可以抽象为而图书目录可以抽象为线性表(线性表是具有相同数据(线性表是具有相同数据 类型的类型的n(n=0)个数据元素的连续序列),每个数据元素的连续序列),每一本图书一本图书 的信息是表中的一个元素。的信息是表中的一个元素。有没有可能用一个一维数 组来存储图书目录,每个数组元素存储一本图书的信 息? 如果可以,那一个数组元素存储了多个不同类型的数据,如果可以,那一个数组元素存储了多个不同类型的数据, 那数组元素的类型又该如何定义?那数组元素的类型又该如何定义? 6 14.1 引言引言 C语言在产生的时候,设计者就针对此类问题,

5、设语言在产生的时候,设计者就针对此类问题,设 计了一系列计了一系列用户自定义数据类型。用户可以根据。用户可以根据 具体问题的需要,设计符合自己要求的新的数据具体问题的需要,设计符合自己要求的新的数据 类型。类型。结构和和联合就是两种用户自定义的数据类就是两种用户自定义的数据类 型,结构可以用来解决上述问题。型,结构可以用来解决上述问题。 7 14.1 引言 14.2 结构(类型) 1. 1. 结构类型的定义结构类型的定义 2. 2. 结构变量的定义与初始化结构变量的定义与初始化 3. 3. 访问结构变量成员访问结构变量成员 4. 4. 结构作为函数的参数结构作为函数的参数 5. 5. 结构数组

6、结构数组 14.3 类型定义typedef 14.4 联合(类型) 14.5 枚举(类型) 提纲提纲 8 14.2 结构结构-定义定义 一、结构的定义(逻辑结构:用户自定义类型)一、结构的定义(逻辑结构:用户自定义类型) 结构是用其他类型的对象构造出来的派生数据类结构是用其他类型的对象构造出来的派生数据类 型(注意:结构是一种数据类型)。型(注意:结构是一种数据类型)。 struct 结构名结构名 数据类型数据类型 数据项数据项1; 数据类型数据类型 数据项数据项2; 数据类型数据类型 数据项数据项; ; 9 14.2 结构结构-定义定义 上述图书目录的例子可以定义如下形式的结构(为了简化,上

7、述图书目录的例子可以定义如下形式的结构(为了简化, 假设一本书只包括书名、作者名和价格):假设一本书只包括书名、作者名和价格): #define MAXTITL 41 /书名最大长度书名最大长度 #define MAXAUTL 31 /作者名最大长度作者名最大长度 struct book char titleMAXTITL; char authorMAXAUTL ; float value; ; 定义了一个名为定义了一个名为book的结构(类的结构(类 型)。该结构有型)。该结构有3个数据项:个数据项:title、 aothor和和value 用该结构定义的结构变量可以用用该结构定义的结构变量

8、可以用 来存放一本图书的信息,包括书来存放一本图书的信息,包括书 名、作者名和价格。名、作者名和价格。 #include #define MAXTITL 41 #define MAXAUTL 31 struct book char titleMAXTITL; char authorMAXAUTL; float value; ; int main(void) struct book library; / 把把library 声明为声明为 book类型的变量类型的变量 printf(Please enter the book title.n); gets(library.title); / acc

9、ess to the title portion printf(Now enter the author.n); gets(library.author); printf(Now enter the value.n); scanf(%f, printf(%s by %s: $%.2fn,library.title, library.author, library.value); printf(%s: %s ($%.2f)n, library.author, library.title, library.value); printf(Done.n); return 0; 结构成员访问后面介绍结构

10、成员访问后面介绍 12 14.2 结构结构-定义定义 1.“结构名结构名”和和“数据项数据项”的命名规则,与变量名相同。的命名规则,与变量名相同。 2. 数据类型相同的数据项,既可逐个、逐行分别定义,也数据类型相同的数据项,既可逐个、逐行分别定义,也 可合并成一行定义。可合并成一行定义。 struct book char titleMAXTITL,authorMAXAUTL ; float value; 3. 结构中的数据项,可以是不同类型(和数组不同)。既结构中的数据项,可以是不同类型(和数组不同)。既 可以是整形、字符型、浮点型、指针,也允许是数组或可以是整形、字符型、浮点型、指针,也允许

11、是数组或 者另一个已经定义的结构。者另一个已经定义的结构。【链接链接】 4.个数据项称为结构的个成员(或分量)。同一结构个数据项称为结构的个成员(或分量)。同一结构 中的成员不能同名,不同结构中的成员可以同名。中的成员不能同名,不同结构中的成员可以同名。 13 14.2 结构结构-定义定义 5. 结构既可以在函数外定义,也可以在函数内定义。结构既可以在函数外定义,也可以在函数内定义。 但函数内定义的结构只能在本函数中使用。但函数内定义的结构只能在本函数中使用。 6. 不能在不能在struct book结构中定义结构中定义struct book类型的变量。类型的变量。 但可以定义指向但可以定义指

12、向struct book类型的指针(称为自引用类型的指针(称为自引用 结构)。结构)。 struct book char title4; char author4 ; float value; struct book book; struct book char title4; char author4 ; float value; struct book * book; 后面讲链表时会用到后面讲链表时会用到 14 14.2 结构结构-定义定义 7. 用户自己定义的用户自己定义的结构是一种是一种数据类型,与系统定,与系统定 义的标准类型(义的标准类型(int、char等)一样,可用来定义等)一

13、样,可用来定义 结构变量。结构变量。结构变量是用一个名字引用的相关变结构变量是用一个名字引用的相关变 量的集合。量的集合。 15 14.1 引言 14.2 结构(类型) 1. 1. 结构类型的定义结构类型的定义 2. 2. 结构变量的定义与初始化结构变量的定义与初始化 3. 3. 访问结构变量成员访问结构变量成员 4. 4. 结构作为函数的参数结构作为函数的参数 5. 5. 结构数组结构数组 14.3 类型定义typedef 14.4 联合(类型) 14.5 枚举(类型) 提纲提纲 14.2 结构结构-变量定义变量定义 (1)间接定义法先定义结构类型,再定义结构变量 struct book c

14、har titleMAXTITL; char authorMAXAUTL ; float value; ; int main(void) struct book library, *lPtr, aBook10; lPtr= . library是结构变量是结构变量 17 14.2 结构结构-变量定义变量定义 (2)直接定义法定义结构类型的同时,定义结构变量 struct book char titleMAXTITL; char authorMAXAUTL ; float value; library, *lPtr, aBook10; /在定义之后跟变量名在定义之后跟变量名 18 14.2 结构结

15、构-变量定义变量定义 说明:说明: 1. 结构与结构变量是两个不同的概念,其区别如同结构与结构变量是两个不同的概念,其区别如同int类型类型 与与int型变量的区别一样。型变量的区别一样。 2. 结构中的成员名,可以与程序中的变量同名,它们代表结构中的成员名,可以与程序中的变量同名,它们代表 不同的对象,互不干扰。不同的对象,互不干扰。 14.2 结构结构-变量定义变量定义 结构体的存储结构体的存储结构结构 结构体在内存中按照结构体在内存中按照成员申明顺序成员申明顺序依次依次存放存放 结构体在内存中所占的字节数,通常并不等于结构体在内存中所占的字节数,通常并不等于 结构体中所有成员所占字节数的

16、结构体中所有成员所占字节数的总和。因为不总和。因为不 同硬件平台和访问性能的原因,需要对结构体同硬件平台和访问性能的原因,需要对结构体 成员重新进行内存调整。成员重新进行内存调整。 20 struct date /*日期结构类型日期结构类型*/ int year; /*年年*/ int month; /*月月*/ int day; /*日日*/ ; struct student /*学生信息结构类型学生信息结构类型*/ char no7; /*学号学号*/ char name9; /*姓名姓名*/ char sex3; /*性别性别*/ struct date birthday; /*生日生日

17、*/ ; 嵌套结构嵌套结构 【返回返回】 21 main() struct student stu; printf(%dn,sizeof(struct student); printf(%pn,stu.no); printf(%pn,); printf(%pn,stu.sex); printf(%pn, system(“pause”); return 0; 32 0022FF30 0022FF37 0022FF40 0022FF44 no name sex year month day 0022FF30 0022FF37 0022FF40 0022FF44 stu 7字节字节

18、9字节字节 4字节字节 12字节字节 根据定义成员根据定义成员sex只需要只需要3个字节,但个字节,但 实际分配了实际分配了4字节的内存,剩下的字节的内存,剩下的1个个 字节没用。因此不能比较结构变量!字节没用。因此不能比较结构变量! 14.2 结构结构-变量的初始化变量的初始化 在定义结构变量的同时可以进行初始化在定义结构变量的同时可以进行初始化 struct book library= The pirate and the Devious DamselThe pirate and the Devious Damsel , , Renee Vivotte, Renee Vivotte, 1.

19、95 1.95 ; 如果初始化的个数少于结构中的成员数目,剩余成如果初始化的个数少于结构中的成员数目,剩余成 员被自动化初始为员被自动化初始为0(整型、浮点型)、(整型、浮点型)、0 (字符或者字符串型)、(字符或者字符串型)、NULL(指针)(指针) The pirate and the Devious DamselThe pirate and the Devious Damsel Renee VivotteRenee Vivotte 1.95 结构变量结构变量library 23 14.2 结构结构-变量的初始化变量的初始化 struct student stu=“000102”,“张三张

20、三”,“男男”, 1980,9,20;/注意生日的初始化注意生日的初始化 或者或者 struct student stu=“000102”,“张三张三”,“男男”, 1980, 9, 20; 000102 张三张三 男男 1980 9 20 stu 24 14.1 引言 14.2 结构(类型) 1. 1. 结构类型的定义结构类型的定义 2. 2. 结构变量的定义与初始化结构变量的定义与初始化 3. 3. 访问结构变量成员访问结构变量成员 4. 4. 结构作为函数的参数结构作为函数的参数 5. 5. 结构数组结构数组 14.3 类型定义typedef 14.4 联合(类型) 14.5 枚举(类型

21、) 提纲提纲 对结构变量的操作有:对结构变量的操作有: 1) 获取结构变量的地址获取结构变量的地址: 2) 访问结构变量的成员访问结构变量的成员; 3) 把结构变量赋给同一类型的结构变量把结构变量赋给同一类型的结构变量: book1=book2;/将将book2中各成员的值赋给中各成员的值赋给 book1中各成员中各成员 4) 用用sizeof运算符确定结构变量的大小运算符确定结构变量的大小 sizeof(library)、sizeof(struct book) 26 14.5 访问结构变量成员访问结构变量成员 1使用结构成员运算符“.” 语法:结构变量名.结构成员名 main() struc

22、t student stu=“000102”,“张三张三”,“男男”, 1980,9,20;/注意生日的初始化注意生日的初始化 printf(No:%sn, stu.no); printf(Name:%sn, ); printf(“Sex:%sn”, stu.sex); printf(Birthday:%d-, stu.birthday.year); printf(%d-, stu.birthday.month); printf(%dn, stu.birthday.day); system(pause); return 0; 注意这种结构注意这种结构 成员本身又是成员本身又是

23、结构的情况结构的情况 struct student char no7; char name9; char sex3; struct date birthday; ; No:000102 Name:张三张三 Sex:男男 Birthday:1980-9-20 请按任意键继续请按任意键继续. . . .运算符是自左向右运算符是自左向右 结合的,相当于结合的,相当于 (stu.birthday).year 27 14.2结构结构- 访问结构变量成员赋值访问结构变量成员赋值 main() struct student stu; scanf(%s, stu.no); scanf(%s,

24、); scanf(%s, stu.sex); scanf(“%d”, scanf(%d, scanf(%d, system(“pause”); return 0; . 运算优先级高于运算优先级高于 struct student * ptr = printf(No:%sn, ptr-no); printf(Name:%sn, ptr-name); printf(Sex:%sn, ptr-sex); printf(Birthday:%d-, ptr-birthday.year); printf(%d-, ptr-birthday.month); printf(%dn, ptr-birthday.d

25、ay); system(pause); return 0; 注意注意:year前面前面 是是.而不是而不是- 运算符运算符. 和和-优先级优先级 相同,自左向右结相同,自左向右结 合,相当于合,相当于 (ptr-birthday).year 方法方法1 31 14.2 访问结构变量成员使用指针运算符访问结构变量成员使用指针运算符 main() struct student stu=000102,张三张三,男男,1980,9,20; struct student * ptr= printf(No:%sn, (*ptr).no); printf(Name:%sn, (*ptr). name); p

26、rintf(Sex:%sn, (*ptr). sex); printf(Birthday:%d-, (*ptr). birthday.year); printf(%d-, (*ptr). birthday.month); printf(%dn, (*ptr). birthday.day); system(pause); return 0; 此时此时birthday前前 面是面是.而不是而不是- 方法方法2 32 14.2结构结构 访问结构成员赋值访问结构成员赋值 main() struct student stu,* ptr= scanf(%s, ptr-no); scanf(%s, ptr-

27、name); scanf(%s, ptr-sex); scanf(%d, scanf(%d, scanf(%d, system(“pause”); return 0; 相当于相当于 000102 张三张三 男男 1980 9 20 0022FF30 0022FF37 0022FF40 0022FF44 stu a 0022FF37 func main i 1980 37 14.2结构结构 结构作为函数参数结构作为函数参数 2.传递整个结构传递整个结构(形参是实参的副本,两者互不影响)(形参是实参的副本,两者互不影响) void func(struct student stu)/*函数定义函数定

28、义*/ func(theStu);/* main函数中的函数调用函数中的函数调用*/ 000102 张三张三 男男 1980 9 20 0011AA10 0011AA17 0011AA20 0011AA24 stu func 000102 张三张三 男男 1980 9 20 0022FF30 0022FF37 0022FF40 0022FF44 theStu main 38 14.2结构结构 结构作为函数参数结构作为函数参数 3.传递指向结构的指针(被调用函数可以操作传递指向结构的指针(被调用函数可以操作 调用函数中的结构变量)调用函数中的结构变量) void func(struct stud

29、ent * stuPtr)/*函数定义函数定义*/ func(/*函数调用函数调用*/ no name sex year month day 0022FF30 0022FF37 0022FF40 0022FF44 stu 0022FF30 stuPtr main func 14.2结构结构 结构作为函数参数结构作为函数参数 传递结构、还是指向结构的指针? 传递指针传递指针 n优点:既可以工作在较早的优点:既可以工作在较早的C实现上,也可以工实现上,也可以工 作在较新的作在较新的C实现上;执行速度快:只需要传递实现上;执行速度快:只需要传递 一个地址。一个地址。 n缺点:缺少对数据的保护(可以使

30、用缺点:缺少对数据的保护(可以使用const限定限定 词解决这个问题)。词解决这个问题)。 传递结构:传递结构: n优点:安全性。函数处理的是原始数据的副本。优点:安全性。函数处理的是原始数据的副本。 n缺点:缺点: 早期的早期的C实现不处理这种代码实现不处理这种代码 浪费时间和空间浪费时间和空间 40 14.1 引言 14.2 结构(类型) 1. 1. 结构类型的定义结构类型的定义 2. 2. 结构变量的定义与初始化结构变量的定义与初始化 3. 3. 访问结构变量成员访问结构变量成员 4. 4. 结构作为函数的参数结构作为函数的参数 5. 5. 结构数组结构数组 14.3 类型定义typed

31、ef 14.4 联合(类型) 14.5 枚举(类型) 提纲提纲 14.2结构结构 结构数组结构数组 library0.titlelibrary0.authorlibrary0.value library1.titlelibrary1.authorlibrary1.value library2.titlelibrary2.authorlibrary2.value library99.titlelibrary99.authorlibrary99.value library0library0 library1library1 library2library2 library99library99 /

32、定义一个长为定义一个长为100的结构数组,用来存储的结构数组,用来存储100本图书信息本图书信息 struct book library100; #include #define MAXTITL 40 #define MAXAUTL 40 #define MAXBKS 100 struct book char titleMAXTITL; char authorMAXAUTL; float value; ; 14.2结构结构 结构数组结构数组 int main(void) struct book libraryMAXBKS; int count = 0,index; printf(Please

33、enter the book title.n); while (count MAXBKS gets(librarycount.author); printf(Now enter the value.n); scanf(%f, while (getchar() != n) continue; if (count 0) printf(Here is the list of your books:n); for (index = 0; index count; index+) printf(%s by %s: $%.2fn, libraryindex.title, libraryindex.auth

34、or, libraryindex.value); else printf(No books? Too bad.n); return 0; 14.2结构结构 结构数组结构数组 45 14.1 引言 14.2 结构(类型) 1. 1. 结构类型的定义结构类型的定义 2. 2. 结构变量的定义与初始化结构变量的定义与初始化 3. 3. 访问结构变量成员访问结构变量成员 4. 4. 结构作为函数的参数结构作为函数的参数 5. 5. 结构数组结构数组 14.3 类型定义typedef 14.4 联合(类型) 14.5 枚举(类型) 提纲提纲 46 14.7 类型定义类型定义 typedef 可以用可以用

35、typedef建立已定义好的数据类型的建立已定义好的数据类型的别名。 定义新的类型定义新的类型Book,它是类型,它是类型struct book 的的 别名别名 typedef struct book Book; 定义一个结构数组:定义一个结构数组: Book library100; 数据类型名数据类型名别名别名 47 14.7 类型定义类型定义 typedef 用用typedef只是给已有类型增加个别名,并不能只是给已有类型增加个别名,并不能 创造个新的类型。就如同人一样,除学名外,创造个新的类型。就如同人一样,除学名外, 可以再取一个小名(或雅号),但并不能创造可以再取一个小名(或雅号),

36、但并不能创造 出另一个人来。出另一个人来。 数据类型数据类型 别名的作用,相当于给数据类型起个名别名的作用,相当于给数据类型起个名 字,使其在定义变量时与字,使其在定义变量时与 intfloatchar 用法一致用法一致 48 洗牌和发牌游戏模拟洗牌和发牌游戏模拟 洗牌和发牌游戏模拟洗牌和发牌游戏模拟 #include #include #include struct card char * face; char * suit; ; typedef struct card Card; void fillDeck(Card * wDeck,char * wFace,char * wSuit);

37、void shuffle(Card * wDeck); void deal(Card * wDeck); 49 int main(void) Card deck52; char * face=Ace,Deuce,Three,Four,Five, Six,Seven,Eight,Nine,Ten, Jeck,Queen,King; char * suit=Hearts,Diamonds,Clubs,Spades; srand(time(NULL); fillDeck(deck,face,suit); /初始化一副牌初始化一副牌 shuffle(deck); /洗牌洗牌 deal(deck); /

38、发牌发牌 return 0; suit suit0 suit1 suit2 suit3 face face0 face11 face12 50 初始化一副牌(算法初始化一副牌(算法1) void fillDeck(Card * wDeck,char * wFace,char * wSuit) int i; i=0; for(suit=0;suit=3;suit+) for(face=0;face=12;face+) decki.suit=wSuitsuit; decki.face=wFaceface; i+; 初始化一副牌(算法初始化一副牌(算法2) void fillDeck(Card *

39、wDeck,char * wFace,char * wSuit) /初始化发牌初始化发牌 int i; for(i=0;i52;i+) wDecki.face=wFacei%13; wDecki.suit=wSuiti/13; 51 分析:当分析:当i取值为取值为012时,时,i/13值为值为0, 因此前因此前13张牌的花色为红心,面值分别张牌的花色为红心,面值分别 是是Ace到到King。以此类推。以此类推。 52 洗牌洗牌 void shuffle(Card * wDeck) /洗牌洗牌 int i, j; Card temp; for(i=0;i52;i+) j=rand()%52; t

40、emp=wDecki; wDecki=wDeckj; wDeckj=temp; 洗牌思路:每张牌都和随机洗牌思路:每张牌都和随机 抽取的另外一张牌交换一次。抽取的另外一张牌交换一次。 53 发牌发牌 void deal(Card * wDeck)/发牌发牌 int i; for(i=0;i” main() union number value,* ptr= value.x=10; printf(int:%d,float:%fn, value.x, value.y); ptr-y=100.0; printf(int:%d, float:%fn, ptr-x, (*ptr).y); system(

41、pause); return 0; int:10, float:0.000000 int:0, float:100.000000 请按任意键继续请按任意键继续. . . 64 14.4 联合联合 五五.联合的用途联合的用途 学生基本信息包括:姓名、出生日期、学号和班级学生基本信息包括:姓名、出生日期、学号和班级 教师基本信息包括:姓名、出生日期、工号、职称和开始教师基本信息包括:姓名、出生日期、工号、职称和开始 工作年工作年 65 14.4 联合联合 struct student /*学生信息结构类型学生信息结构类型*/ char name10; /*姓名姓名*/ struct date bi

42、rthday; /*生日生日*/ char no7; /*学号学号*/ char class5; /*班级班级*/ ; struct teacher /*教师信息结构类型教师信息结构类型*/ char name10; /*姓名姓名*/ struct date birthday; /*生日生日*/ char no4; /*工号工号*/ char class5; /*职称职称*/ int startYear; /*开始工作年开始工作年*/ ; 方法方法1:分:分 别针对学生别针对学生 和老师定义和老师定义 结构结构 66 方法方法2:采用联合。:采用联合。 14.4 联合联合 用于区分是学用于区分

43、是学 生还是老师生还是老师 67 /*将学生和老师的特殊信息分别定义成结构将学生和老师的特殊信息分别定义成结构*/ struct student /*学生特殊信息结构类型学生特殊信息结构类型*/ char no7; /*学号学号*/ char class5; /*班级班级*/ ; struct teacher /*教师特殊信息结构类型教师特殊信息结构类型*/ char no4; /*工号工号*/ char class5; /*职称职称*/ int startYear; /*开始工作年开始工作年*/ ; 14.4 联合联合 68 union roletype/*描述不同类人员信息的联合描述不同类人员信息的联合*/ struct student studentField; struct teacher teacherFiel

温馨提示

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

评论

0/150

提交评论