北京科技大学C语言第7章.ppt

上传人:xt****7 文档编号:5367245 上传时间:2020-01-27 格式:PPT 页数:86 大小:1.09MB
返回 下载 相关 举报
北京科技大学C语言第7章.ppt_第1页
第1页 / 共86页
北京科技大学C语言第7章.ppt_第2页
第2页 / 共86页
北京科技大学C语言第7章.ppt_第3页
第3页 / 共86页
点击查看更多>>
资源描述
1 第7章其他自定义数据类型 北京科技大学计算机系 C语言程序设计 2020 1 27 2 第7章结构体与共用体 主要内容7 1构造数据类型概述7 2结构体类型7 3共用体类型7 4枚举类型7 5类型重命名7 6案例分析 2020 1 27 3 一个学生的信息有学号 姓名 性别 年龄 住址 成绩等 一本图书的信息有分类编号 书名 作者 出版社 出版日期 价格 库存量等 如何描述这些类型不同的相关数据 7 1构造数据类型概述 信息管理 结构体 一种构造类型数据结构体由若干不同类型的数据项组成 构成结构体的各个数据项称为结构体成员 2020 1 27 4 struct结构体名 数据类型1成员名1 数据类型2成员名2 数据类型n成员名n 7 2结构体类型 7 2 1结构体与结构体类型的定义 结构体类型定义的一般形式 struct为关键字 结构体名是用户定义的类型标识 中是组成该结构体的成员 成员的数据类型可以是C语言所允许的任何数据类型 2020 1 27 5 例如图书类型的定义 structbookcard charnum 10 图书分类编号是字符数组类型 charname 30 书名是字符数组类型 charauthor 30 作者是字符数组类型 charpublisher 60 出版社是字符数组类型 floatprice 价格是单精度实型 intn 库存量是整型 7 2结构体类型 7 2 1结构体与结构体类型的定义 2020 1 27 6 例如学生类型的定义 structstudent charnum 8 学号是字符数组类型 charname 30 姓名是字符数组类型 charsex 性别是字符型 intage 年龄是整型 charaddr 60 住址是字符数组类型 intscore 6 成绩是整型数组类型 7 2结构体类型 7 2 1结构体与结构体类型的定义 2020 1 27 7 7 2结构体类型 7 2 2结构体变量的定义 引用与初始化 1 结构体类型变量的定义 利用已定义的结构体类型名定义变量struct结构体名变量名表 例如 structbookcardbook1 100 structstudents 30 t1 t2 结构体变量的各个成员在内存中占用连续存储区域 结构体变量所占内存大小为结构体中每个成员所占用内存的长度之和 2020 1 27 8 类型与变量是不同的概念 应先定义一个结构体类型 而后再定义结构体变量 系统对类型不分配空间 仅对变量分配空间 只能对变量赋值 存取或运算 而不能对一个类型赋值 存取或运算 成员也可以是结构体变量 对结构中的成员 可以单独使用 它的作用与地位相当于普通变量 成员名可与程序中的变量名相同时 也可与不同结构体类型的成员名相同 二者代表不同的对象 structdate intyear month day structstudent charnum 8 charname 30 charsex structdatebirthday 成员为结构体类型 charaddr 60 intscore 6 7 2结构体类型 结构体类型与变量的说明 2020 1 27 9 7 2 2结构体变量的定义 引用与初始化 1 结构体类型变量的定义 在定义结构体类型的同时定义变量 例如 structstudent charnum 8 name 20 sex intage floatscore st 30 struct结构体名 成员定义表 变量名表 2020 1 27 10 1 结构体类型变量的定义 直接定义结构体类型变量 例如 struct charnum 8 name 20 sex intage floatscore st 30 a b c struct 成员定义表 变量名表 7 2 2结构体变量的定义 引用与初始化 2020 1 27 11 2 结构体变量的初始化 例7 4 结构体变量的初始化 structdate intyear month day structstudent charnum 8 name 20 sex structdatebirthday floatscore a 40826011 Liming M 1991 2 9 87 5 b 40826025 Zhangqiang F 1990 5 12 85 c 如果初值个数少于结构体成员个数 则将无初值对应的成员赋以0值 如果初值个数多于结构体成员个数 则编译出错 7 2 2结构体变量的定义 引用与初始化 2020 1 27 12 2 结构体变量的初始化 例7 5 结构体数组的初始化 structs charnum 8 name 20 sex floatscore stu 3 40826011 Liming M 87 5 40826025 Zhangqiang F 85 40826032 Wangxinping F 90 元素的个数可以省略 根据赋初值时结构体常量的个数确定数组元素的个数 7 2 2结构体变量的定义 引用与初始化 2020 1 27 13 3 结构体变量的运算 用sizeof运算符计算结构体变量所占内存空间 structdate intyear month day structstudent charnum 8 name 20 sex structdatebirthday floatscore a sizeof a 的结果为8 20 1 12 4 45sizeof structstudent 的结果为45 7 2 2结构体变量的定义 引用与初始化 2020 1 27 14 3 结构体变量的运算 同类型结构体变量之间的赋值运算 结构体变量之间进行赋值时 系统将按成员一一对应赋值 structdate intyear month day structstudent charnum 8 name 20 sex structdatebirthday floatscore a 40826011 Liming M 1977 12 9 87 5 b c c a 7 2 2结构体变量的定义 引用与初始化 2020 1 27 15 3 结构体变量的运算 对结构体变量进行取址运算 structdate intyear month day structstudent charnum 8 name 20 sex structdatebirthday floatscore a 对结构体变量a进行 a运算 可以得到a的首地址 它是结构体类型指针 7 2 2结构体变量的定义 引用与初始化 2020 1 27 16 4 结构体变量成员的引用 结构体变量成员引用的一般形式 结构体变量名 成员名 结构体变量a的各成员可分别表示为a num a name a sex a birthday a score structdate intyear month day structstudent charnum 8 name 20 sex structdatebirthday floatscore a 是分量运算符 运算级别最高 a birthday yeara birthday montha birthday day 结构体变量的各个成员可进行何种运算 由该成员的数据类型决定 7 2 2结构体变量的定义 引用与初始化 2020 1 27 17 例7 6 编写一个统计选票的程序 structcandidate charname 20 name为候选人姓名 intcount count为候选人得票数 list invalid 0 Zhang 0 Wang 0 Li 0 Zhao 0 Liu 0 7 2 2结构体变量的定义 引用与初始化 2020 1 27 18 main inti n printf Entervote n scanf d 输入所投候选人编号 7 2 2结构体变量的定义 引用与初始化 2020 1 27 19 for i 1 i 5 i printf s d n list i name list i count printf s d n list 0 name list 0 count 7 2 2结构体变量的定义 引用与初始化 2020 1 27 20 7 2结构体类型 1 结构体指针变量的定义 结构体指针变量定义的一般形式 struct结构体名 指针变量名 structdate intyear month day q 例如 structstudent p p是指向structstudent结构体变量的指针变量 7 2 3结构体的指针 2020 1 27 21 7 2 3结构体的指针 2 结构体成员的三种引用形式 用结构体变量名的引用形式 d yeard monthd day structdate intyear month day d p 用结构体指针变量的引用形式 p year p month p dayp yearp monthp day 是指向结构体成员运算符 优先级为一级 p d year 2020 1 27 22 例 输入今天的日期 然后输出该日期 main structdate 在函数中定义结构体类型 intyear month day today p 7 2 3结构体的指针 Entertodaydate YYYY MM DD 2006 06 23Today 2006 6 23 2020 1 27 23 3 指向结构体数组的指针 例7 7 利用结构体指针输出一组化学元素名称及其原子量 structlist inti charname 4 floatw tab 4 1 H 1 008 2 He 4 0026 3 Li 6 941 4 Be 9 01218 7 2 3结构体的指针 2020 1 27 24 3 指向结构体数组的指针 main structlist p printf No tName tAtomicWeight n for p tab pi p name p w NoNameAtomicWeight 1H1 008 2He4 0026 3Li6 941 4Be9 01218 7 2 3结构体的指针 2020 1 27 25 例7 8 分析自增自减运算对程序结果的影响 structcode inti charch a 1000 E 2000 F 3000 G 4000 H 接后面 7 2 3结构体的指针 2020 1 27 26 main structcode p a printf d t p i printf c t p ch printf d t p i printf c t p ch printf d t p i printf d n p i p 1001 H 3001 1001 F 2000 H 3000 3001 7 2 3结构体的指针 2020 1 27 27 7 2结构体类型 7 2 4链表 结构体的应用 链表中每个元素称为一个结点 构成链表的结点必须是结构体类型数据 1 链表的基本结构 head17822008324610855736图7 2动态单向链表示意图 相邻结点的地址不一定是连续的 依靠指针将它们连接起来 structnode charc structnode next 2020 1 27 28 C语言提供了相关的存储管理库函数 这里仅介绍其中三个 它们的原型说明在 stdlib h 头文件和 alloc h 头文件中 使用这三个函数时 应选择其中一个头文件包含到源程序中 动态分配存储区函数malloc 函数原型 void malloc unsignedsize 调用格式 malloc size 功能 在内存分配一个size字节的存储区 调用结果为新分配的存储区的首地址 是一个void类型指针 若分配失败 则返回NULL 即0 7 2 4链表 2 动态分配和释放存储单元 在ANSIC标准中 关键字void有两种用法 第一种用法 可将无返回值的函数定义为void类型第二种用法 用void 定义指针 这是一个指向非具体数据类型的指针 称为无类型指针 2020 1 27 29 例7 9 调用malloc函数分配所需存储单元 include includemain structst intn structst next p p structst malloc sizeof structst p n 5 p next NULL printf p n d tp next x n p n p next 将函数返回值转换成结构体指针 7 2 4链表 p n 5p next 0 2020 1 27 30 动态分配存储区函数calloc 函数原型 void calloc unsignedintn unsignedintsize 调用格式 calloc n size 功能 在内存分配一个n倍size字节的存储区 调用结果为新分配的存储区的首地址 是一个void类型指针 若分配失败 则返回NULL 即0 2 动态分配和释放存储单元 7 2 4链表 2020 1 27 31 例7 10 调用calloc函数分配所需存储单元 includemain inti ip ip int calloc 10 4 for i 0 i 10 i scanf d ip i for i 0 i 10 i printf d ip i printf n 动态分配了10个存放整型数据的存储单元 7 2 4链表 2020 1 27 32 释放动态分配存储区函数free 函数原型 voidfree void p 2 动态分配和释放存储单元 此函数无返回值 实参必须是一个指向动态分配存储区的指针 它可以是任何类型的指针变量 调用格式 free p 功能 释放p所指向的动态分配的存储区 7 2 4链表 2020 1 27 33 建立链表就是根据需要一个一个地开辟新结点 在结点中存放数据并建立结点之间的链接关系 例7 11 建立一个学生电话簿的单向链表函数 3 建立单向链表 7 2 4链表 2020 1 27 34 include include include defineNEW structnode malloc sizeof structnode structnode charname 20 tel 9 structnode next 7 2 4链表 2020 1 27 35 structnode create staticstructnode h structnode p q charname 20 h NULL printf name gets name while strlen name 0 当输入的姓名不是空串循环 p NEW 开辟新结点 if p NULL p为NULL 新结点分配失败 printf Allocationfailure n exit 0 结束程序运行 7 2 4链表 2020 1 27 36 strcpy p name name 为新结点中的成员赋值 printf tel gets p tel p next NULL if h NULL h为空 表示新结点为第一个结点 h p 头指针指向第一个结点 else h不为空 q next p 新结点与尾结点相连接 q p 使q指向新的尾结点 printf name gets name returnh 7 2 4链表 main structnode head head create 2020 1 27 37 例7 12 输出学生电话簿链表函数 4 输出单向链表中各结点信息 7 2 4链表 2020 1 27 38 include include include defineNEW structnode malloc sizeof structnode structnode charname 20 tel 9 structnode next voidprlist structnode head structnode p p head while p NULL printf s t s n p name p tel p p next main structnode head head create prlist head 2020 1 27 39 在链表中 如果要删除第i个结点 一般是将第 i 1 个结点直接与第 i 1 个结点相连接 然后再释放第i个结点的存储单元 5 删除单向链表中指定的结点 7 2 4链表 2020 1 27 40 例7 13 删除学生电话簿链表中指定学生的信息 a 删除第一个结点 head p next 7 2 4链表 2020 1 27 41 b 删除中间结点或尾结点 q next p next 7 2 4链表 2020 1 27 42 c 未找到指定的结点 strcmp x p name 0 7 2 4链表 2020 1 27 43 删除第一个结点 删除中间结点或尾结点 学生姓名 当姓名不同并且不是尾结点循环 7 2 4链表 2020 1 27 44 include include include defineNEW structnode malloc sizeof structnode structnode charname 20 tel 9 structnode next structnode delnode structnode head char x structnode p q staticstructnode h if head NULL printf Thisisaemptylist 空链表情况 returnhead p head while strcmp x p name 0 q指针尾随p指针向表尾移动 查找结点 2020 1 27 45 if strcmp x p name 0 if p head head p next 删除头结点 elseq next p next 删除中间或尾结点 free p 释放被删除的结点 elseprintf Notfound 未找到指定的结点 h head returnh 7 2 4链表 2020 1 27 46 将一个新结点插入到链表中 首先要寻找插入的位置 如果要求在第i个结点前插入 可设置三个工作指针p0 p和q p0是指向待插入结点的指针 利用p和q指针查找第i个结点 找到后再将新结点链接到链表上 6 在单向链表中插入结点 q q 新的第i个结点 7 2 4链表 2020 1 27 47 a 在表头插入结点 head p0 p0 next p 7 2 4链表 2020 1 27 48 b 在表中间插入结点 q next p0 p0 next p 7 2 4链表 2020 1 27 49 c 在表尾追加结点 p next p0 p0 next NULL 7 2 4链表 2020 1 27 50 例7 14 在学生电话簿链表中插入一个学生的信息 要求将新的信息插入在指定学生信息之前 如果未找到指定学生 则追加在链表尾部 当姓名不同并且不是尾结点循环 空表时插入结点 在表尾追加结点 在表头插入结点 在表中间插入结点 7 2 4链表 2020 1 27 51 include include include defineNEW structnode malloc sizeof structnode structnode charname 20 tel 9 structnode next 7 2 4链表 2020 1 27 52 7 2 4链表 2020 1 27 53 if strcmp x p name 0 if p head head p0 在表头插入结点 elseq next p0 在表中间插入结点 p0 next p else p next p0 在表尾插入结点 p0 next NULL h head returnh 7 2 4链表 2020 1 27 54 例7 15 学生电话簿链表管理程序 编制此程序可利用例7 11至例7 14的4个函数完成链表的建立 输出 删除和插入等功能 这里只需编制一个main函数完成对这4个函数的调用 include include defineNEW structnode malloc sizeof structnode structnode charname 20 tel 9 structnode next 7 2 4链表 2020 1 27 55 main structnode create delnode structnode char structnode insert structnode structnode char voidprlist structnode structnode head NULL stu chars 80 name 20 intc 7 2 4链表 2020 1 27 56 do do printf n MENU n printf 1 Createalist n printf 2 Printalist n printf 3 Deleteanode n printf 4 Insertanode n printf 0 Quit n printf Enteryourchoice 0 4 gets s c atoi s while c4 可以先选择1建立一个链表 然后根据需要选择功能2 功能3 功能4 直到选择0退出程序的运行 7 2 4链表 2020 1 27 57 switch c case1 head create break case2 prlist head break case3 printf nInputanamedeleted n gets name head delnode head name break case4 stu NEW printf nInputanewnode n printf name gets stu name printf tel gets stu tel stu next NULL printf nInsertposition n printf name gets name head insert head stu name while c 7 2 4链表 2020 1 27 58 结构体类型解决了如何描述一个逻辑上相关 但数据类型不同的一组分量的集合 在需要节省内存储空间时 c语言还提供了一种由若干个不同类型的数据项组成 但共享同一存储空间的构造类型 7 3共用体类型 7 3 1共用体与共用体类型的定义 共用体 一种构造类型数据共用体由若干不同类型的数据项组成 构成共用体的各个数据项称为共用体成员 由于共享的特性 只有最新存储的数据是有效的 2020 1 27 59 union共用体名 数据类型1成员名1 数据类型2成员名2 数据类型n成员名n 7 3共用体类型 7 3 1共用体与共用体类型的定义 共用体类型定义的一般形式 union为关键字 共用体名是用户定义的类型标识 中是组成该共用体的成员 成员的数据类型可以是C语言所允许的任何数据类型 2020 1 27 60 例如 unionutype inti charch longl charc 4 7 3共用体类型 7 3 1共用体与共用体类型的定义 定义了一个unionutype共用体类型 共用体类型定义不分配内存空间 只是说明此类型数据的组成情况 2020 1 27 61 7 3共用体类型 7 3 2共用体变量的定义与初始化 1 共用体变量的定义 利用已定义的共用体类型名定义变量union共用体名变量名表 例如 unionutypeu1 u2 按照共用体类型的组成 系统为定义的共用体变量分配内存单元 共用体变量所占内存大小等于共用体中占用内存的长度最长的成员 2020 1 27 62 7 3 2共用体变量的定义与初始化 1 共用体变量的定义 在定义共用体类型的同时定义变量 例如 unionutype inti charch longl charc 4 a b c union共用体名 成员定义表 变量名表 2020 1 27 63 1 共用体变量的定义 直接定义共用体类型变量 例如 union inti charch longl charc 4 a b c union 成员定义表 变量名表 7 3 2共用体变量的定义与初始化 2020 1 27 64 2 共用体变量的运算 用sizeof运算符计算共用体变量所占内存空间 unionutype inti charch longl charc 4 a b c sizeof a 的结果为4sizeof unionutype 的结果为4 7 3 2共用体变量的定义与初始化 2020 1 27 65 2 共用体变量的运算 同类型共用体变量之间的赋值运算 共用体变量之间进行赋值时 系统仅赋当前有效成员的值 即最新存储的数据 unionutype inti charch longl charc 4 a p 对共用体变量进行取址运算 7 3 2共用体变量的定义与初始化 2020 1 27 66 3 共用体变量成员的引用 共用体变量成员的引用有三种形式 例如 unionu charu1 intu2 x p 用共用体变量名的引用形式 x u1x u2 用共用体指针变量的引用形式 p u1 p u2p u1p u2 7 3 2共用体变量的定义与初始化 2020 1 27 67 4 共用体变量赋初值 例7 16 共用体变量赋初值 unionu charu1 intu2 main unionua 0 x9745 printf 1 c x n a u1 a u2 a u1 e printf 2 c x n a u1 a u2 共用体类型变量在定义时只能对第一个成员进行赋初值 由于第一个成员是字符型 用一个字节 所以对于初值0 x9745仅能接受0 x45 初值的高字节被截去 1 E45 2 e65 7 3 2共用体变量的定义与初始化 2020 1 27 68 main union longn intk charc un un n 0 x12345678 printf lx n un n printf x n un k printf x n un c un c A printf ld n un n printf d n un k printf c n un c 7 3 2共用体变量的定义与初始化 12345678 12345678 78 305419841 305419841 A 2020 1 27 69 enum是关键字 枚举名和枚举常量是标识符 枚举常量之间用逗号分隔 例如 enumweekday Sun Mon Tue Wed Thu Fri Sat enumcolor1 blue green red enumflag false true 7 4枚举类型 1 枚举类型的定义 枚举类型定义的一般形式 enum枚举名 枚举常量取值表 枚举是一个具有有限个整型符号常量的集合 这些整型符号常量称为枚举常量 每个枚举类型都必须进行类型的定义 定义时必须将其所有的枚举常量一一列举 以便限定此枚举类型变量的取值范围 2020 1 27 70 7 4枚举类型 2 枚举常量的整型值 隐式定义 按照类型定义时枚举常量列举的顺序分别代表0 1 2 等整型值 例如 enumweekday Sun Mon Tue Wed Thu Fri Sat 0 1 2 3 4 5 6 在枚举类型中 每个枚举常量都代表一个整型值 在定义枚举类型的同时可隐式或显式地定义枚举常量所代表的值 2020 1 27 71 2 枚举常量的整型值 显式定义 在定义类型的同时指定枚举常量的值 其中如有未指定值的枚举常量 则根据前面的枚举常量的值依次递增1 例如 enumop plus 43 minus 45 multiply 42 divide 47 enumworkday Mon 1 Tue Wed Thu Fri 2 3 4 5 7 4枚举类型 2020 1 27 72 例如 enumflagfg enumcolor1c1 enumcolor2 blank brown yellow white c2 enum lightblue lightgreen lightred c3 3 枚举变量的定义 枚举类型变量定义的三种形式 enum枚举名枚举变量名表 enum枚举名 枚举常量取值表 枚举变量表 enum 枚举常量取值表 枚举变量表 7 4枚举类型 2020 1 27 73 4 枚举数据的运算 用sizeof运算符计算枚举变量所占内存空间 赋值运算fg true c1 red c2 yellow c3 lightgreen c3 white 枚举变量中存放的是整型值 每个枚举变量占用4个字节 是enumcolor2类型的枚举值 7 4枚举类型 2020 1 27 74 4 枚举数据的运算 关系运算 取址运算enumcolor2 blank brown yellow white c2 enumflagfg c2 fg true falseSun Sat 真 1 假 0 按枚举类型数据所代表的整型值进行比较 7 4枚举类型 2020 1 27 75 5 枚举数据的输入输出 枚举变量的输入 枚举变量的输出方法一 直接输出枚举变量中存放的整型值 枚举变量作为整型变量进行输入 例如 scanf d 1 含义不直观 fg true printf d fg 7 4枚举类型 在C系统中 不能直接对枚举数据进行输入和输出 由于枚举变量可以作为整型变量处理 所以可以通过间接方法输入输出枚举变量的值 2020 1 27 76 switch fg casefalse printf false break casetrue printf true 5 枚举数据的输入输出 枚举变量的输出 方法二 利用多分支选择语句输出枚举常量对应的字符串 7 4枚举类型 2020 1 27 77 enumflag false true fg char name false true fg true printf s name fg 5 枚举数据的输入输出 枚举变量的输出 方法三 依据枚举值 运用指针方法输出对应的字符串 7 4枚举类型 2020 1 27 78 fg true printf s fg 5 枚举数据的输入输出 枚举变量的输出 枚举常量是标识符 不是字符串 以输出字符串方式输出枚举常量是错误的 7 4枚举类型 2020 1 27 79 例7 18 编制一个程序 当输入今天的星期序号后 输出明天是星期几 enumweekday Mon 1 Tue Wed Thu Fri Sat Sun char name 8 error Mon Tue Wed Thu Fri Sat Sun 7 4枚举类型 2020 1 27 80 main enumweekdayd printf Inputtoday snumeral 1 7 scanf d 7 4枚举类型 2020 1 27 81 7 5类型重命名 1 为类型名定义别名 为类型名定义别名的一般形式 typedef类型名新类型名或typedef类型定义新类型名 用typedef为已存在的类型名再命名一个新的类型名 即别名 typedef是关键字 类型名可以是基本类型 构造类型 指针类型或自定义类型名 新类型名是自定义的类型名 2020 1 27 82 7 5类型重命名 typedefintCOUNTER 定义COUNTER为整型类型名 typedefstructdate intyear intmonth intday DATE 定义DATE为structdate结构体类型名 新类型名与旧类型名作用相同 并且可同时使用 inti 与COUNTERi 等价 structdatebirthday 与DATEbirthday 等价 2020 1 27 83 2 为类型命名的方法 为基本类型命名例如 typedeffloatREAL REALx y 相当于floatx y 以typedef开头 加上变量定义的形式 并用新类型名替代变量名 为数组类型命名例如 typedefcharCHARR 80 CHARRc d 4 相当于charc 80 d 4 80 7 5类型重命名 2020 1 27 84 2 为类型命名的方法 为指针类型命名例如 typedefint IPOINT IPOINTip 相当于int ip IPOINT pp 相当于int pp typedefint FUNpoint FUNpointfunp 相当于int funp 7 5类型重命名 2020 1 27 85 2 为类型命名的方法 为结构体 共用体类型命名例如 structnode charc structnode next typedefstructnodeCHNODE CHNODE p 相当于structnode p structCHNODE p 7 5类型重命名 2020 1 27 86 本章小结 结构体 结构体数据类型的概念和存储结构 用结构体类型定义结构体变量 数组和指针的方法 并能正确引用结构体成员 动态分配存储单元的概念和malloc calloc等库函数的使用方法共用体 共用体类型的概念和存储结构 用共用体类型定义共用体变量的方法 并能正确地引用共用体成员枚举类型类型重命名
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!