版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章构造数据类型
本章教学目标:理解结构型的涵义,掌握结构型的定义、结构型变量的定义和使用;理解共用型的涵义,掌握共用型的定义、共用型变量的定义和使用;理解枚举型的涵义,掌握枚举型的定义、枚举型变量的定义和使用;理解typedef作用,掌握typedef的使用方法;能综合运用上述方法和技术进行较复杂的程序设计。
第7章构造数据类型10.1结构类型与结构变量10.2结构变量的引用和初始化
10.3结构和数组10.4结构和函数10.5结构的嵌套10.6共用体(union)10.7枚举类型10.8类型定义10.9结构和共用体的综合应用
10.1结构类型与结构变量实际生活中的事物,往往具有多种属性,如“学生”这个实体,它有:
“学号”“姓名”“性别”“成绩”等属性,一般来说这些属性是一些不同类型的量,如“学号”是长整型量“姓名”、“性别”是字符型的量“成绩”是实型量等因此,要描述“学生”这种实体,数组是无能为力的,必须使用另外的数据类型,这就是结构型(structure)。结构型将多种元素组合在一起形成一个整体,与数组不同的是,数组中的元素都是同一类型,而结构型中的元素可以是不同的类型。另外,数组定义的是一个具体的实体,而结构型定义的是实体的类型,是一种数据抽象机制,定义结构型之后,可以用结构型定义多个这种类型的实体,称为结构型变量。
10.1.1结构类型的定义结构体是若干个类型相同或不同数据项的集合。定义一个结构类型的一般形式为:
struct结构类型名 {数据类型数据项1; 数据类型数据项2; …… 数据类型数据项n; };
structstudent{charno[15];/*学号*/
charname[15];/*姓名*/
floatyw,sx,yy;/*三门课的成绩*/
floattotal;/*总成绩*/};其中,结构类型名是student,而no[15]、name[15]、yw、sx、yy和total被称为结构的成员变量。nonameywsxyytotal200012201NameOne39.【例10.1】假若一个学生的基本情况包含以下数据项:学号(no)、姓名(name)、语文(yw)、数学(sx)、英语(yy)三门课程成绩和总成绩。如图10-1所示,那么,我们可以用如下结构类型描述学生的基本情况。图10-1
上述语句定义了一个名为student(学生)的结构类型。①struct
是关键字,标志结构类型。struct后面跟的是所定义的结构体类型的名字。“结构体类型名”的命名与变量的命名规则相同。②结构体的各个“数据项”用括号括起来,“数据项”的定义和命名规则与变量的相同。类型相同的数据项,既可以逐个、逐行分别定义,也可以合并成一行定义。③结构体的“数据类型”可以是基本类型,也可以是构造类型,如数组;还可以是结构体类型(参见§10.5结构的嵌套)。④结构体的一个“数据项”称结构体类型的一个成员(或分量)。例如,本例中:学号(no)、姓名(name)、语文(yw)、数学(sx)、英语(yy)和总成绩(total)是student的成员。结构型的定义仅仅是给出了该结构型的组成情况,系统并不为其分配实际的存储单元,为了使用它,必须定义结构型变量:
struct
student
ZhangFan,LiYing,*p;|||||关键字结构型名结构型变量结构型指针
上面的语句定义了student结构型变量ZhangFan(张帆)、LiYing(李英)和结构型指针p。10.1.2结构变量的定义
1.间接定义法———先定义结构类型,再定义结构型变量
struct结构类型名变量名;
例如,用例10.1定义的结构类型structstudent,就可用来定义结构变量。语句:
structstudentzhanshan;就把zhanshan定义为structstudent类型结构变量。2.直接定义法———在定义结构型的同时定义结构型变量
struct[结构类型名]/*此时,结构类型名可缺省*/ {数据类型数据项1; 数据类型数据项2; ………… 数据类型数据项n; }变量表;
注意(1)结构类型与结构变量是不同的概念,不能混淆。结构类型的定义只说明了结构的组织形式,本身并不占用储存空间,只有当定义了结构变量时,才占用储存空间。(2)结构类型的定义与变量相似,也有作用域问题。如果结构类型的定义出现在函数内部,则它的作用范围是局部的,只在该函数内部利用该类型定义相应的结构变量;如果结构类型的定义位于函数的外面,则它的作用范围是全局的,从它的定义位置起到所在文件末尾的所有函数都可以利用它定义相应的结构变量。一般情况下,结构类型的定义都位于一个文件的首部(3)在不同结构类型里,成员名可以相同,但它们各自代表不同的对象,互不相干。思考题:你认为那种定义方式较好,为什么?10.2结构变量的引用和初始化
虽然结构型变量是作为一个整体被定义的,但不能将一个结构型变量作为一个整体进行输入输出,只能通过结构型变量的成员来访问它。
10.2.1结构变量的引用1.简单结构变量的引用一般形式如下:结构变量名.成员名其中,“.”是结构成员运算符,它在所有运算符中优先级最高。因此,上述引用结构成员的写法可以作为一个整体看待。例如,结构变量student1中的成员可表示为:
student1.no,,student1.yw,student1.sx,student1.yy,student1.total。
【例10.2】利用例10.1中定义的结构类型structstudent,定义两个结构变量,用于存储两名学生的信息。要求从键盘输入数据,并输出总分较高的学生信息。main(){structstudent{ charno[15]; charname[15]; floatyw,sx,yy,total;}stu1,stu2;printf(“\nInputthefirststudentdata:”);gets(stu1.no);gets();scanf(“%f%f%f”,&stu1.yw,&stu1.sx,&stu1.yy);stu1.total=stu1.yw+stu1.sx+stu1.yy;printf(“\nInputthesecondstudentdata:“);gets(stu2.no);gets();scanf(“%f%f%f”,&stu2.yw,&stu2.sx,&stu2.yy);stu2.total=stu2.yw+stu2.sx+stu2.yy;if(stu1.total>stu2.total)printf(“\n%s,%s,%f,%f,%f,%f”,stu1.no,,stu1.yw,stu1.sx,stu1.yy,stu1.total);elseprintf(“\n%s,%s,%f,%f,%f,%f”,stu2.no,,stu2.yw,stu2.sx,stu2.yy,stu2.total);}2.同类型结构变量间的引用ANSIC新标准允许将一个结构类型的变量,作为一个整体赋给另一个具有相同结构类型的变量。如有定义:structstudentstud1,stud2;假若要把已赋值好stud1的各成员值复制给stud2对应的各成员,则可用赋值语句:stud2=stud1;实现。特别注意:结构变量不能作为一个整体进行输入和输出。
10.2.2结构变量的初始化
在定义结构型变量的同时可以对结构型变量进行初始化,方式类似于数组的初始化
例如:
structstudentstud1={“200012201”,“NameOne”,60,70,80,210};这样结构变量stud1被初始化,它描述了某一个学生的信息,具体地说,该学生:学号:200012201,姓名:NameOne,三科成绩分别为60,70,80,总成绩210如果初值数量少于成员数量,则无初值的成员自动被置0(数值型成员)或空(字符型成员)。【例10.3】
用初始化方法,实现例10.2的功能。
main(){structstudent{charno[15];/*学号*/
charname[15];/*姓名*/
floatyw,sx,yy;/*三门课的成绩*/
floattotal;/*总成绩*/}stu1={“20001203”,“NameThree”,70.0,80.0,90.0};stu.total=stu.yw+stu.sx+stu.yy;/*计算总成绩*/printf(“\n学号=%s,姓名=%s”,stu.no,);/*输出结果*/printf(“\n语文=%5.1f,数学=%5.1f,英语=%5.1f,总分=%5.1f”,stu.yw,stu.sx,stu.yy,stu.total);}10.2.2结构变量的初始化
10.3结构和数组数组元素为结构型变量的数组称为结构型数组。10.3.1结构数组的定义结构型数组的定义、初始化以及使用方法与普通数组相仿。例如,下面的例子先定义结构型.再定义结构型数组并同时进行元素的初始化:
structstudent{charno[15];charname[15];floatyw,sx,yy;/*三门课的成绩*/
floattotal;/*总成绩*/};structstudentstu[40];就定义了一个数据stu,其元素为structstudent类型数据,数组有40个元素。
10.3.2结构数组的引用和初始化结构数组元素也是通过数组名和下标来引用的,但其元素是结构体类型的数据,因此,对结构体数组元素的引用与对结构体变量的引用一样,也是逐级引用,只能对最低级的成员进行存取和运算。 一般的引用形式为:
数组名[下标].成员名
例如,对上面定义的数组stu而言,下面的引用是合法的:①stu[i].no表示第I个学生的学号(I=0,1,2,…39)②stu[i].name表示第I个学生的姓名(I=0,1,2,…39)③stu[i].total表示第I个学生的总成绩(I=0,1,2,…39)
与普通数组一样,结构数组也可以在定义时进行初始化,其方法是在定义结构数组的之后紧跟等号和初始化数据。 其一般形式是:struct结构体类型结构数组名[n]={{初值表1},…,{初值表n}};对结构数组的初始化时,类似于数组初始化,根据缺省原则也可以对方括号中表示元素个数的项省略。由于结构体是由不同类型的数据组成的,所以特别注意初始化数据的顺序、类型与结构类型说明时相匹配。如两个学生:structstudentstud2[]={“200012201”,“NameOne”,60,70,80,210, “200012202”,“NameTwe”,70,80,90,240};或structstudentstud2[]={{“200012201”,“NameOne”,60,70,80,210}, {“200012202”,“NameTwe”,70,80,90,240}};【例10.5】编写统计候选人得票程序。设有4名候选人,以输入得票的候选人名方式模拟倡票,最后输出倡票结果。算法设计:(1)定义结构数组,并初始化候选人相关的信息:姓名和得票,由于4名候选人是已知的,并且初值得票为0,所以,可以用初始化方法定义。
structperson {charname[15]; intcount; }leader[4]={{“li”,0},{“wang”,0},{“zhan”,0},{“shen”,0}};(2)输入一个得票的候选人名,模拟倡票scanf(“%s”,name); for(j=0;j<4;j++) if(strcmp(name,leader[j].name)==0)leader[j].count++;(3)输出各候选人得票for(j=0;j<4;j++)printf(“\n%s=%d”,leader[j].name,leader[j].count);#include“string.h”……../*定义结构数组,并初始化*/main(){inti,j;charname[15];printf(“\nInputname\n”);for(i=1;i<=10;i++) {scanf(“%s”,name); for(j=0;j<4;j++) if(strcmp(name,leader[j].name)==0)leader[j].count++; } printf(“\nresult:“);for(j=0;j<4;j++) printf(“\n%s=%d”,leader[j].name,leader[j].count);}10.4结构和函数
结构变量作为一个整体可以被复制、赋值、传递给函数以及由函数返回。10.4.1结构变量作为函数参数可以用结构型变量、结构型变量的成员和结构型指针作函数的参数。10.4.2结构数组作为函数参数10.4.3函数的返回值是结构类型变量函数也可以返回结构型变量、结构型变量的成员或结构型指针。10.4.1结构变量作为函数参数【例10.6】修改例10.4程序,要求将显示总分最高的学生信息的语句,用函数完成。voidprint_max(structstudents){printf(“%s,%s,%5.1f,%5.1f,%5.1f,%5.1f”,s.no,,stu[max].yw,stu[max].sx,s.yy,s.total);}main(){...for(i=1,max=0;i<N;i++) /*求总分最高的学生之下标*/
if(stuarr[i].total>stu[max].total)max=i;print_max(stuarr[max]);}
图10-4结构变量作为函数参数按C语言参数传递规则,将实参stuarr[max]的值复制给形参s,即将各成员变量的值进行复制,如图10-3所示。10.4.2结构数组作为函数参数
结构数组作为函数参数,与数组作为函数参数的处理方式完全相同。即采用“地址传递”方式,形参结构变量中各成员值的改变,对相应实参结构变量产生影响。【例10.7】进一步修改例10.6,要求数据输入和统计用函数实现。将例10.6中的数据输入和统计程序段:for(i=0;i<N;i++){printf(”请输入第%d个学生的信息:\n”,i+1);scanf("%s%s%f%f%f",stu[i].no,stu[i].name,&stuarr[i].yw,&stuarr[i].sx,&stu[i].yy);stu[i].total=stu[i].yw+stu[i].sx+stu[i].yy;}把学生数N和结构数组作为函数的形参。在函数体内对形参操作。voiddata_input(intk,structstudents[]){inti;for(i=0;i<k;i++) {scanf("%s%s%f%f%f",s[i].no,s[i].name,&s[i].yw,&s[i].sx,&s[i].yy);s[i].total=s[i].yw+s[i].sx+s[i].yy;}}完整程序清单请读者完成。10.4.3函数的返回值是结构类型变量
【例10.8】修改例10.7,将函数data_input()中的输入语句,编一函数用于结构变量的输入,将其结构变量返回给主调函数中的结构变量。提示:我们只要把函数data_input()替换为以下两函数,其余不变,请读者完成。structstudentelement_input(){structstudents;scanf("%s%s%f%f%f",s[i].no,s[i].name,&s[i].yw,&s[i].sx,&s[i].yy);returns;}voiddata_input(intk,structstudents[]){inti;for(i=0;i<k;i++) {s[i]=element_input(); s[i].total=s[i].yw+s[i].sx+s[i].yy; }}10.5结构的嵌套结构型中的成员也可以是另一结构型变量,也就是说,结构型可以嵌套定义
例如:structdate/*定义日期结构型*/{intday;charmonth[10];intyear;};structstudent/*定义学生结构型,其中有日期结构型的成员*/{longnumber;charname[10];charsex;structdatebirthday;/*birthday为date结构型变量*/floatenglish,mathematics;/*同类型变量可以一起定义*/}ZhangFan,LiYing,*p;
在定义结构型时,结构型名不是必须的,没有名字的结构型称为匿名结构型。例:structstudent{longnumber; charname[10]; charsex; struct/*定义匿名结构型*/ {
intday;charmonth[10]; intyear; }birthday;/*birthday为匿名结构型变量*/
floatenglish,mathematics;
}ZhangFan,LiYing,*p;【例10.9】
建立N名学生的档案,每个学生的数据包括学号、姓名、入学时间及一门功课的成绩。要求从键盘输入数据,并显示最后的结果。算法设计要点:(1)定义学生的档案的结构类型structperson{char no[15];charname[15];入学时间;floatscore;};(2)定义“入学时间”的结构类型日期的信息,要求包括年、月、日。可以用一个结构描述。structent{intyear,month,day;};(3)structperson的结构如图10-5所示。包括了structdate型结构变量。图10-5nonameentscoreyearmonthdaystructdate{intyear,month,day;};structperson{char no[15];char name[15];structdateent;floatscore;};voiddata_input(structpersons[]){inti;for(i=0;i<N;i++)scanf(“%s%s%d%d%d%f”,s[i].no,s[i].name,&s[i].ent.year,&s[i].ent.month,&s[i].ent.day,&s[i].score);}voiddata_output(structpersons[]){inti;for(i=0;i<N;i++)printf(“\n%s%s%d%d%d%f”,s[i].no,s[i].name,&s[i].ent.year,&s[i].ent.month,&s[i].ent.day,&s[i].score);}main(){structpersons[N];data_input(s);data_output(s);}10.6共用体(union)
10.6.1共用体的概念
有时需将几种不同类型的变量存放到同一段内存单元中,例如,把一个整型变量i,一个字符变量ch和一个实型变量f放在地址为1000的起始内存单元(如图10-5)。以上三个变量在内存中占的字节数不同,具体地说,i,ch,f分别占据2个,1个和4个字节,可以看出,这三个变量是相互覆盖的,因此,某一时刻只能对其中一个变量进行操作。这种使用不同变量共占同一段内存的结构称为“共用体”类型的结构。
charch<空闲3字节>inti<空闲2字节>float图10-5共用体
共用体变量在内存中的起始地址1000
10.6.2共用体类型的定义
与结构类型的定义类似,共用体的定义形式为:
union共用型类型名{类型标识符1成员1;类型标识符2成员2;┋类型标识符n成员n;};
例如,上述数据类型可用共用型类型表示如下:uniondata{inti;charch;floatf;};可以看出,在形式上,共用体与结构类似,只是把结构的关键词struct换成了共用体的关键词union。
10.6.3共用体类型变量的定义
与结构变量的定义一样,共用体类型变量的定义也有2种:(1)间接定义——先定义类型、再定义变量语句:uniondatax,y,z;定义x,y,x同为uniondata型变量。 (2)直接定义——在定义类型的同时定义变量例如,union[data]/*共用体名可缺省*/{charch;inti;floatf;}x,y,z;
10.6.4共用体变量的引用共用体变量的引用方式与结构变量的引用方式也非常类似。例如,前面定义了共用体变量x、y、z后,则对其成员变量的引用分别为:x.i、x.ch、x.f。C语言最初引入共用体的目的之一是为了节省存储空间,另外一个目的是可以将一种类型的数据不通过显式类型转换而作为另一种类型数据使用。【例10.10】用共用体处理键盘扫描码。#include<stdio.h>unionscancode{intkey;charvalue[2];}code;main(){charhighbyte,lowbyte;code.key=bioskey(0);/*读键盘扫描码*/
lowbyte=code.value[0];/*取出低字节*/
highbyte=code.value[1];/*取出高字节*/
printf(”高字节=0x%2x低字节=0x%2x”,highbyte,lowbyte);}说明
①共用体采用覆盖技术,实现不同类型的变量存放到同一内存单元,所以在每一时刻,存放的和起作用的是最后一次存入的成员值。在引用共用体成员变量时,必需是最后存入的共用体成员变量。例如,执行语句x.ch=‘a’;x.i=10;x.f=12.6;后,引用变量x的成员,只有x.f才是有效的。②共用体变量不能用作函数的参数,也不能是函数返回共用体变量,同样,在定义共用体变量时,也不能进行初始化。③共用体变量可出现在结构类型中,结构变量也可以出现在共用体类型中。例如:structsystem{inti;charname;union{floatf;charp;}u;}st;访问成员f、p,可以用st.u.f及st.u.p。10.7枚举类型“枚举”就是一一列举,枚举型用于定义名字化的数据,比如,可以将颜色值定义为“red”、“yellow”、“blue”等,将日期值定义为“Sunday”、“Monday”、“Tuesday”等,以便于阅读和理解,与#define定义的符号常量相比,枚举型的优点是系统能够对枚举变量进行值的合法性判别,提高了程序的可靠性。枚举型和枚举变量的定义形式为:enum枚举型名{标识符1,标识符2,…,标识符n}枚举变量列表;
enum是定义枚举型的关键字,枚举型名是由程序员自定义的新类型的名字。枚举型定义之后就可以用它来定义这种类型的变量,花括号中的标识符称为枚举元素或枚举常量,其值为整常数,在默认情况下,整常数从0开始依次加1。它们表示该枚举型的变量只能取花括号中所列出的标识符1,标识符2,…,标识符n这n个值,取其他值都是非法的。【例10.11】
从键盘输入一整数,显示与该整数对应的枚举常量的英文名称。#include“stdio.h”main(){enumweek{sun,mon,tue,wed,thu,fri,say};enumweekweekday;inti;scanf(“%d”,&i);weekday=(enumweek)i;switch(weekday){casesun:printf(“Sunday\n”);break;...casesat:printf(“Saturday\n”);break;}}枚举型在使用中还应注意下列问题:(1)企图给枚举元素(枚举常量)赋值,是错误的。(2)可以在定义枚举型时改变枚举常量的默认值(有的书称为初始化),方法是:
enumcolor{red=2,yellow,blue,white=7,black}c1;此时,red为2,yellow为3,blue为4,
white为7,black为8。(3)可以将枚举常量赋给一个整型变量。但不能将一个整数赋给枚举变量,必要时须进行强制类型转换。(4)枚举常量和枚举变量可以参与关系运算,如:
if(c1==red)printf(“red”);if(c1!=black)printf(“itisnotblack”);f(c1>white)printf(“itisblack");
它们是按所代表的整数进行比较的。(5)枚举常量不是字符串,不能用下面的方法输出字符串“red”printf(“%s”,red);只能用下述方法输出:
if(c1==red)printf(“red”);10.8类型定义
类型定义(typedef)
顾名思义是定义类型的意思,但它只能为已有的类型定义一个新的名字(别名),而不能定义出新的类型来。
使用typedef的好处是:可以使类型名更贴切,便于阅读和理解;可以为复杂的类型(结构型、共用型、数组和指针)取一个更简洁的名字,方便使用;而最大的好处是便于程序的移植。
例如:typedefintCOUNT;这样,COUNT就是int的新名字(别名),于是以下两句等价:COUNTi,j;inti,j;可以使人更一目了然地知道i,j是用于计数的。
10.8.1定义基本类型的别名
声明基本类型的形式为: typedef基本类型名
别名标识符;例如: typedefintWORD; typedeffloatREAL; typdefunsignedcharBYTE;指定用WORD代表int类型,REAL代表float,BYTE代表unsignedchar。所以,以下两行等价: (1)inti,k;floatx,y;unsignedchara,b; (2)WORDi,k;REALx,y;BYTEa,b;10.8.2定义自定义的数据类型的别名
声明自定义类型的形式为: typedef自定义类型说明信息别名标识符;例如:
typedefstructstudent {charno[15]; charname[15]; floatyw,sx,yy; floattotal; }STUDENT;这样,在说明structstudent类型的变量stu1,stu2时,就可用如下语句实现: STUDENTstu1,stu2;
10.8.3定义已有类型别名的一般步骤(1)按定义变量的方法,写出定义体;(2)将变量名换成别名;(3)在定义体最前面加上typedef。【例10.12】给unsignedint定义一个别名DWORD。(1)按定义变量的方法,写出定义体:unsignedinta;(2)将变量名换成别名:unsignedintDWORD;(3)在定义体最前面加上typedef:typedefunsignedintDWORD;
【例10.13】定义NUM为有5个元素的整型数组别名。(1)按定义变量的方法,写出定义体:inta[5];(2)将变量名换成别名:intNUM[5];(3)在定义体最前面加上typedef:typedefintNUM[5];然后用NUM去定义数组变量,语句: NUMx,y;把x,y都被定义为含有5个元素的整型数组。即等价于:
intx[5],y[5];说明
(1)用typedef只是对已有的类型增加一个别名,而没有创造新的类型。(2)typedef与#define有相似之处,但两者是不同的,如:
typdefintWORD;和#defineWORDint的作用都是用WORD代表int。前者是由编译器在编译时处理的;后者是由编译预处理器在编译预处理时处理的,而且只能作简单的字符串替换。(3)使用typedef有利于程序的通用和移植。例如,把一个C程序从一个以4个字节存放整数的计算机系统移植到以2个字节存放整数的计算机系统,按一般方法需要将定义变量中的每个int改为longint,但这样太麻烦。现可以用WORD定义为int的别名:
typedefintWORD;在程序中的所有整型变量都用DWOR定义。在移植时只需要改动typedef定义体即可:
typedeflongintWORD;10.9构造数据类型的综合应用:编辑器第四版
利用结构体和共用体变量,优化程序tedit3,并为程序tedit3添加字符串查找和替换功能,完成§9.3.7提出的设计目标,升级为第四版tedit4。10.9.1编辑器第四版tedit4在开发tedit4程序之前,我们先预演增加的功能,观察效果。(1)启动程序tedit4.exe,首先编辑一些字符;(2)单击查找功能键F3,屏幕底部将提示用户,要求输入待查找的字符串,输入完后回车,程序执行查找,如果找到了,光标会停留在已找到的第一个字符串处,否则将出现未找到的提示信息;(3)单击替换功能键F4,与其它编辑器类似,输入查找和替换的字符串后回车,编辑文本中从光标开始以后的所有查找字符串将被替换为替换字符串。(4)按ESC键,退出程序。
10.9.2优化程序tedit3
引入结构和共用体变量,把tedit3.c中部分全局变量定义为结构成员,用共用体处理键盘扫描码。
1.定义全局的结构变量将程序tedit3.c中的全局变量定义语句:intscrnx,scrny;intcurloc,endloc;修改为全局的结构变量point的成员:struct{intscrnx,scrny;intcurloc,endloc;}point;2.修改对变量scrnx,scrny,curloc,endloc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 地下车库清洁卫生管理制度
- 电商大促搜索排序灰度性能测试报告
- 建筑建材行业BIM技术应用与数字化转型升级分析报告
- 交通运输设备行业市场发展现状投资分析及机遇评估研究报告
- 2026安徽中医药大学第二附属医院编外人员招聘4人备考题库附答案详解(b卷)
- 2026河南洛阳仁大医院春季招聘23人备考题库含答案详解(典型题)
- 2026年龙湖现代免疫实验室招聘工作人员备考题库及参考答案详解
- 2026安徽安定医院芜湖医院(芜湖市第四人民医院)招聘工作人员9人备考题库附答案详解(满分必刷)
- 2026重庆巴南区教育事业单位公开遴选教师60人备考题库含答案详解(突破训练)
- 2026河南平顶山科技职业学院人才招聘备考题库及答案详解(各地真题)
- 《TSG08-2026特种设备使用管理规则》解读
- 2026内蒙古和林格尔新区建设管理咨询有限公司招聘6人建设笔试模拟试题及答案解析
- 2026贵州省公路建设养护集团有限公司招聘8人建设笔试备考题库及答案解析
- 2026睡眠障碍干预课件
- 2026江西省福利彩票发行中心及市级销售机构招聘编外人员14人建设考试参考试题及答案解析
- 长沙市明德教育集团2024-2025学年七年级下学期期中考试历史试卷及答案解析
- 福建省2026届高中毕业班适应性练习(省质检)语文试卷
- 室外综合管网施工方案(含给水、热力、排水)
- 2026届陕西省宝鸡市高三下学期二模历史试题(含答案)
- 2026广东广州市海珠区南石头街招聘雇员3人备考题库附答案详解ab卷
- 肾移植患者透析过渡期护理
评论
0/150
提交评论