第九章 结构体与共用体.ppt

大学二级C语言程序设计及同步训练-涂玉芬-课件PPT

收藏

资源目录
跳过导航链接。
大学二级C语言程序设计及同步训练-涂玉芬-课件PPT.zip
二级C语言程序设计及同步训练-涂玉芬-PPT演示文稿
教案资料.ppt---(点击预览)
二级C语言程序设计及同步训练-涂玉芬-PPT课件文件
文稿ppt_ppt.txt---(点击预览)
文稿ppt_ppt.jpg---(点击预览)
文稿ppt.ppt---(点击预览)
二级C语言程序设计及同步训练-涂玉芬-大学教学资料
压缩包内文档预览:(预览前20页/共68页)
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:21836173    类型:共享资源    大小:11.93MB    格式:ZIP    上传时间:2019-09-06 上传人:QQ24****1780 IP属地:浙江
25
积分
关 键 词:
大学 二级 语言程序设计 同步 训练 涂玉芬 课件 ppt
资源描述:
大学二级C语言程序设计及同步训练-涂玉芬-课件PPT,大学,二级,语言程序设计,同步,训练,涂玉芬,课件,ppt
内容简介:
第9章 结构体与共用体,9.1 结构体,上表中某一学生的数据是由学生的学号、姓名、性别、年龄、家庭地址等数据项组成的,这些数据项是一组逻辑上相关的数据,如果将这些数据项分割开来孤立地考虑它们的属性,将导致操作的不便或逻辑错误。在C语言中,将这种由多个不同类型的数据项组合在一起形成的数据类型,称为结构体类型。,表9-1 学生表,9.1.1 结构体类型的定义,结构体类型定义的一般形式: struct 标识符 类型名1 成员名1; 类型名2 成员名2; 类型名n 成员名n; ;,9.1.1 结构体类型的定义,例1 对某一学生数据(由学生的学号、姓名、性别、年龄、家庭地址等数据项组成)的结构体类型定义如下: struct student int num; char name20; char sex; int age; char addr30; ;,(5)结构体类型定义的嵌套。 例2:若某一学生数据包括学号、姓名、性别、出生年月、家庭地址,其中出生年月包括出生的年、月、日三个数据,则对某一学生数据的结构体类型定义如下:, 再定义student结构体: struct student int num; char name20; char sex; struct date birthday; char addr30; ;, 先定义date结构体: struct date int year; int month; int day; ;,9.1.1 结构体类型的定义,9.1.2 结构体变量的定义,结构体变量的定义有三种处理方式: (1)先定义结构体类型,再定义结构体变量。 例1:struct student int num; char name20; char sex; int age; char addr30; ; /*定义结构体类型struct student */ struct student a,b; /*定义a、b为结构体类型struct student的变量*/,9.1.2 结构体变量的定义,(2)在定义结构体类型的同时定义结构体变量。 例2:struct student int num; char name20; char sex; int age; char addr30; a,b;,9.1.2 结构体变量的定义,(3)直接定义结构类型变量。 例3:struct int num; char name20; char sex; int age; char addr30; a,b;,9.1.3 结构体变量的引用,(1)引用结构体变量的成员。 格式: 结构体变量名成员名 struct date int year; int month; int day; ;,struct student int num; char name20; char sex; struct date birthday; char addr30; ; struct student a,b; =“Li Fang“; b. birthday.day=12;,9.1.3 结构体变量的引用,对结构体变量中的成员都可以像同类型的普通变量一样进行各种运算。 例3:a. num=060001+5; b. birthday.day+; (2)结构体变量作为一个整体引用.结构体变量不可以作为整体进行输入输出,但可以作为函数的参数或返回值而被整体引用,也可以将一个结构体变量作为一个整体赋给另一个具有相同类型的结构体变量。 例1:struct student a,b; a=b;,(3)引用结构体变量的地址或成员的地址 struct student a,b; scanf(“%d“,9.1.3 结构体变量的引用,9.1.4 结构体变量的初始化,结构体变量的初始化形式有如下两种: (1)struct 标识符 类型名1 成员名1; 类型名2 成员名2; 类型名n 成员名n; 变量名=数据表;,例1:struct student int num; char name20; char sex; int age; char addr30; a=060001, “Li Fang“, F,18, “Wuhan“;,(2)结构体类型名 变量名=数据表; 例2:struct student int num; char name20; char sex; int age; char addr30; ; struct student a=060001, “Li Fang“, F,18, “Wuhan“;,9.1.3 结构体变量的引用,9.2 结构体数组,9.2.1 结构体数组的定义 结构体数组定义的一般形式: 结构体类型名 数组名常量表达式; 例1:struct student int num; char name20; char sex; int age; char addr30; ; /*定义结构体类型struct student */ struct student a5; /*定义a5结构体类型struct student的数组*/,9.2.2 结构体数组元素的引用,格式:结构体数组名元素下标.结构体成员名 例1:struct student int num; char name20; char sex; int age; char addr30; a5; a0. num=060001; a1. name=“Lin Hong“;,一个结构体数组元素相当于一个结构体变量,其处理方法与结构体变量的处理方法相同,9.2.2 结构体数组元素的引用,例2:struct student int num; char name20; char sex; int age; char addr30; a5; scanf(“%d“,9.2.3 结构体数组的初始化,结构体数组也可以在定义的同时进行数组元素的初始化。 例如:struct student int num; char name20; char sex; int age; char addr30; a5= 060001, “Li Fang “, F,18, “ Wuhan “,060230, “Lin Hong “, F,16, “ Changsha “; ,;,9.2.4 应用举例,例9.1 输入如表9-1所示的学生情况登记表,按学号顺序整理输出该表。 分析如下: 1、定义学生类型及学生数组: 2、输入学生信息 3、输出学生信息 (程序由学生和老师共同完成),struct student int num; char name20; char sex; int age; char addr30; a5;,9.3 结构体指针,结构体指针变量:如果用一个指针变量指向一个结构体变量,即存储该结构体变量所占据的内存单元的起始地址,则该指针变量称为结构体指针变量。 结构体指针变量也可以用来指向结构体数组中的元素。,9.3.1 结构体指针变量的定义,结构体指针变量的定义形式如下: 结构体类型名 *指针变量名; 例如:struct student *p,a; p=,9.3.2 引用指针所指向的结构体变量的成员,通过指针变量引用结构体变量的成员有如下两种方式: (1)(*结构体指针).成员名 例如:(* p).num (2)结构体指针-成员名 例如:p- num,9.3.3 指向结构体数组的指针,对于已定义的结构体数组,若用一个变量来存放该结构体数组在内存中的首地址,则该变量为指向结构体数组的指针变量。 例如:struct student *p,a5; p=a; 例9.2 用指向结构体数组的指针处理例9.1(按学号顺序整理输出学生情况登记表。),9.4 结构体与函数,1结构体变量作为函数的形参的三种形式: (1)以结构体变量的成员作为参数,传递结构体变量的成员的值。 (2)以结构体变量作为参数,直接传递结构体变量的值。 在ANSI C标准中允许用结构变量作为函数的参数进行整体传送,即直接将实参结构体变量的各个成员的值逐个传递给形参结构体变量的对应成员。注意,实参与形参必须是相同结构体类型的变量。 (3)以结构体指针作为参数,传递结构体变量的地址。 通过结构体变量的整体传递可以实现函数参数的传递,但这要将结构体变量的全部成员逐个传送,特别是成员为数组时将会使传送的时间和空间开销很大,严重地降低了程序的效率。 因此最好的办法就是使用指针,即用指针变量作函数参数进行传送。这时由实参传递给函数形参的只是地址,从而减少了时间和空间的开销。,例9.3 利用函数完成结构体变量的输入输出。 (阅读书中程序) 2结构体类型作为函数的返回值类型 其一般定义形式: 结构体类型名 函数名(形参表) 函数体 例(p168),9.4 结构体与函数,9.5 链表,C语言中,变量存储空间的分配分为静态分配和动态分配两种方式。 (1)静态分配方式:先在程序的声明部分进行定义,然后在程序编译时分配适当的存储单元。这些存储单元一经分配,在它的生存期内是固定不变的。 (2)动态分配方式:在程序执行期间,通过“申请”分配指定的存储空间来存储数据,当有闲置不用的存储空间时,又可以随时将其释放。 前面章节中处理的变量都是在程序的声明部分定义的变量,在程序编译时分配存储单元,是静态分配方式。本章下面要介绍的是通过动态分配方式,在程序执行期间,通过“申请”分配的动态的存储单元,以及动态分配的存储单元构成的“链表”结构。,9.5.1 链表的概念,例1:利用C语言在计算机中存储三个学生的计算机成绩,如果有定义int a3,则其内存单元分配情况如下:,9.5.1 链表的概念,例2:用链表存储方式来存储三个同学的计算机成绩。,可直观地表示如下:,9.5.2 动态分配函数,1malloc函数 函数格式: void *malloc(unsigned int size) 函数功能:在内存的动态存储区中分配一个长度为size的存储单元。 例1:int *p; long *lp; struct student *head; p=(int *)malloc(2); /*分配一个整型存储单元(占用2个字节),用p指向该存储单元*/ lp=(long *)malloc(sizeof(long); /*分配一个长整型存储单元,用lp指向该存储单元,长整型存储单元所占字节数由函数sizeof(long)求得*/ head=(struct student *)malloc(sizeof(struct student); /*分配一个struct student结构体类型的存储单元,用head 指向该存储单元*/ 上述函数sizeof(类型名)求出指定类型的存储单元所占字节数,9.5.2 动态分配函数,2calloc函数 函数格式: void calloc(unsigned int n,unsigned int size); 函数功能:在内存的动态存储区域中分配n个长度为size的连续存储单元。形参n和size均为无符号整数,n是连续存储单元的个数,size是一个存储单元占用的字节数。函数的返回值为分配的连续存储单元的起始地址;如果分配不成功,则返回值为0。 例2:int *p; p=(int *)calloc(3,sizeof(int); /*分配3个连续的存储单元,并将其起始地址赋给整型指针变量p*/,9.5.2 动态分配函数,3free函数 函数格式: void free(void *ptr); 函数功能:释放由指针变量ptr指向的内存区域。其中,ptr是一个指针变量,指向最近一次调用函数malloc或calloc时所分配的存储空间的首地址。通过函数free将已分配的内存区域交还系统,使系统可以重新对其进行分配。 例3:int *p; p=(int *)calloc(3,sizeof(int); free(p);,9.5.3 链表的基本操作,1链表节点的定义 链表中的任一个节点都包括两个数据项,一个是节点自身的数据信息,称为节点的数据域,另一个是下一节点的地址值,称为节点的指针域。 struct node datatype data; struct node *next; ; datatype是数据域的类型,可以是前面所介绍的任意C语言类型。显然,链表节点的指针域存放的地址类型与它自身的类型是相同的。,例1:存储三个同学的计算机成绩的链表存储方式如下:,上述链表中节点的定义如下: struct node int data; struct node *next; ; 链表的头指针定义如下: struct node *head;,9.5.3 链表的基本操作,2链表的基本操作 链表的基本操作主要有链表的建立、节点的访问、节点的插入、节点的删除等。 (1)链表的建立。 链表的建立是一个动态存储空间分配和形成链接关系的过程。 用尾插法建立链表的过程如下: 1)建立一个空链表,即head=NULL。 2)请分配新节点存储单元,对新节点的数据域和指针域赋值。由于新插入的节点总是尾节点,因此,它的指针域的值为空(即NULL)。 3)将新节点链接到链表的尾部: 4)重复步骤2)3),继续插入新节点直到结束。,例1:存储三个同学的计算机成绩的链表存储方式如下:,上述链表中节点的定义如下: struct node int data; struct node *next; ; 链表的头指针定义如下: struct node *head;,9.5.3 链表的基本操作,例9.4 用链表存储学生的计算机成绩。 程序段如下:,struct node *creat() struct node *head,*p,*q; n=0; head=NULL; p= (struct node *)malloc(LEN); scanf(“%d“, ,#define NULL 0 #define LEN sizeof(struct node) struct node int data; struct node *next; ; int n;,q,p,(2)链表节点的访问。 链表节点的访问过程如下: 1)取链表头指针head。 2)用一个指针p指向链表的第一个节点,即p=head。 3)访问p所指节点。 4)移动指针p,使它指向下一节点,即p=p-next。 5)重复步骤3)和4),直到指针p为空。,9.5.3 链表的基本操作,例9.5 输出例9.4建立的链表中所有学生的计算机成绩。 程序段如下:,#define NULL 0 #define LEN sizeof(struct node) struct node int data; struct node *next; ; void print(struct node *head) struct node *p; p=head; while(p!= NULL) printf(“%d“,p-data); p=p-next; ,p,p,p,(3)链表节点的插入。 其操作过程主要有两个子过程:确定插入位置;插入新节点。 插入条件的要求主要有以下几种情况: 新节点插入在第i个节点之前(或后)。 新节点插入在节点数据等于某一指定数据的节点之前(或后)。 新节点插入在一个节点数据有序的链表中,保证插入新节点后链表仍然有序。,下面以新节点插入在节点数据等于某一指定数据的节点之前的情况分例介绍节点插入操作的算法。 操作过程如下: 1)取链表头指针head。 2)申请分配新节点存储单元,对新节点的数据域赋值。 3)如果head等于NULL,即链表为空,不存在指定数据的节点,则新节点插入到链表中,成为链表中惟一的节点,即将新节点的地址赋给头指针head,赋新节点指针域的值为NULL。 4)如果head不等于NULL,用一个指针p指向链表的第一个节点,即p=head,判断p所指节点是否为指定节点,如果不是,移动指针p,使它指向它的下一节点,重复判断过程,直到p所指节点是指定节点或p所指节点的指针域的值为NULL。 5)如果p所指节点是指定节点,将新节点插入在p所指节点之前,即p的前一节点的指针域的值为新节点的地址,新节点的指针域的值为p。 6)如果p所指节点不是指定节点,但p所指节点的指针域的值为NULL,则链表中不存在指定数据的节点,新节点插入到链尾,即p所指节点之后,赋p所指节点的指针域的值为新节点的地址,新节点指针域的值为NULL。 7)返回操作后链表的头指针。,例9.6 在例9.4建立的链表中某一计算机成绩值之前插入一个学生的计算机成绩。 其过程示意图:,新结点,指向所搜结点的前驱结点,指向要找的结点,程序段如下:,if(x= =p-data) if(p= =head) s-next=head; head=s; else s-next=p; q-next=s; else s-next=p-next; p-next=s; return(head); ,struct node *insert(struct node *head,int x,int y ) struct node *p,*q,*s; s= (struct node *)malloc(LEN); s-data=y; if (head= =NULL) s-next=head; head=s; return(head); p=head; while(p-data!= x ,(4)链表节点的删除。 链表节点的删除操作同样包括两个子过程: 确定删除节点的位置;删除节点。 下面介绍删除节点数据等于某一指定数据的节点的操作过程。 1)取链表头指针head。 2)如果head等于NULL,即链表为空,不存在指定数据的节点,删除操作失败,输出相关信息。 3)如果head不等于NULL,用一个指针p指向链表的第一个节点,即p=head,判断p所指节点是否为指定节点,如果不是,移动指针p,使它指向它的下一节点,重复判断过程,直到p所指节点是指定节点或p所指节点的指针域的值为NULL。 4)如果p所指节点是指定节点,删除该节点,即p所指节点指针域的值赋给其前一节点的指针域。 5)如果p所指节点不是指定节点,但p所指节点的指针域的值为NULL,则链表中不存在指定数据的节点,删除操作失败,输出相关信息。 6)返回操作后链表的头指针。,9.5.3 链表的基本操作,例9.7 在例9.4建立的链表中删除某一指定计算机成绩的节点。,指向要删除结点,指向要删除结点前驱结点,9.5.3 链表的基本操作,程序段如下: #define NULL 0 #define LEN sizeof(struct node) struct node int data; struct node *next; ;,struct node *del(struct node *head,int x ) struct node *p,*q; if (head=NULL) printf(“该链表是空表。“); return(head); p=head; while(p-data!= x ,9.6.1 共用体类型的定义,其一般形式为: union 标识符 类型名1 成员名1; 类型名2 成员名2; 类型名n 成员名n; ;,说明: (1)union是关键字,是共用体类型的标志。 (2)标识符是共用体名,是用户自己定义的标识符,与关键字union共同构成共用体类型名。 (3)花括号“ ”中是组成该共用体类型的成员数据项,或称为共用体中的分量,由成员类型和成员名组成。 (4)共用体成员的数据类型可以是简单类型、数组、指针或结构等。 (5)共用体类型的长度是共用体成员中的最大长度。,9.6.1 共用体类型的定义,例如:如果有定义: union xy char ch; int a3; float b; ); 共用体类型union xy的存储单元中各成员占用空间情况如图: 则共用体类型union xy的长度是6(占用内存的字节数)。,9.6.2 共用体变量的定义,共用体变量定义的一般形式: 共用体类型名 变量名表; 共用体变量的定义有如下三种处理方式: (1)先定义共用体类型,再定义共用体变量。 例1:union xy char ch; int a3; float b; ; /*定义共用体类型union xy */ union xy x,y; /*定义x、y为共用体类型union xy的变量*/,9.6.2 共用体变量的定义,(2)在定义共用体类型的同时定义共用体变量。 例2:union xy char ch; int a3; float b; x,y; (3)直接定义共用类型变量。 例3:union char ch; int a3; float b; x,y;,9.6.3 共用体变量的引用,引用形式如下: 共用体变量名.成员名 例如:union xy char ch; int a3; float b; x,y; x.ch=m; y.a0=20;,说明: (1)对同一共用体的不同成员进行赋值后,共用体变量中存储的是最后一次成员的赋值。 (2)不能直接使用共用体变量名进行输入输出。 (3)可以直接使用共用体变量名对一个同类型的共用体变量赋值。 (4)共用体变量名可以作为函数参数。 (5)不能对共用体变量进行初始化。 (6)可以定义共用体类型的数组。 (7)可以定义共用体类型的指针,也可以使用共用体类型的指针作函数参数。引用指针指向共用体的成员同样使用运算符“-”,9.7 枚举,所谓枚举,是将具有相同属性的一类数据值一一列举。枚举是一个已命名的一组常量的集合。 例如:表示星期的(标识符常量)Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday就是一个枚举。 枚举是C语言中的简单类型而非构造类型,它的值域是有穷的,可以一一列举出来,变量的取值只限于列举出来的值的范围。,9.7.1 枚举类型的定义,其形式为: enum 枚举名 标识符1=整型常数, 标识符2=整型常数, 标识符n=整型常数, ;,说明: (1)enum是关键字,是枚举类型的标志。 (2)标识符是枚举名,是用户自己定义的标识符,与关键字enum共同构成枚举类型名。 (3)花括号“ ”中的“标识符1,标识符2,标识符n”是所定义枚举类型的全部取值,通常将这些标识符称为“枚举元素”或“枚举常量”。这些标识符是用户定义的标识符,一般是所代表事物的名称。 (4)枚举中每个标识符后的结束符是“,”,而不是“;”,最后一个标识符后可省略“,”。 (5)如果枚举没有初始化,即省掉“=整型常数”时,则从第一个标识符开始,顺次赋给标识符整型常数0,1,2,。但当枚举中的某个标识符被赋值后(可以赋负数),其后的标识符按依次加1的规则确定其值。,9.7.1 枚举类型的定义,例如:enum weekday Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday ;,9.7.2 枚举变量的定义,枚举变量定义的一般形式: 枚举类型名 变量名表; 枚举变量的定义有如下三种处理方式: (1)先定义枚举类型,再定义枚举变量。 例1:enum weekday Sunday, Monday, Tuesday, Wedneday, Thursday, Friday, Saturday ; /*定义枚举类型enum weekday */ enum weekday x,y; /*定义xy为枚举类型enum weekday的变量*/,9.7.2 枚举变量的定义,(2)在定义枚举类型的同时定义枚举变量。 例2:enum weekday Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday x,y;,(3)直接定义枚举类型变量。 例3:enum Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday x,y;,9.7.3 枚举变量的应用,(1)枚举变量取枚举说明结构中的某个标识符常量后,其值可认为是标识符对应的常数。 例1:enum weekday Sunday=0, Monday, Tuesday, Wedneday, Thursday, Friday, Saturday x,y; x= Friday; y= Tuesday; 即x的值为5,y的值为2。,9.7.3 枚举变量的应用,(2)不能直接给一个枚举变量赋一个整数,但经过强制类型转换后可以实现赋值。 例2:x=5;是不合法的。 x=(enum weekday)5; 是合法的 (3)枚举变量的值不能直接输入输出,一般通过下面例3的方式实现。 例3:enum weekday Sunday=0, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday x;,int n; scanf(“%d“, ,switch(x) case Sunday:printf(“Sunday“); case Monday:printf(“Monday“); case Tuesday:printf(“Tuesday“); case Wednesday:printf(“Wednesday“); case Thursday:printf(“Thursday“); case Friday:printf(“Friday“); case Saturday:printf(“Saturday“); ,枚举变量输入,枚举变量输出,9.7.3 枚举变量的应用,(4)枚举值可以进行比较。 例4:enum weekday Sunday=0, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday x; if(x= = Friday) printf(“今天是周末!“); if(x Sunday) printf(“今天要工作!“);,9.8 自定义类型,自定义类型是将一个数据类型定义一个新的名字。 自定义类型的格式为: typedef 类型名 标识符; 例如:typedef int IN; /*定义整型int的新类型名为IN*/ IN x; /*定义IN类型(即int)的变量x*/ typedef struct student char name8; int class; char subclass6; float math, phys, chem, engl, biol; ST; /*定义struct student的新类型名为ST*/ ST y; /*定义ST类型(即struct student)的变量y*/,9.10 典型试题详解,1设有如下说明语句: struct ex int x;float y; char z; example; 则下面的叙述中不正确的是_。 A)struct 是结构体类型的关键字 B)example是结构体类型名 C)x、y、z都是结构体成员名 D)struct ex是结构体类型 正确答案:B(知识点:结构体类型及结构体变量的定义) 试题分析:example是结构体类型的变量名。,9.10 典型试题详解,2设有如下定义: struct ss char name10; int age; char sex; std3,*p=std; 下面各输入语句中错误的是_。 A)scanf(%d, 正确答案:B(知识点:结构体数组、指向结构体数组的指针、结构体变量的引用),9.10 典型试题详解,3设有如下定义: struct sk int a; float b; data; int *p; 若要使p指向data中的a域,正确的赋值语句是_。 A)p= C)p=&data.a D)*p=data.a 正确答案:C(知识点:结构体成员地址的引用、指向结构体成员的指针),9.10 典型试题详解,4以下选项中不能正确把c1定义成结构体变量的是_。
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:大学二级C语言程序设计及同步训练-涂玉芬-课件PPT
链接地址:https://www.renrendoc.com/p-21836173.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

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