C语言程序设计教程(第2版)课件第9章_免费下载.ppt.ppt 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第9章 指 针,本章要点 指针的定义、引用和运算方法 数组、函数和字符串与指针的关系 本章难点 指针变量的引用 指针作为函数参数的运用,预备知识,内存:就是内部存储器,是由存储单元组成 的。它的特点是存储单元是线性连续 的。存储单元的最小单位是字节。,1. 内存的概念,地址:为了访问内存中的某个存储单元,我们 要为它编号,这种编号称为内存地址。 通过地址我们就能够访问该地址所标 识的存储单元。,2. 地址的概念,变量的地址:变量在内存中总占用几个连续的 字节,开始字节的地址,就是变量的地址。,2007,存储单元,9.1 指针的含义,指针:一个变量的地址称为该变量的指针。,指针的对象:当把变量的
2、地址存入指针变量后, 我们就可以说这个指针指向了该变量。,变量的存取方法:直接存取和间接存取。,9.2 指针变量,9.2.1 指针变量的概念,指针变量:若一个变量专用于存放另一个变量 的地址(指针),则该变量称为指针变量。,9.2.2 指针变量的定义,例如: int *ptr1, *ptr2;,指针变量的类型:指明了该指针指向的内存空 间所存储的数据类型。,在定义指针变量时要注意以下几个问题:, 变量名ptr2前面的“*”不能省略,如果写成 int *ptr1, ptr2; 则ptr2被定义为整型变量,而非整型指针变量。,定义中的“*”表示所定义的变量是指针变量,但 指针变量名是ptr1、pt
3、r2,而非*ptr1、*ptr2。,指针变量只能指向定义时所规定类型的变量。 这个规定的类型称为该指针变量的“基类型”。,如:上例中ptr1、ptr2只能指向整型变量,不 能指向实型或字符型变量。其“基类型” 相同,都是整型。,定义指针变量后,并未确定该变量指向何处。 也就是说该变量的值是不确定的。在引用指针 变量前必须首先让它指向一个变量,这一点非 常重要。,首先介绍指针运算符(,),“ float *q , x ;,则:q= ,我们还可以用这种方法实现对变量的改变:,*ptr=15 ; 等价于 i=15 ;,由此可见:通过指针运算符“*”可以引用一个变量。如:当ptr已经指向变量i后,*p
4、tr就等同于i。,进一步理解“ pi=,把指针变量的值赋给另一个指针变量。,如:int i,*pa,*pb; pa=,给指针变量赋值为符号常量NULL。,说明:NULL是一个空指针,表示该指针变量的值没有意义。作用是为了避免对没有被初始化的指针变量的非法引用。NULL 的定义在“stdio.h”中。,如:int *pi ; pi=NULL ;,1指针的+、运算,说明:,指针与整型值加减的结果是指针,表示使该指针指向该指针下移或上移存储单元个数(整型值)之后的内存地址。存储单元的大小就是该指针的数据类型所需的内存大小。,例如:ptr+n (指针ptr,n为整数)这个指针值代表的内存单元的地址是:
5、ptr+n*d(其中d是指针所指向变量的数据类型所占内存字节数),即指针移动了n个元素。,9.2.4 指针的算术运算符,指针与指针的加运算毫无意义,所以指针与指针 没有加运算。,指针与指针的减运算要求相减的两个指针属于同 一类型,其结果是整数,表示两个指针之间的数 据的个数。其结果值的计算公式是:,ptr1-ptr2=(ptr1的值- ptr2的值) /指针的数据类型所占的字节数,例如: int *ptr1,*ptr2,*ptr3,x; int ary5=2,4,8,16,32; ptr1 = ,x 的值是3,2指针的+、 -、+=、-= 运算,+、 += :是移动指针到下一个或下几个存储单元
6、。,-、 -= :是移动指针到上一个或上几个存储单元。,例如:int *ptr, ary5=2,4,6,8,10 ; ptr=ary; ptr+=3; ptr-;,想一想:*ptr+和(*ptr)+有什么 的区别 ?,基类型相同的两个指针进行比较运算,其意义是两个指针的位置比较,结果是逻辑值。,指针运算的程序举例:把a,b按大小顺序输出。,main() int *p1,*p2,*p,a,b; a=45;b=76; p1= ,输出结果: a=45,b=76,max=76,min=45,指针的关系运算,9.3 指针与数组,9.3.1 一维数组的指针,数组的指针 :是数组的起始地址。,数组元素的指针
7、 :是数组元素的地址。,当指针变量指向数组或数组元素时,它就是指向数组的指针变量。,C规定:,数组名代表数组的首地址(起始地址), 也就是第一个元素的地址。,当指针变量p指向数组时,p+1指向数组 的下一个元素。假设一个整型元素占两 个字节,p+1是使p的地址加2个字节。,如:int a10,*p ; 则:p=a ; 与 p=等价 称指针变量p指向数组元素a0,p+i、a+i 、,2. 用指针法引用数组元素,假如: int a10, *p, i ; p=a;,则:*(p+i)、*(a+i)则代表元素ai, *(p+i)也可以写成pi,程序举例:输出10个元素数组中的全部元素。,方法二:通过数组
8、名计算数组元素地址,找出元素的 值。 main() int a10=54,65,8,2,3,56,8,21,57,98,i; for(printf(n),i=0;i10;i+) printf(%4d,*(a+i); ,方法一:下标法。 main() int a10=54,65,8,2,3,56,8,21,57,98, i; for(printf(n),i=0;i10;i+) printf(%4d,ai); ,方法三:用指针变量指向数组元素 main() int a10=54,65,8,2,3,56,8,21,57,98,*p,i; p=a; for(printf(n),i=0;i10;i+)
9、printf(%4d,*p+); ,以上三种方法,利用指针变量效率最高。,说明:指针变量与数组名的区别:,指针变量是地址变量,数组名是地址常量。即指针变量的内容可以在程序运行过程中被改变;而数组名一旦被定义,它的值就不能被改变了。,例如: int i, *p, a6; 则:p=,不能给常量赋值,利用指针变量编程时特别要注意指针变量 的当前值。,例如:通过指针变量输入输出a数组元素。 main() int *p,i,a10; p=a; for(i=0;i10;i+) scanf(%d,p+); for(printf(“n”),i=0;i10;i+) printf(“%6d”,*p+); ,应插入
10、语句 p=a;,注意:*p+、*(p+)、(*p)+、*(+p)的含义,9.3.2 二维数组的指针,1二维数组的指针概念,在C语言中,一个二维数组可以看成是一个一维数组,其中每个元素又是一个包含若干元素的一维数组。,假如有定义:int a23;,则C语言编译程序认为a数组是由a0,a1两个元素组成的一维数组,a0和a1分别是包含三个元素的一维数组名,分别代表a数组元素的起始地址(即a0是第0行元素的首地址, a1是第1行元素的首地址)。因此,a和a0是两个基类型不同的指针常量。,2通过指针引用二维数组元素,假如有定义: int a35, i,j ; (其中0i 3, 0j 5),则:ai和*(
11、a+i)(无条件等价)都是第i行第0列 元素的地址,那么ai+j、*(a+i)+j、 p=a;,注意:*p两侧的圆括号不可缺少。,则: p是一个指向由3个整型元素组成的一 维数 组的指针变量。,例:使用行指针变量访问数组元素。,main() float fa510, (*pf)10=fa; int i,j; for(i=0; i5; i+) for(j=0; j10; j+) *(*(pf+i)+j)=i*j; for(i=0;i5;i+) for(puts(),j=0;j10;j+) printf( %.0f,faij); ,9.4 指针与函数,9.4.1 变量的指针作为函数参数,指针可以用
12、作函数参数,这在调用函数希望改变参数的值时非常有用。,例如:用指针变量编写实现两个数的交换的函数,void swap(int *p1, int *p2); main() int x1=100,x2=200; printf(x1=%d,x2=%dn,x1,x2); swap( ,void swap(int *p1, int *p2) int temp; temp=*p1; *p1=*p2; *p2=temp; ,图示交换过程中存储单元内容的变化:,1,2,3,4,5,6,想一想:如果函数的参数不用指针而用整数, 能否实现值的交换?为什么?,通过函数调用得到n个要改变的值的方法:,在主调函数中设n
13、个变量,用n个指针变量指向它们;,将指针变量作实参,将这n个变量的地址传给所调用 的函数的形参;,通过形参指针变量,改变该n个变量的值;,主调函数中就可以使用这些改变了值的变量。,注意:不能企图通过改变指针形参的值而使指 针实参的值改变。 如:上例swap函数中不能写成: temp=p1; p1=p2; ;p2=temp;,9.4.2 指针型函数,返回指针的函数称作指针函数 。,含意:函数的返回值是一个指针,它指向所定 义类型的数据 。,例如:int *a(int x, int y) ; /*函数原型声明*/ 含意:a是函数名,调用它以后能得到一个指 向整型数据的指针(地址)。,1. 指针型函
14、数的定义方法,例: 编写能返回结果串地址的串拷贝函数。,#include stdio.h char *strcpy1(char* str1,char*str2); main() char *ps, s180=yhhhj; ps=strcpy1(s1,fdgjdfh); puts(ps); char *strcpy1(char *str1,char *str2) char *s=str1; while(*str2) *str1+=*str2+; *str1=0; return s; ,*返回的指针必须在主调函数的可见域。,每一个函数都占用一段内存,在编译时,被分配一个入口地址,这个入口地址就称为
15、函数的指针。,例如:float (*p)( ); 含意:定义了p是指向函数的指针变量,函数 的返回值是float类型。,. 函数的指针变量, (*p)()表示定义一个指向函数的指针变量, 它不是固定指向哪个函数。,3. 对指向函数的指针变量赋值,将一个函数的函数名(代表入口地址)赋值给指向函数的指针变量,也称该指针变量指向了这个函数。,如: int max(int x,int y);/*函数的原型声明*/ int (*p)(); p=max;,注意:赋值时,只需给出函数名而不必给出参数。,注意:, 对指向函数的指针变量,p+n, p+, p- - 等运算是无意义的。, 注意区别 int (*p
16、)( )、int *p( ),4. 函数的调用,例如:若有定义 int max(int x,int y); int (*p)() ,a,b,c ; p=max; 则可有语句 c= (*p) (a,b) ;,例: 求a和b中的大者 。,main() int max(int,int); int (*p)(); int a,b,c; p=max; scanf(“%d,%d”, ,9.4.3 一维数组的指针作为函数参数 1.数组名作实参,例如: f(int arr,int n) main() int array10; f(array,10); ,现在解释: 实际上,能够接受并存放地址值的只能是指针变量
17、。因此,C编译系统都是将形参数组名作为指针变量来处理的。上例中f(int arr ,int n) 等价于 f(int *arr, int n) 。,使用形参数组的概念只是为了与实参数组对应,直观,便于理解而已。,例:从10个数中找出其中最大值和最小值。,void max_min(int a,int n,int *max,int *min); main() int i,a=2,4,1,6,7,32,45,75,45,90,max,min; for(printf(The original array=),i=0;iai) *min=ai; ,上例中如果形参数组用指针变量,则程序如下:,void m
18、ax_min(int *x,int n,int *max,int *min); main() int i,a10=2,4,1,6,7,32,45,75,45,90,max,min; for(printf(The original array=),i=0;i*x) *min=*x; ,数组名做函数参数小结:,注意:用指针变量作实参时一定要有确定的值。,例:实参、形参都用指针变量的形式,main() int a10,*p; p=a; f(p,10); ,f(int *x, int n) ,例:实参为指针变量,形参用数组名。,main() int a10,*p; p=a; f(p,10); ,f(i
19、nt x , int n) ,数组元素地址作实参 当用数组元素的地址作为实参时,因为是地址值,所以对应的形也应当是基类相同的指针变量。,例编写程序,对具有10个元素的char类型数组,从下标为4的元素开始,全部设置为“*”,保持前4个元素不变。 void setstr(char *,int); main() char c10=A,B,C,D,E,F,G,H,I,J; setstr( ,3函数的指针形参和函数体中数组的区别 当用数组元素的地址作为实参时,因为是地址值,所以对应的形也应当是基类相同的指针变量。,#define N 10 int *fun(int aN,int n) int bN;
20、return b; main() int wN,*p; p=fun(w,N); ,说明: 程序中定义fun函数,形参a指向w 数组,函数体内定义了一个数组b,函数把b数组的起始地址作为函数的返回值,企图使指针p指向函数体内b数组的开头。,9.4.4 二维数组的指针作为函数参数,二维数组名作为实参,当二维数组名作为函数实参时,对应的形参必须是一个行指针变量 。,main() double a34; fun(a); fun(double (*a)n) ,说明:和一维数组一样,数组名传送给变量的是一个地址值,因此,对应的形参也必须是一个类型相同的指针变量,在函数中引用的将是主函数中的数组元素,系统只
21、为形参开辟一个存放地址的存储单元,而不可能在调用函数时为形参开辟一系列存放数组的存储单元。,9.5 指针与字符串,字符串指针:字符串的首地址。,字符指针变量:指向字符串的指针变量。,字符指针变量定义时可以赋初值。,9.5.1 单字符串,1 用字符数组存放一个字符串,例如:char s =I am a student.;,字符串输出语句可写成: printf(“%sn”,s); for(i=0; si; i+)printf(“%c”, si); for(i=0; si; i+)printf(“%c”,*(s+i);,也可用si!=0,2用字符指针指向一个字符串,例如:char *ps=I am
22、a student.;,字符串输出语句可写成: printf(“%sn”,s); for(; *ps; ps+)printf(“%c”, *ps);,说明:,字符数组由若干个元素组成,每个元素中放一个字符。而字符指针变量中存放的是地址(字符串的首地址),决不是将字符串放到字符指针变量中;,字符数组和字符指针变量都可以在定义时赋初值,但以下方法对字符数组非法,对字符指针变量合法:,字符数组名是指针常量,只能表示一个确定的字符串,不能改变。而字符指针变量的值是可以改变的,它可以代表不同的字符串。,若定义了一个指针变量,并使它指向一个字符串,就可以用下标形式引用指针变量所指字符串中的字符。,如:ch
23、ar *a=“I love China!”;printf(“%c”,a5);,程序举例:将字符串a复制为字符串b。,main() char a=“It is a dog., b20; int i=0; do *(b+i)=*(a+i); i+; while(*(a+i)!=0); /* 也可写成while(*(a+i);*/ puts(b); ,上例程序还可写成:,main() char a=It is a dog., b20,*p1=a,*p2=b; int i=0; do *p2=*p1; p2+;p1+; while(*p1!=0); /*也可写成 while(*p1);*/ puts(
24、b); ,一、指针数组的有关概念,指针数组:就是数组中每个元素是基类型相同 指针变量。,例如: int *p2; 含意:p是一个一维指针数组,每个元素都是 一个指向整型变量的指针变量。可以将 整型变量的地址赋值给元素p0或p1。,注意:区别 int *p2 、int (*p)2 的含意。,9.5.2 多字符串,二、定义多字符串的方法,1用二维数组定义多字符串,例如: char state9=“china”,”american”,”japan”,”canada”;,2用字符指针数组定义多个字符串,例如: char *state=“china”,”american”,”japan”,”canada
25、”;,三、指针数组的应用,利用指针数组处理多个串,方法:先用指针数组指向字符数组, 再处理。,main() char name80=aaa,bbb,ccc,ddd,eee; char *pname10, i ; for(i=0;i5;i+)pnamei=namei; for(i=0;i5;i+)puts(pnamei); ,main() /*与用行指针解决上述问题比较*/ char name80=aaa,bbb,ccc,ddd,eee; char (*pname)80=name, i ; for(i=0;i5;i+)puts(pnamei); ,方法:用指针数组指向字符串常量。,main()
26、char *pname10=aaa,bbb,ccc,ddd,eee; int i ; for(i=0;i5;i+)puts(pnamei); ,9.字符数组与字符指针的区别,区别如下: ()字符数组由若干个元素组成,每一个元素是一个字符,字符指针变量中存放的是字符串的首地址,而不是把字符放到字符指针变量中。 ()赋初值的方式不同,使用字符数组的时候,必须使用static存储类别字符指针变量则不必。 ()赋值方式不同,对于字符数组,只能对各个元素赋值,而不能象字符指针变量那样使用字符串对整体赋值。 ()新定义的数组在编译时分配内存单元,有确定的地址,而新定义的指针变量,无具体的值解决办法是,把一
27、个已定义的字符数组的地址赋给这个指针变量。 ()字符指针变量的值是可以改变的,虽然字符数组名也表示数组的首地址,但是却不能通过赋值的方法改变。 ()字符指针变量也可以使用下标运算符引用字符串中的字符,另外它还可以指向一个格式字符串,用以代替printf中的格式字符串,实现灵活可变的输出形式。,9.7.1 定义形式 指向指针的指针变量(也称多级指针)只能存放指针变量的地址。,例如:int *q, *p, i=5; p=,注意:要使用一个多级指针指向目标值,必须连续使用指针运算符“*”。,例如:上例中*q就是i的值。,含意:使指针变量p指向i,指针变量q指向p。,9.7 指向指针的指针,1指向行指
28、针的指针变量 定义形式: 数据类型 *(*变量名)指向的数组长度; 例如: int *(*p)4; 2指向指针的指针数组 其定义形式为: 数据类型 *数组名数组长度; 例如: int *b6; 3. 指向行指针的指针数组 定义的一般形式为: 数据类型 *(*变量名数组长度)指向的数组长度; 例如: int *(*b3)4;,其他多级指针的定义形式:,9.7.2 传给main函数的参数,main函数是由系统调用的,可以有参数。,main函数实参:,带参数的main函数的原型是:,main( int argc, char *argv ) ;,命令行参数(包括可执行文件名)的数目n+1,指针数组,各
29、元素分别指向命令行中的各参数(包括可执行文件名),即字符串的首址,例:若以下面程序编译后生成可执行程序 file.exe, 在DOS提示符下按下述形式执行程序: file China Bejing Shenyang 写出程序运行结果。,#include main(int argc, char *argv ) while(argc0) printf(“%sn”, argvargc) ; ,运行结果: Shenyang Bejing China,void指针类型介绍:,新标准增加了void指针类型,它用于定义一个指针变量,但不指定它是指向哪种类型数据。在将它的值赋给另一个指针变量时要进行强制类型转
30、换使之适合于被赋值的变量的类型。,9.7.3 void指针类型,例如: char *p1; int a=2; void *p2; p2=,强制类型转换,void指针变量定义,同样,可用 p2=(void *)p1; 将p1的值转换成void 指针类型。,可以将一个函数定义为void 指针类型。表示该函数返回的是一个地址,它指向空类型,如需要引用此地址,也需要根据情况进行类型转换。,如, 库函数:void *malloc(unsigned size); 功能:分配size字节的存储区。,函数调用例: char *p; p=(char *)malloc(60);,分配60字节的存储区,并返回该内存
31、区的地址,并赋值给p 。,void sort(char *ps ,int n); #define N 5 main() char *ps100,i; for(i=0;iN;i+) psi=(char*)malloc(60); for(i=0;iN;i+) gets(psi); sort(ps,N); for(i=0;iN;i+) puts(psi); ,void sort(char *ps,int n) int i, k; char *p,s100; for(i=0;in-1;i+) for(k=i+1;kn;k+) if(strcmp(psi,psk)0) p=psi; psi=psk; p
32、sk=p; ,例:用指针数组指向动态内存,进行字符串的排序。,9.8 指针的数据类型小结,本章程序举例:,习题9.1:输入3个整数,按由小到大的顺序输出。,void swap(int *p, int *q); main() int a=9,b=7,c=10,*p1,*p2,*p3; p1= ,习题9.2:输入3个字符串,按由小到大的顺序输出。,void swap(char *ps1,char *ps2); main() char s1=abc,s2=rst,s3=xyz; if(strcmp(s1,s2)0) swap(s1,s2); if(strcmp(s1,s3)0) swap(s1,s3
33、); if(strcmp(s2,s3)0) swap(s2,s3); printf(n%10s %10s %10s,s1,s2,s3); void swap(char *ps1,char *ps2) char ps100; strcpy(ps,ps1);strcpy(ps1,ps2);strcpy(ps2,ps); ,习题9.3:写一函数,将一个33的矩阵转置。,main() int a33=1,2,3,4,5,6,7,8,9,i,j; for(i=0;i3;i+) for(puts(), j=0; j3; j+) printf(%6d,aij); move(a); for(i=0;i3;i+
34、) for(puts(), j=0; j3; j+) printf(%6d,aij); move(int (*p)3) int i, j, t; for(i=0; i3; i+) for(j=0; ji; j+) t=*(*(p+i)+j);*(*(p+i)+j)=*(*(p+j)+i); *(*(p+j)+i)=t; ,习题9.4:写一函数,实现两个字符串的比较。,main() char s1128,s2128; gets(s1); gets(s2); printf(cmps(s1,s2)=%d,cmps(s1,s2); cmps(char *s1,char *s2) while(*s1 ,
35、习题9.5:写一个函数,求字符串的长度,在main 函数中输入字符串,并输出其长度。,int len(char *ps); main() char str30; gets(str); printf(n len=%d,len(str); int len(char *ps) int n=0; while(*ps+)n+; return n; ,习题9.6:有一字符串包含N个字符,写一个函数, 将字符串中从第M个字符开始的全部字 符复制成为另一个字符串。,main() char sn100=fasjfkjsdfsdfjsdjkfdfjssdf,sm100; int n=strlen(sn),m=n/
36、2; scopy(sn,sm,m); printf(n sn=%s n m=%d n sm=%s,sn,m,sm); scopy(char *psn,char *psm,int m) while(*(psn+m)*psm+=*(m+psn+); *psm=0; ,习题9.7:输入一行文字,找出其中大写字母、小 写字母、空格、数字以及其他字符各有多少?,main() char s100,*p; int lowc=0, upc=0, space=0, num=0; gets(s); p=s; while(*p) if(*p=A ,习题9.8:对10个等长的字符串排序并输出。,void sort(c
37、har (*p)60); main() char s1060,i; for(i=0; i10; i+)gets(s+i); sort(s); for(i=0; i10; i+)puts(s+i); void sort(char (*p)60) int i,j; char s60; for(i=0; i9; i+) for(j=i+1; j10; j+) if(strcmp(pi,pj)0) strcpy(s,pi); strcpy(pi,pj); strcpy(pj,s); ,9.9:用指针数组处理上一个题目,字符串不 等长。,void sort(char *p ,int n); main()
38、 char *s10=AAA,DDD,878787,*ps10,i; for(i=0;i10;i+)psi=si; sort(ps,4); for(i=0;i4;i+)puts(psi); void sort(char *ps ,int n) int i, j; char *s; for(i=0;in-1;i+) for(j=i+1;jn;j+) if(strcmp(psi,psj)0) s=psi, psi=psj, psj=s; ,习题9.10:将n个数按输入时顺序的逆序排列,用 函数实现。,void inverse(int *a,int n); main() int i,a10=2,4,
39、1,6,7,32,45,75,450,89; for(puts( ), i=0;i10;i+)printf(%5d,ai); inverse(a,10); for(puts( ), i=0;i10;i+)printf(%5d,ai); void inverse(int *x,int n) int *i=x,*j=x+n-1,t; for(;ij;i+,j-) t=*i; *i=*j; *j=t; ,习题9.11:输入一个字符串,将其中的数字串转换 成数值送数组A。,main() char s128,*ps=s; int a100, i, n; gets(s); for(i=0,n=0;*ps;
40、ps+) if(*ps=0 ,习题9.12:根据输入的月份输出月的英文名。,main() char *month=January,February,March, April, May,June,July, August, Septermber, October,Noverber, Decermber; int mon; scanf(%d, ,9.13:有N个数,使前面各数顺序向后移M个位置。,main() int num20,m,n,i; printf(nm= n=);scanf(%d%d, ,习题9.14:有一字符串包含N个字符,写一个函数, 将字符串中从第M个字符开始的全部字 符复制成为另一个字符串。,main() char sn100=fasjfkjsdfsdfjsdjkfdfjssdf,sm100; int n=strlen(sn),m=n/2; scopy(sn,sm,m); printf(n sn=%s n m=%d n sm=%s,sn,m,sm); scopy(char *psn,char *psm,int m) while(*(psn+m)*psm+=*(m+psn+); *psm=0; ,习题9.15:有一字符串包含N个字符,写一个函数, 将字符串中从第M个字符开始的全部字 符复制
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年及未来5年市场数据中国流通股质押贷款业务行业市场全景评估及投资战略数据分析研究报告
- 政策与法律法规精讲
- 2026年及未来5年市场数据中国休闲餐饮行业运行态势及市场发展潜力预测报告
- 2026年山西农业大学《大学计算机基础》期末试卷及答案
- 智慧农业:技术赋能与未来发展
- 2025 高中信息技术数据与计算之数据可视化的靶心图设计课件
- 2026年汽车行业零碳工厂建设指南与脱碳路径
- 2026年深海光缆作业机器人海底电缆施工关键技术应用
- 2026年漂浮式风电从示范向商业化应用转型指南
- 2026年孤儿电站问题应对企业倒闭后电站运维责任机制
- 招商公司运营薪酬制度
- 2025届贵州省高三学业水平选择性考试适应性测试生物试题(解析版)
- 2026年苏州工业职业技术学院高职单招职业适应性测试备考题库含答案解析
- 英语教学反思案例及改进策略
- 炎德·英才大联考湖南师大附中2026届高三月考试卷(五)英语试题(含答案详解)
- 2026年江西生物科技职业学院单招职业技能测试题库含答案详解
- 2018沪G504 钢筋混凝土锚杆静压桩和钢管锚杆静压桩
- 国家事业单位招聘2024中国农业科学院农业环境与可持续发展研究所招聘笔试历年参考题库典型考点附带答案详解(3卷合一)
- 2025年大理州州级机关统一公开遴选公务员参考试题(32人)附答案解析
- 2025+RCOG指南:妊娠甲状腺疾病管理解读课件
- 三国演义三英战吕布课件
评论
0/150
提交评论