版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章
用户自己定义数据类型
—C程序设计本章要点结构体的定义和引用结构体数组指向结构体类型数据的指针链表主要内容概述定义结构体类型变量的方法(9.1)结构体数组(9.2)指向结构体类型数据的指针(9.3)用指针处理链表(9.4)共用体(9.5)用typedef定义类型(9.6)概述C语言的数据类型:C数据类型基本类型构造类型指针类型空类型void字符类型char枚举类型enum整型实型单精度型float双精度型double数组结构体struct共用体union短整型short长整型long整型int结构体struct概述
为何引进结构体?一类问题学生的学号、姓名、性别、年龄等信息图书的书号、书名、出版社、价格等货物的货号、货名、进出货日期、价格等这类问题中数据有何特点,如何存储?特点由几个不同类型的数据组成一个有机整体。这个整体用一个数据元素表示。存储:需要按一定顺序同时存储这些不同类型的数据。结构体:一组具有不同数据类型的数据的有序集合。结构体的每个元素包含若干个不同数据类型的成员。结构体的各个元素结构相同。定义结构体类型(9.1.1)结构体类型的声明一般形式:struct[结构体名]{
成员表列};类型名成员名;类型名成员名;
……如:structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};;不可或缺说明:上述定义仅仅声明一个结构体类型,还未定义结构体变量,还未分配内存。标识符表示定义结构体类型变量的方法(9.1)定义结构体变量的三种方式:1.先声明结构体类型再定义变量声明结构体类型struct结构体名{
类型名成员名;类型名成员名;
……};定义结构体变量struct结构体名变量名表列;如:structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};structstudentstu1,stu2;定义结构体类型变量的方法(9.1)2.在声明类型的同时定义变量struct结构体名{
类型名成员名;类型名成员名;
……}变量名列表;structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;struct{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;3.直接定义结构体类型变量struct{
类型名成员名;类型名成员名;
…….}变量名列表;定义结构体类型变量的方法(9.1)内存分配在定义了结构体变量后,系统为之分配的内存单元字节数是结构体变量中各个成员的字节数之和。例如:stu1和stu2在内存中各占63个字节(4+20+1+4+4+30=63)。namenumsexagescoreaddr4字节4字节20字节1字节4字节30字节……..namenumsexagescoreaddr4字节4字节20字节1字节4字节30字节……..stu2stu1structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;定义结构体类型变量的方法关于结构体类型的说明:类型和变量是不同的概念类型:确定一类数据的结构与性质;变量:数据类型:不分配内存;变量:分配内存类型:不能赋值、存取、运算;
变量:可以运算结构体变量的成员可以单独使用,相当于普通变量。成员名可以与程序中的变量名相同,互不干扰。结构体可以嵌套,成员也可以是一个结构体。定义嵌套的结构体类型时,应满足先定义后引用的原则。numnamebirthdaymonthdayyearstructstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;floatscore;例structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];structdatebirthday;}stu;结构体变量的引用结构体变量的引用除了赋值运算外,不能整体引用结构体变量,只能引用其成员。成员引用方式:结构体变量名.成员名例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score;stu1.age++;.成员运算符,优先级最高,从左到右对结构体变量的成员可以像普通变量一样进行各种运算。例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;printf(“%d,%s,%c,%d,%f,%s\n”,stu1);()stu1={101,“WanLin”,‘M’,19,87.5,“DaLian”};()if(stu1==stu2)……..()结构体变量的引用结构体变量的引用不能将一个结构体变量作为一个整体进行输入输出,对结构体变量的输入输出应对其成员逐个进行。例1:结构体变量的输入输出。#include<stdio.h>//例1structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};intmain(){structstudentstu;\\定义结构体student变量scanf("%d\n",&stu.num);gets();scanf("%c%d%f\n",&stu.sex,&stu.age,&stu.score);gets(stu.addr);printf("%d\n%s\n%c\n%d\n%.1f\n%s\n",stu.num,,stu.sex,stu.age,stu.score,stu.addr);return0;}输入:1001LiQiangM1880
200BeijingRoad输出:1001LiQiangM1880.0
200BeijingRoad结构体变量的引用结构体变量的引用可以将一个结构体变量的值赋值给另一个结构体变量例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;stu2=stu1;()结构体变量的引用结构体变量的引用结构体嵌套时逐级引用,直至最低级。例structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];structdatebirthday;}stu1,stu2;可以这样访问其成员:stu1.birthday.year不能用stu1.birthday来直接访问stu1变量中的成员birthday,因为stu1.birthday本身是一个结构体变量。结构体变量的初始化形式一:struct结构体名{类型名成员名;类型名成员名;
……};struct结构体名结构体变量={初始数据};例structstudent{intnum;charname[20];charsex;intage;charaddr[30];};structstudentstu1={112,"WangLin",'M',19,"200BeijingRoad"};结构体变量的初始化结构体变量的初始化形式二:struct结构体名{
类型名成员名;类型名成员名;
……}结构体变量={初始数据};例structstudent{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,"WangLin",'M',19,"200BeijingRoad"};
结构体变量的初始化结构体变量的初始化形式三:
struct{类型名成员名;类型名成员名;
……}结构体变量={初始数据};例struct{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,"WangLin",'M',19,"200BeijingRoad"};
结构体变量的初始化结构体变量的初始化例9.1对结构体变量初始化.//例9.1
#include<stdio.h>intmain(){structstudent
{longintnum;
charname[20];
charsex;
charaddr[20];
}a={10101,"LiLin",'M',"123BeijingRoad"};
/*对结构体变量a赋初值*/
printf(“No.:%ld\nname:%s\nsex:%c\naddress:%s\n”,a.num,,a.sex,a.addr);
return0;}运行结果:No.:10101name:LiLinsex:Maddress:123BeijingRoad结构体数组(9.2)结构体数组的定义形式一:structstudent{intnum;charname[20];charsex;intage;};structstudentstu[2];形式二:structstudent{intnum;charname[20];charsex;intage;}stu[2];形式三:struct{intnum;charname[20];charsex;intage;}stu[2];numnamesexagenumnamesexagestu[0]stu[1]29B分行初始化:structstudent{intnum;charname[20];charsex;intage;};structstudentstu[3]={{100,"WangLin",'M',20},{101,"LiGang",'M',19},{110,"LiuYan",'F',19}};全部初始化时数组大小可省结构体数组初始化分行初始化:struct{intnum;charname[20];charsex;intage;}stu[]={{100,"WangLin",'M',20},{101,"LiGang",'M',19},{110,"LiuYan",'F',19}};分行初始化:structstudent{intnum;charname[20];charsex;intage;}stu[]={{100,"WangLin",'M',20},{101,"LiGang",'M',19},{110,"LiuYan",'F',19}};结构体数组(9.2)顺序初始化:structstudent{intnum;charname[20];charsex;intage;};structstudentstu[]={100,"WangLin",'M',20,101,"LiGang",'M',19,110,"LiuYan",'F',19};
structstudent{intnum;charname[20];charsex;intage;}stu[3];stu[1].age++;strcpy(stu[0].name,"ZhaoDa");结构体数组引用引用方式:结构体数组名[下标].成员名结构体数组(9.2)结构体数组的每个元素都是一个结构体变量,使用规则如同一般的结构体变量。结构体数组例9.2对候选人得票的统计程序。设有3个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。#include"stdio.h"//例9.2程序1#include"string.h"#defineN100structperson{charname[20];intcount;}leader[3]={"Li",0,"Zhang",0,"Fun",0};voidmain(){inti,j;charleader_name[20];for(i=1;i<=N;i++){scanf("%s",leader_name);for(j=0;j<3;j++) if(strcmp(leader_name,leader[j].name)==0) leader[j].count++;}for(i=0;i<3;i++)printf("%5s:%d\n",leader[i].name,leader[i].count);}namecountLiZhangFun000指向结构体类型数据的指针(9.3)指向结构体变量的指针一个结构体变量的指针就是该变量所占内存的起始地址。例9.3指向结构体变量的指针的应用#include<string.h>//例9.3#include<stdio.h>
structstudent{longnum;charname[20];
charsex;floatscore;};intmain()
{
structstudentstu_1;
structstudent*p;p=&stu_1;stu_1.num=89101;strcpy(stu_1.name,"LiLin");
stu_1.sex='M';stu_1.score=89.5;
printf("No.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu_1.num,stu_1.name,stu_1.sex,stu_1.score);printf("No.:%ld\nname:%s\nsex:%c\nscore:%f\n",(*p).num,(*p).name,(*p).sex,(*p).score);
return0;}运行结果:No.:89101
name:LiLinsex:Mscore:89.500000No.:89101
name:LiLinsex:Mscore:89.500000不等于*p.score指向结构体类型数据的指针(9.3)指向结构体变量的指针引用结构体变量的成员的三种方法:(设p是某结构体变量的指针)结构体变量.成员名(*p).成员名p->成员名(*p).num,(*p).name,(*p).sex,(*p).score)
p->num,p->name,p->sex,p->score->
指向运算符,优先级最高,从左到右指向结构体类型数据的指针(9.3)指向结构体变量的指针例3指向结构体变量的指针的应用#include<string.h>//例3#include<stdio.h>
intmain()
{structstudent{longnum;charname[20];
charsex;floatscore;};
structstudentstu_1;
structstudent*p;p=&stu_1;stu_1.num=89101;strcpy(stu_1.name,"LiLin");
stu_1.sex='M';stu_1.score=89.5;
printf("No.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu_1.num,stu_1.name,stu_1.sex,stu_1.score);printf("No.:%ld\nname:%s\nsex:%c\nscore:%f\n",p->num,p->name,p->sex,p->score);
return0;}指向结构体类型数据的指针(9.3)结构体数组与指针请分析以下几种运算:(设p指向结构体某个结构体变量)p->np->n++++p->n(p++)->n(++p)->np所指向的结构体变量的成员n。(p->n)++++(p->n)
先引用p指向的结构体变量的成员n,p再增值。p先增值,再引用p指向的结构体变量的成员n。指向结构体类型数据的指针(9.3)结构体数组与指针例9.4用指针法操作结构体数组。#include<stdio.h>//例11.4(程序1)
structstudent
{intnum;
charname[20];
charsex;
intage;
};
intmain()
{structstudentstu[3]={{10101,"LiLin",'M',18},{10102,"ZhangFun",'M',19},
{10104,"WangMing",'F',20}};
structstudent*p;
printf("No.Namesexage\n");
for(p=stu;p<stu+3;p++)
printf("%-10d%-20s%-8c%-4d\n",p->num,p->name,p->sex,p->age);
return0;
}运行结果:No.Namesexage10101LiLinM18
10102ZhangFunM1910104WangMingF20
#include<stdio.h>//例11.4(程序2)
structstudent
{intnum;
charname[20];
charsex;
intage;
};
intmain()
{structstudentstu[3]={{10101,"LiLin",'M',18},{10102,"ZhangFun",'M',19},
{10104,"WangMing",'F',20}};
structstudent*p;
printf("No.Namesexage\n");
for(p=stu;p<stu+3;)
printf("%-10d%-20s%-8c%-4d\n",(p++)->num,(p++)->name,
(p++)->sex,(p++)->age);
return0;
}?#include<stdio.h>//例9.4(程序3)
typedef
structstudent
{intnum;
charname[20];
charsex;
intage;
}Student;
intmain()
{Studentstu[3]={{10101,"LiLin",'M',18},
{10102,"ZhangFun",'M',19},
{10104,"WangMing",'F',20}};
Student*p;
printf("No.Namesexage\n");
for(p=stu;p<stu+3;)
printf("%-10d%-20s%-8c%-4d\n",p->num,p->name,p->sex,(p++)->age);
return0;
}指向结构体类型数据的指针(9.3)注意:(1)如果p的初值为stu,即指向第一个元素,则p加1后p就指向下一个元素。例如:
(++p)->num先使p自加1,再得到它指向的元素的num成员值。(p++)->num先得到p->num的值,然后使p自加1,指向stu[1]。指向结构体类型数据的指针(9.3)用结构体变量和指向结构体的指针作函数参数将一个结构体变量的值传递给另一个函数的三种方法:用结构体变量的成员作实参用结构体变量作实参用指向结构体变量的指针作实参,将结构体变量的地址传给对应的形参用结构体变量和指向结构体的指针作函数参数例9.5有一个结构体变量stu,内含学生学号、姓名和三门课的成绩。要求在main函数中为其赋值,在另一个函数print中输出其值。(用结构体变量作函数参数。)#include<stdio.h>//例9.5
#include<string.h>
#defineFORMAT"%d\n%s\n%f\n%f\n%f\n"
structstudent
{
intnum;
charname[20];
floatscore[3];
};指向结构体类型数据的指针(9.3)intmain()
{
voidprint(structstudent);
structstudentstu;
stu.num=12345;
strcpy(,"LiLi");
stu.score[0]=67.5;
stu.score[1]=89;
stu.score[2]=78.6;
print(stu);
return0;
}
voidprint(structstudentstu)
{printf(FORMAT,stu.num,,
stu.score[0],stu.score[1],stu.score[2]);
printf("\n");
}运行结果:12345LiLi67.50000089.00000078.599998注意:结构体变量数组成员的引用方法。指向结构体类型数据的指针(9.3)例9.6将例9.5改用指向结构体变量的指针作参数。#include<stdio.h>//例9.6
#defineFORMAT"%d\n%s\n%f\n%f\n%f\n"structstudent{intnum;
charname[20];
floatscore[3];
};intmain()
{voidprint(structstudent*);
/*形参类型修改成指向结构体的指针变量*/
structstudentstu={12345,"LiLi",67.5,89,78.6};
print(&stu);/*实参改为stu的起始地址*/
return0;}
voidprint(structstudent*p)/*形参类型改为指针类型*/
{printf(FORMAT,p->num,p->name,
p->score[0],p->score[1],p->score[2]);
/*用指针变量调用各成员的值*/
printf("\n");}运行结果:12345LiLi67.50000089.00000078.599998指向结构体类型数据的指针(9.3)例4设一个学生的记录包括学号,姓名和成绩三项,将n个学生的记录按成绩从高到低的顺序排列。程序:
程序指向结构体类型数据的指针(9.3)例5设一个学生的记录包括学号,姓名和成绩三项,将n个学生的记录按成绩从高到低的顺序排列,同时当成绩相同时,按名字的字母字典顺序从高到低顺序排序。测试数据程序:
程序学号姓名成绩这些数据你怎么存放、取出、删除?用指针处理链表(9.4)链表链表是一种基本且重要的数据结构,是动态地进行存储分配的一种结构。为何引进链表?数组存在的问题长度固定原因:静态存储分配插入删除操作不方便原因:数据连续存储链表的原理利用指针使得数据可以不连续存储。动态存储分配用指针处理链表(9.4)线性链表的组成:结点:存放用户需要的实际数据和链接结点的指针。头指针:存放第一个结点的地址,即指向第一个结点。表末标志:空指针NULL
利用结构体建立链表:
structstudent
{longnum;
floatscore;
structstudent*next;}*head;结点类型头指针变量head1249用指针处理链表(9.4)链表的访问例:需要访问学号为10101,及10107学生的成绩:head=1249printf(“%ld%5.1f”,head->num,head->score);printf(“\n%ld%5.1f”,head->next->next->num,head->next->next->score);结果:1010189.51010785.0用指针处理链表(9.4)例9.7建立一个简单链表,它由3个学生数据的结点组成,输出各结点中的数据。运行结果:1010189.51010390.01010785.0intmain()//例9.7
{structstudenta,b,c,*head,*p;
a.num=10101;a.score=89.5;//建立三个结点
b.num=10103;b.score=90;
c.num=10107;c.score=85;
head=&a;//链表结点的链接
a.next=&b;
b.next=&c;
c.next=NULL;
p=head;//p指向第一个结点
do
{printf("%ld%5.1f\n",p->num,p->score);
p=p->next;//移动p指向下一个结点
}
while(p!=NULL);//循环至遇表末标记
return0;
}#include<stdio.h>
structstudent
{longnum;
floatscore;
structstudent*next;
};用指针处理链表(9.4)处理动态链表所需的函数库函数提供动态地开辟和释放存储单元的有关函数:malloc函数函数原型:void*malloc(unsignedintsize);作用:在内存的动态存储区中分配一个长度为size的连续空间。返回值:一个指向分配域起始地址的指针(类型为void)。如果此函数未能成功地执行(内存空间不足),则返回空指针(NULL)。calloc函数函数原型:void*calloc(unsignedn,unsignedsize);作用:在内存的动态存储区中分配n个长度为size的连续空间。返回值:一个指向分配域起始地址的指针;如果分配不成功,返回NULL。用指针处理链表(9.4)处理动态链表所需的函数calloc函数用calloc函数可以为一维数组开辟动态存储空间,n为数组元素个数,每个元素长度为Size。free函数函数原型:voidfree(void*p);作用:释放由p指向的内存区,使这部分内存区能被其他变量使用。free函数无返回值。注意:使用以上库函数需包含头文件stdlib.h用指针处理链表(9.4)建立动态链表基本思想:在程序执行过程中从空表开始建立一个链表,即一个一个地开辟结点和输入各结点数据,并建立起前后相链的关系。建立一个新结点的步骤:1.开辟新结点的存储空间;2.将新结点链接到链表中;3.向新结点输入数据(第2、3步顺序可对调)要点:新结点的链接,表头的处理,表末标记用指针处理链表(9.4)例9.8写一函数建立一个存储若干学生数据的单向动态链表算法说明:约定学号不会为零,如果输入的学号为0,则表示数据已输入完。初始化:初始化链表为空表,head=NULL;指针变量:p1:指向新结点p2:指向新结点的前一个结点开辟新结点:使用函数malloc(Size)表头的处理:令头指针指向第一个建立的结点head=p1。新结点的链接:第二个结点起,令前一个结点的指针成员
p2->next=p1,接着使p2指向新链入的结点p2=p1。数据结束的判断:当读入的学号p->num等于0时,退出循环。表末标记的设置:p2->next=NULL;
图9-12用指针处理链表(9.4)
图9-13
图9-14用指针处理链表(9.4)
图9-15图9-16用指针处理链表(9.4)建立链表#include<stdio.h>//例9.8#include<stdlib.h>#defineLENsizeof(structstudent)structstudent{longnum;floatscore;structstudent*next;};intmain(){structstudent*creat();
voidprint(structstudent*head);structstudent*head;head=creat();//建立链表print(head);//输出链表
return0;}structstudent*creat(
)
//建立链表函数{
structstudent*head;
structstudent*p1,*p2;
intn=0;
p1=p2=(structstudent*)malloc(LEN);scanf("%ld%f",&p1->num,&p1->score);head=NULL;while(p1->num!=0)
{n++;
if(n==1)
head=p1;
elsep2->next=p1;
p2=p1;
p1=(structstudent*)malloc(LEN);
scanf("%ld%f",&p1->num,&p1->score);
}
p2->next=NULL;
return(head);}p2->next=NULL;free(p1);return(head);用指针处理链表(9.4)更简洁的建表方法structstudent*creat(
)
//建立链表函数{
structstudent*head=NULL;
structstudent*p1=NULL,*p2=NULL;
p1=p2=(structstudent*)malloc(LEN);scanf("%ld%f",&p1->num,&p1->score);
while(p1->num!=0)
{
if(head==NULL)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(structstudent*)malloc(LEN);
scanf("%ld%f",&p1->num,&p1->score);
}
p2->next=NULL;
free(p1);//释放p1所指内存空间
return(head);}用指针处理链表(9.4)输出链表算法思想:定义一个指针变量p;通过头指针得到链表第一个结点的地址:p=head;用指针变量p,从第一个结点起逐个指向链表的每个结点,输出其数据。指针移动操作:p=p->next;遇表末标记,则链表输出完毕。用指针处理链表(9.4)例9.9编写一个输出链表的函数print.//例9.9voidprint(structstudent*head)//输出链表函数{structstudent*p;printf("\nNow,These%drecordsare:\n",n);p=head;while(p!=NULL){printf("%ld%5.1f\n",p->num,p->score);p=p->next;}}共用体(9.5)C语言的数据类型:C数据类型基本类型构造类型指针类型空类型void字符类型char枚举类型enum整型实型单精度型float双精度型double数组结构体struct共用体union短整型short长整型long整型int共用体union共用体(9.5)共用体用途:使几个不同类型的变量共占一段内存(相互覆盖)共用体类型定义:union共用体名{成员表列};例uniondata{shorti;charch;floatf;};fchi类型定义不分配内存形式一:uniondata{shorti;charch;floatf;}a,b;形式二:uniondata{shorti;charch;floatf;};uniondataa,b,c,*p,d[3];形式三:union{shorti;charch;floatf;}a,b,c;共用体变量的定义fchifchiab共用体变量定义分配内存,长度=最长成员所占字节数共用体变量任何时刻只有一个成员存在共用体共用体共用体变量引用引用方式:与结构体类似。共用体指针名->成员名共用体变量名.成员名(*共用体指针名).成员名uniondata{inti;charch;floatf;};uniondataa,b,c,*p,d[3];a.ia.cha.fp->ip->chp->f(*p).i(*p).ch(*p).fd[0].id[0].chd[0].f共用体共用体变量引用引用规则不能整体引用共用体变量,只能引用其成员。共用体变量中起作用的成员是最后一次存储的成员。不能在定义共用体变量时初始化。可以用一个共用体变量为另一个变量赋值。共用体变量的地址和它的各成员的地址都是同一地址。如,&a,&a.i,&a.ch,&a.f都是同一个地址值。例union{inti;charch;floatf;}a={1,’a’,1.5};()例union{inti;charch;floatf;}a,b;a.i=1;a.ch=‘a’;a.f=1.5;b=a;()
例union{inti;charch;floatf;}a;a=1;()
例a.i=1;a.ch='a';a.f=1.5;printf("%d",a.i);(编译通过,运行结果不对)
共用体共用体变量引用说明可以使用指向共用体变量的指针。共用体与结构体可以互相嵌套。可以定义共用体数组。共用体例9.12设有若干个人员的数据,其中有学生和教师。学生的数据中包括:姓名、号码、性别、职业、班级。教师的数据包括:姓名、号码、性别、职业、职务。可以看出,学生和教师所包含的数据是不同的。现要求把它们放在同一表格中。共用体算法:读入position共用体voidmain(
){
inti,n;
printf("Inputthenumberofpeople:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d
%s
%c
%c",&person[i].num,
person[i].name,
&person[i].sex,&person[i].job);
if(person[i].job=='s')
scanf("%d",&person[i].category.banji);
else
scanf("%s",person[i].category.position);}
//例9.12#include<stdio.h>struct{
intnum;
charname[10];
charsex;
charjob;
union
{
intbanji;
charposition[10];
}category;
}person[2];
/*先设人数为2*/共用体
printf("\n");
//例11.12
printf("No.
name
sexjobclass/position\n");
for(i=0;i<n;i++)
{
if(person[i].job=='s')
printf("%-10d%-10s%-10c%-410c%-10d\n",person[i].num,
person[i].name,person[i].sex,person[i].job,person[i].category.banji);
else
printf("%-10d%-10s%-10c%-10c%
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年绿色环保物业管理委托合同书3篇
- 建筑工程结算施工合同协议书
- 房屋建筑施工合同验收
- 园林设施维护制度
- 乡村公路沥青改造协议
- 管道维修包清工施工合同
- 4S店销售顾问招聘合同
- 海洋工程投标保密协议
- 幼儿园体育运动场地建设合同
- 酒类加工场地租赁合同
- 马克思主义基本原理概论课后习题及答案2023年
- 国家开放大学《高等数学基础》形考任务1-4参考答案
- 系统架构图课件ppt
- 矿物绝缘电缆电缆比较
- GB/T 18601-2001天然花岗石建筑板材
- GA/T 1133-2014基于视频图像的车辆行驶速度技术鉴定
- 食品用酶制剂相关法律法规及安全标准
- 研发费用加计扣除与高新技术企业政策解析课件
- ANSYS有限元技术分析优化
- 水运工程交工质量核验申请书、意见、内容表和竣工质量鉴定申请、报告、复测内容
- 乳腺疾病诊疗规范诊疗指南2022版
评论
0/150
提交评论