版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第1章 C+的初步知识上学期是以C为蓝本来讲解,这学期需要增加一些C+的内容,这是进入C/C+程序设计II学习的前期准备。1.1 从C到C+C语言是结构化和模块化的语言,它是面向过程的。能处理小规模的程序。但当规模较大时会显示出它的不足。为了解决这个软件危机,提出了面向对象的程序设计(object oriented programming,OOP)思想。C+保留了C语言原有的所有优点,增加了面向对象机制。所以C+也称为“带类的C”。C+对C的“增强”,表现在以下两个方面:1、在原来面向过程的机制基础上,对C语言的功能作了扩充。(本章将介绍充分部分)2、增加了面向对象的机制。在面向对象的程序设计
2、中仍然要用到结构化程序设计的知识。下面介绍C+对C的扩充,及与C的差别所在。1.2 最简单的C+程序 C+程序在结构上与C的差别如下: 1、 标准C+规定main函数声明为int型,即此主函数带回一个整型的函数值。程序如果正常执行,则操作系统返回数值0,否则返回数值-1。2、 系统头文件不带后缀.h,如:#include3、 使用系统库时要使用命名空间std。即使用using namespace std;,这句话的意思是使用命名空间std。C+标准库中的类和函数是在命名空间std中声明的,因此程序中如果需要用到C+标准库,就需要用using namespace std;来声明,表示要用命名空间
3、std中的内容。例1.1 最简单的只有输出的程序#includeusing namespace std;int main()coutThis is a C+ programm.n; /cout是对象名,称为输出流对象。“”是插入运算符return 0; /没有此句会有警告。最好加上此句例1.2 最简单的有输入的程序#includeusing namespace std;int main()int a,b,sum;cinab; /cin是输入流对象。“”是提取运算符sum=a+b;couta+b=sumendl;return 0; /没有此句会有警告。最好加上此句例1.3 输入二个数x和y,求两
4、个数中的大者。(要求用函数实现,学生练习)例1.4 对学生信息进行输入也输出。1)用结构体实现#includeusing namespace std;struct Studentint num;int score;void input(struct Student *ps)cinps-num;cinps-score;void output(struct Student s)couts.numendl;couts.scorenum;cinscore;void output()coutnumendl;coutscoreendl;int main()struct Student s;s.input(
5、);s.output(); 数据与对数据的操作(函数)是一个整体。类中的函数也是一个成员,叫着成员函数。数据成员被说明为私有的,在类外是不能使用的。1.3 C+对C 的扩充1.3.1 C+的输入输出在C+中是通过调用输入输出流库中的流对象cin和cout实现的。流指的是来自设备或传给设备的一个数据流。cout是输出流对象的名字,cin是输入流对象的名字。一、 输入流与输出流的基本操作cout语句的一般格式为:cout表达式1表达式2变量1变量2变量n;当程序需要在屏幕上显示输出时,可以使用插入操作符,向cout输出流中插入字符。例如:cout,从cin输人流中抽取字符。例如:int a;cin
6、a;。不管把什么基本数据类型的名字或值传给流,它都能懂。例如,下面的程序是输出字符串和整数:#include using namespace std;int main() coutThis is a C+ program.endl; coutThis is a C+ program. endl; coutThis is ; couta C+ program. ; coutendl; cout2; coutabc;,也可以写成:cina;cinb;cinccin能够知道抽取的变量的类型,它将对a,b,c分别给出一个整型、浮点型和字符型数。二、输入流与输出流中使用控制符(第七章中详细介绍,这里了解
7、就可以了)流的默认格式输出有时不能满足特殊要求,如: double average=9.;coutaverageendl;希望显示的是9.40,即保留两位小数,可是却显示了9.40007,默认显示6位有效位。 用控制符(manipulators)可以对I/O流的格式进行控制。控制符是在头文件iomanip.h中定义的对象。可以直接将控制符插入流中。常用控制符如下表所列。表1 IO流的常用控制符 控制符描 述DecHexOctsetfill(c)setprecision(n) setw(n) setiosflags(ios:fixed) setiosflags(ios:scientific) s
8、etiosflags(ios:left) setiosflags(ios:right) setiosflags(ios:skipws) setiosflags(ios:uppercase) setiosflags(ios:lowercase)置基数为10 置基数为16 置基数为8 设填充字符为c 设显示小数精度为n位 设域宽为n个字符固定的浮点显示 指数表示左对齐右对齐 忽略前导空白16进制数大写输出 16进制数小写输出使用控制符时,要在程序的头上加头文件iomanip.h。#include#includeusing namespace std;int main()int i=100;cout
9、iendl;couthexiendl; double d=123.56;coutdendl; coutsetprecision(9)dendl;return 0;1.3.2 用const定义常变量在C语言中常用#define命令来定义符号常量,实际上,只是进行字符置换,容易误解。#includeusing namespace std;#define R 2+3int main()coutR*Rendl; /输出结果是11,并不是25return 0; /没有此句会有警告。最好加上此句下面看C+提供的const定义常变量的方法就避免这个问题。#includeusing namespace std
10、;const int R=2+3;int main()coutR*Rendl; /输出结果是25return 0; /没有此句会有警告。最好加上此句1.3.3 函数原型声明在C+中,如果函数调用的位置在函数定义之前,则要求在函数调用之前必须对所调用的函数作函数原型声明,这是强制性的。如有定义:int max(int a,int b)return a+b;声明时必须写成: int max(int a,int b);或 int max(int x,int y);或 int max(int ,int);1.3.4 函数的重载1、为什么要用重载函数在C中,在同一作用域中不能有同名的函数,每个函数必须有
11、其唯一的名字,这样有时会令人生厌。例如,求一个数的绝对值,由于要求命名唯一,所以对于不同的类型需要不同名字的函数:int abs(int);float fabs(float);long labs(long);double labs(double);极其相似操作函数我们却起三个不同的名字,这样子不是很好管理,所以C+为了方便程序员编写程序特别引入了函数重载的概念来解决此问题。C+允许在同一作用域用同一函数名定义多个函数,这些函数的参数个数和参数类型不相同,这些同名的函数用来实现不同的功能。这就是函数的重载。重载是用来描述同名函数具有相同或者相似功能,但数据类型或者是参数不同的函数管理操作的称呼。
12、同一个函数名可以用来代表不同功能的函数,也就是一名多用。这几个函数所做的事情是一样的都是求绝对值。因此,使用三个不同的函数名,看上去很笨拙,若给以同样的名字就会方便得多。这就是重载技术。这种技术在C+中早已用于基本数据类型运算,如加法只有一个名字+, 但它可以用来加整数值、浮点值和指针值。插入运算符“”既可以左移和右移也可以是输入输出运算符。例如,上述4个函数的声明可以改为:int abs(int); float abs(float);long abs(1ong);double abs(double);C+用一种函数命名技术可以准确判断出应该使用哪个abs()函数。例如:abs(-10); /
13、调用int abs(int); abs(-); /调用longabs(1ong);abs(-12.23); /调用double abs(double);2、匹配重载函数的顺序在调用一个重载函数f()时,编译器必须搞清函数名f究竟是指哪个函数。这是靠将实参类型和所有被调用的f()函数的形参类型一一比较来判定的。 按下述3个步骤的先后顺序找到并调用那个函数:(1)寻找一个严格的匹配,如果找到了,就用那个函数。(2)通过内部转换寻求一个匹配,只要找到了,就用那个函数。(3)通过用户定义的转换寻求一个匹配, 若能查出有唯一的一组转换,就用那个函数例如,重载函数print()的匹配:void print
14、(double);void print(int);void func()print(1); /匹配void print(int);print(1.0); /匹配void print(double);print(a); /匹配void print(int);print(3.1415f); /匹配void print(double);例如,对于重载函数print()声明,其下面的函数调用将引起错误:void print(1ong);void print(double);void func(int a)print(a); /error:因为有二义性3、使用说明(1)C+的函数如果在返回类型、参数类型
15、、参数个数、参数顺序上有所不同,则认为是不同的。但重载函数如果仅仅是返回类型不同,则是不够的。例如,下面的声明是错误的:void func(int);int func(int);编译器无法区分函数调用func(3)”是指上述哪一个重载函数。因此重载函数至少在参数个数、参数类型或参数顺序上有所不同。(2)typedef定义的类型只能使之相同于一个已存在的类型,而不能建立新的类型,所以不能用typedef定义的类型名来区分重载函数声明中的参数。例如,下面的代码实际上是同一个函数:typedef INT int;void func(int x)/.void func(INTx)/.) /error:
16、函数重复定义编译器不能区分这两个函数的差别,INT只不过是int的另一种称呼而已;(3)让重载执行不同的功能, 是不好的编程风格。同名函数应该具有相同的功能。如果定义一个abs()函数而返回的却是一个数的平方根, 该程序的可读性受到破坏。P13例1.7 用一个函数求2个正整数或3个正整数的最大者。#includeusing namespace std;int max(int a,int b)return ab?a:b;int max(int a,int b,int c)return (ab?a:b)c?(ab?a:b):c;int main()int a,b,c;cinabc;coutmax(
17、a,b,c) max(a,b)endl;1.3.5 函数模板函数的重载可以实现一个函数名多用,将功能相同或类似的函数用同一个函数名来定义。这样使编程者在调用同类函数时感到含义清楚,方法简单。但是在程序中仍然要分别定义每一个函数。例如:求3个数中最大的数(分别考虑整数、双精度数、浮点数的情况)#includeusing namespace std;int main()int max(int a,int b,int c); double max(double a,double b,double c);float max(float a,float b,float c);int i1,i2,i3,i
18、;i1=10;i2=23;i3=13;i=max(i1,i2,i3);couti_max iendl;double d1,d2,d3,d;d1=23,5;d2=45;d3=56.4;d=max(d1,d2,d3);coutd_max dendl;float f1,f2,f3,f; f1=34.3;f2=65.4;f3=56.4;f=max(f1,f2,f3);coutf_max fendl;int max(int a,int b,int c)if(ab)a=b;if(ac)a=c;return a;double max(double a,double b,double c)if(ab)a=b;
19、if(ac)a=c;return a;float max(float a,float b,float c)if(ab)a=b;if(ac)a=c;return a;从上面的程序中可以看出,有3个max函数的函数体是完全相同的,只是形参的类型不同,也要分别定义,能否对此进行简化呢?为了解决这个问题,C+提供了函数模板。所谓函数模板就是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的
20、功能。我们将上面的例子用函数模板来实现#includeusing namespace std;template /模板声明,其中T为类型参数,会有不同数据类型的地方, /以设定类型的变量替代。T max(T a,T b,T c) /定义一个通用函数,用T作虚拟的类型名 if(ab) a=b; if(ac) a=c; return a;int main() int i1,i2,i3,i;i1=10;i2=23;i3=13;i=max(i1,i2,i3);couti_max iendl;double d1,d2,d3,d;d1=23,5;d2=45;d3=56.4;d=max(d1,d2,d3);
21、coutd_max dendl;float f1,f2,f3,f; f1=34.3;f2=65.4;f3=56.4;f=max(f1,f2,f3);coutf_max fendl;从上例可以看出,用函数模板比函数重载更为方便,程序简洁多了。但应注意它只适用于函数体相同、函数的参数个数相同而类型不同的情况,如果参数的个数不同,则不能用函数模板。例:定义一个交换两变量值的模板函数,利用它来实现整数、浮点数、双精度数、字符串的交换。(学生练习)#include#includeusing namespace std;template /模板声明,其中T为类型参数void swap(T* a,T* b)
22、 /定义一个通用函数,用T作虚拟的类型名 T* temp; *temp=*a;*a=*b;*b=*temp;int main()int i1,i2;i1=10;i2=23;swap(i1,i2);couti1=i1 i2=i2endl;double d1,d2;d1=23,5;d2=45;swap(d1,d2);coutd1=d1 d2=d2endl;float f1,f2; f1=34.3;f2=65.4;swap(f1,f2);coutf1=f1 f2=f2endl;string s1,s2;s1=good;s2=better;swap(s1,s2);couts1=s1 s2=s2endl
23、;模板函数调用时,类型实参与类型形参的匹配要求很苛刻。下面来看一个实例。#include#includeusing namespace std;template /模板声明,其中T为类型参数void swap(T* a,T* b) /定义一个通用函数,用T作虚拟的类型名 T* temp; *temp=*a;*a=*b;*b=*temp;void f(double a,double b)return;int main()int ia=3;double db=5.0; f(ia,db); /ok ia的类型与double不同,但可以隐式转换为double,实现合法调用swap(ia,db); /e
24、rror ia与db的类型不同,不能统一到同一个类型上。 /模板类型参数没有隐式转换的说法,必须精确匹配,所以编译错误1.3.6 有默认参数的函数1、默认参数的目的C+可以给函数定义默认参数值。通常,调用函数时,要为函数的每个参数给定对应的实参。例如:void delay(int loops); /函数声明 void delay(int loops) /函数定义 if(1oops=0)return;for(int i=0;iloops,i+);/为了延时无论何时调用delay()函数,都必须给loops传一个值以确定时间。但有时需要用相同的实参反复调用delay()函数。C+可以给参数定义默认
25、值。如果将delay( )函数中的loops定义成默认值1000, 只需简单地把函数声明改为:void delay(int loops=1000);这样,无论何时调用delay()函数,都不用给loops赋值,程序会自动将它当作值1000进行处理。例如,调用:delay(2500); /loops设置为2500delay(); /ok:loops采用默认值1000调用中,若不给出参数,则按指定的默认值进行工作。允许函数默认参数值,是为了让编程简单,让编译器做更多的检查错误工作。2、默认参数的声明默认参数在函数声明中提供,当又有声明又有定义时,定义中不允许默认参数。如果函数只有定义,则默认参数才
26、可出现在函数定义中。例如:void point(int=3,int=4); /声明中给出默认值void point(intx,inty) /定义中不允许再给出默认值 cout xendl;cout yendl;3、默认参数的顺序规定如果一个函数中有多个默认参数,则形参分布中,默认参数应从右至左逐渐定义。当调用函数时,只能向左匹配参数。例如:void func(int a=1,int b,int c=3, int d=4); /errorvoid func(int a, int b=2,int c=3,int d=4); /ok void func(int a,int b,int c=3,int
27、 d=4);/ok void func(int a,int b,int c,int d=4);/ok请看下例:#include#includeusing namespace std;void f1(int a,int b=2,int c=3,int d=4);void f2(int a,int b,int c=3,int d=4);int main()f1(30);f1(30,40);f1(30,40,50);f1(30,40,50,60);f2(300,400);f2(300,400,500);f2(300,400,500,600); return 0;void f1(int a,int b
28、,int c,int d)coutsetw(5)asetw(5)bsetw(5)csetw(5)dendl;void f2(int a,int b,int c,int d)coutsetw(5)asetw(5)bsetw(5)csetw(5)dendl;运行结果如下: 30 2 3 4 30 40 3 4 30 40 50 4 30 40 50 60 300 400 3 4 300 400 500 4 300 400 500 6004、默认参数与函数重载默认参数可将一系列简单的重载函数合成为一个。例如, 下面3个重载函数:void point(int,int)/.void point(int
29、a)return point(a,4);void point()return point(3,4);可以用下面的默认参数的函数来替代:void point(int=3,int=4);当调用“point();”时,即调用“point(3,4);” 它是第3个声明的重载函数。当调用“point(6);”时,即调用“point(6,4);”,它是第2个声明的重载函数。当调用“point(7,8);”时,即调用第1个声明的重载函数如果一组重载函数(可能带有默认参数)都允许相同实参个数的调用,将会引起调用的二义性。例如:void func(int); /重载函数之一void func(int,int=4
30、); /重载函数之二,带有默认参数void func(int=3,int=4); /重载函数之三,带有默认参数func(7); /error: 到底调用3个重载函数中的哪个?func(20,30) /error:到底调用后面2个重载函数的哪个?学生练习:将P13例1.7不用重载,改用带有默认参数的函数。#includeusing namespace std;int max(int a,int b,int c=0)return (ab?a:b)c?(ab?a:b):c;int main()int a,b,c;cinabc;coutmax(a,b,c) max(a,b)endl;1.3.7 变量的
31、引用引用是C+引入的新语言特性,是C+常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。许多人使用它仅仅是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有搞清本源。一、引用的概念引用是个别名,就是某一个变量或对象(目标)的别名。从那时起,引用作为目标的别名而使用。对引用的改动实际就是对目标的改动,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名;如:int a; int &ra=a; /定义引用ra,它是变量a的引用,即别名。说明:(1)&在此不是求地址运算,而是起标识作用。在看到&ra形式时,当&ra前有类型符时(如int
32、&ra),它就是对引用的声明;如果前面没有类型符(如p=&ra),则&是取地址运算符。(2)类型标识符是指目标变量的类型。(3)声明引用时,必须同时对其进行初始化。(4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。ra=1; 等价于 a=1; (5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。(6)不能对void进行引用。(7)不能建立数组的引用。因为数组是一个由若
33、干个元素所组成的集合,所以无法建立一个数组的别名。(8)由于指针也是变量,所以可以有指针变量的引用。引用本身不是一种数据类型,所以没有引用的引用,也没有引用的指针。二、引用的简单使用通过下面的例子来了解引用的简单使用。/自编例,阅读程序#include void main()int intOne;int& rInt=intOne;intOne=5;cout intOne: intOne endl;cout rInt: rInt endl;rInt=7;cout intOne: intOne endl;cout rInt: rInt endl;cout &intOne: &intOne endl
34、;cout &rInt: &rInt endl;运行结果为:intOne:5rInt:5intOne:7rInt:7&intOne:0x0012FF7C&rInt:0x0012FF7C三、引用作为函数参数引用的一个重要作用就是作为函数的参数。以前的C语言中函数参数传递是值传递,如果有大块数据作为参数传递的时候,采用的方案往往是指针,因为这样可以避免将整块数据全部压栈,可以提高程序的效率。但是现在(C+中)又增加了一种同样有效率的选择(在某些特殊情况下又是必须的选择),就是引用。例 :实现两个变量值的交换首先来看一下利用指针传递方式来实现/例1.11 使用指针变量作形参,实现两个变量的互换#in
35、cludevoid swap(int *p1, int *p2) /此处函数的形参p1, p2都是指针 int p; p=*p1; *p1=*p2; *p2=p; /此处需要用*p1、*p2,容易出错,难于阅读 void main( )int a,b;cinab; /输入a,b两变量的值swap(&a,&b); /变量a和b的地址作为实参调用swap函数 couta b; /输出结果 传递指针给用户增加了编程和理解的负担,下面我们用引用来实现。/例1.12 使用引用作形参,实现两个变量的互换#includevoid swap(int &p1, int &p2) /此处函数的形参p1, p2都是
36、引用 int p; p=p1; p1=p2; p2=p; /这里直接用p1、p2 /*为了在程序中调用该函数,则相应的主调函数的调用点处,直接以变量作为实参进行调用即可而不需要实参变量有任何的特殊要求。如:对应上面定义的swap函数,相应的主调函数可写为:*/void main( )int a,b;cinab; /输入a,b两变量的值swap(a,b); /直接以变量a和b作为实参调用swap函数 couta b; /输出结果 上述程序运行时,如果输入数据10 20并回车后,则输出结果为20 10。由上例可看出:(1)传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函
37、数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本。因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。(3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用*指针变量名的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址
38、作为实参。而引用更容易使用,更清晰。如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。四、返回多个值(增加内容) 函数只能返回一个值。如果程序需要从函数返回两个值怎么办?解决这一问题的办法之一是用引用给函数传递两个参数,然后由函数往目标中填入正确的值。因为用引用传递允许函数改变原来的目标,这一方法实际上让函数返回两个信息。引用和指针都可以用来实现这一过程。/自编例:用指针来实现的返回多个值#include void f(int,int *,int *);void main()int x1,x2,x3;x1=20;f(x1,&x2,&x3);coutx1x
39、2x3endl;void f(int n,int *n2,int *n3)*n2=n+10;*n3=n-10;下面是用引来实现的,显然简单得多。/自编例:用引用实现返回多个值#include void f(int,int &,int &);void main()int x1,x2,x3;x1=20;f(x1,x2,x3);coutx1x2x3endl;void f(int n,int &n2,int &n3)n2=n+10;n3=n-10;五、常引用常引用声明方式:const 类型标识符 &引用名=目标变量名;用这种方式声明的引用,不能通过引用对目标变量的值进行修改,从而使引用的目标成为con
40、st,达到了引用的安全性。如:int a ;const int &ra=a;ra=1; /错误,不允许改变引用的值a=1; /正确 ,可以改变引用所代表的变量的值。可以用常量或表达式对引用进行初始化,但此时必须用const作声明。如:int i=5; const &a=i+3;1.3.8 内置函数或内联函数或内嵌函数(inline)在C+中,为了解决一些频繁调用的小函数大量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内置函数。 下面我们来看一个例子:#include #include using namespace std; inline string dbtest(
41、int a); /函数原形声明为inline即:内置函数 void main() for(int i=1;i=10;i+)couti:dbtest(i)0)?奇:偶;上面的例子就是标准的内置函数的用法,使用inline修饰带来的好处我们表面看不出来,其实在内部的工作就是在每个for循环的内部所有调用dbtest(i)的地方都换成了(i%20)?奇:偶这样就避免了频繁调用函数对栈内存重复开辟所带来的消耗。 说到这里很多人可能会问,既然inline这么好,还不如把所有的函数都声明成inline,嗯,这个问题是要注意的,inline的使用是有所限制的,inline只适合函数体内代码简单(一般为5语句
42、以下)的函数使用,不能包含复杂的结构控制语句例如while switch,并且内置函数本身不能是直接递归函数(自己内部还调用自己的函数)。 1.3.9 作用域运算符 每一个变量都有其有效的作用域,只能在变量的作用域内作用该变量,不能直接使用其它作用域中的变量。/例1.16 局部变量和全局变量同名#includeusing namespace std;int a=2;int main()int a=5;couta:aendl; /:a指的是全局变量a,不能用:来访问函数的局部变量return 0; /没有此句会有警告。最好加上此句1.3.10 字符串变量与布尔变量一、布尔类型(bool)(增加)布尔类型可以被赋予文字值true或者false,所对应的关系就是真与假的概念。我们通常使用的方法是利用它来判断条件的真与假,例如下面的代码:/自编例#includeusing namespace st
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026 年中职精细化工技术(精细化学品分析)试题及答案
- 办公环境装修合同协议2025年
- 外星生命探测
- 2025年河北省公需课学习-城市体检评估制度
- 冰箱的课件教学课件
- 2025年预防艾滋病知识竞赛试题及答案(合集)
- 江苏教编学科真题及答案
- 第七单元 微专题 图形的折叠
- 海陆水循环考试题及答案
- 福清城投笔试真题及答案
- 杜国楹小罐茶的创业讲稿
- 2025-2026学年统编版九年级历史上册(全册)知识点梳理归纳
- 沪教版(新版)一年级下学期数学第4单元100以内的加减法单元试卷(附答案)
- 放射科CT检查注意事项
- 物流运输服务方案投标文件(技术方案)
- 产业园招商培训
- 2026年齐齐哈尔高等师范专科学校单招综合素质考试题库必考题
- 2018版公路工程质量检验评定标准分项工程质量检验评定表路基土石方工程
- 导尿管相关尿路感染(CAUTI)防控最佳护理实践专家共识解读
- 2025年广东深圳高中中考自主招生数学试卷试题(含答案详解)
- SMETA员工公平职业发展管理程序-SEDEX验厂专用文件(可编辑)
评论
0/150
提交评论