版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 函数定义 函数参数和函数值 函数调用 变量作用范围 变量生存周期第八章 函 数第1页8.1 概述第2页C 程序结构C 程序 (project 项目或工程)源程序文件1源程序文件2源程序文件n预处理命令全局变量申明函数n申明函数1申明函数2申明函数首部函数体局部变量申明执行语句第3页为什么要编写函数?使用函数可以把常用具有一定功能代码段组织为一个紧凑可重复使用单元。这一方面符合结构化程序设计要求,其次可以大大降低重复输入程序代码工作量,同时更增加了程序可读性,极大方便了程序调试和维护。函数基本概念重点掌握内容: 函数定义:函数首部,函数体 函数参数:形参和实参 函数返回值 函数调用函数就是一个
2、能完成一定功效被单独封装代码模块。最终目:依据需要编写函数,并利用函数来实现整个程序。第4页#include “stdio.h”void OutputMessage( ) printf(“Welcome to use my program! n”); int MaxInt(int x, int y) if(x y) return(x); else return(y); void OutputResult(int num) printf(“The max is %dn”, num); void main() int a = 10, b = 20, max = 0; OutputMessage()
3、; max = MaxInt(a, b); OutputResult(max);使用函数例子依次调用三个函数完成了“输出欢迎信息”、“计算两个整数最大值”、“输出结果”工作。第5页系统库函数由系统提供,不需要用户编写能够直接使用函数。不一样C 编译系统提供库函数数量和功效是不一样,但有一些基本函数是共同,如printf、scanf等。函数分类从函数起源看,函数分为以下两类:用户自定义函数只使用系统库函数无法完成需要功效,由用户自己编写函数。用户自定义函数依据结构化程序设计要求,对实际问题进行模块分解后而产生,往往是在调用若干系统库函数基础上实现。void OutputResult(int nu
4、m) printf(“The max is %dn”, num); 第6页无参函数无需依据任何其它外部输入信息,完成预先设计固定功效函数。函数分类从函数参数个数来看,函数分为以下两类:有参函数必须依据其它外部输入信息,才能完成预先设计一定功效函数。void OutputMessage( ) printf(“Welcome to use my program! n ”); void OutputResult(int num) printf(“The max is %dn”, num); 第7页无返回值函数调用该函数,完成预先设计功效后,并不返回任何值函数。通常,无参函数都不返回值。函数分类从函数
5、返回值个数来看,函数分为以下两类:有返回值函数调用该函数,完成预先设计功效后,有返回值函数。 void OutputMessage() printf(“Welcome to use my program! n”); int MaxInt(int x, int y) if(x y) return(x); else return(y); 第8页8.2 函数定义普通形式第9页函数定义方法类型标志符 函数名(形参列表) 参数定义 语句组类型标志符:表明函数返回值类型。假如省略,系统则认为是int型。函数名:命名规则同变量名。用于调用该函数。形参列表:定义要传值局部变量,保留调用该函数时输入信息。形参多
6、于一个时,用逗号分隔。没有形参时,括号不能省略。形参列表方式以下:类型标志符 参数名1,类型标志符 参数名2,函数体:该函数功效详细实现过程。通常包含若干变量定义和若干语句。函数体由一对大括号和其中包含语句组组成。参数定义指不传值局部变量定义,大括号内可为空由类型标识符、函数名和形参列表组成部分称为函数首部。第10页函数定义:例int MaxInt(int x, int y) int z; z = x y ? x : y; return(z);类型标志符:此处为int,表明该函数返回值类型是int型。函数名:为MaxInt。以后就使用这个名字调用该函数。形参列表:有2个形参,分别是int型变量
7、x和int型变量y。它们用于保留调用该函数时传递进来输入信息。函数体:实现该函数功效。对由调用者传递进来保留在形参中数据进行相关处理后,将结果经过return语句返回给调用者。第11页函数定义:例/*/* Name: Power */* Function: calculate xy */* Parameter: two integer (x & y ) */* Return value: x to the power of y */*/float Power(int x, int y) int n; float p = 1; for(n = 1; n = y; n +) p = p * x;
8、return(p);第12页8.3 函数参数和函数值第13页函数参数作用用于在调用某个函数时由调用者向该被调用函数传递信息。函数参数对函数深入了解能够把一个函数了解为一个“黑箱”,使用者使用该“黑箱”时,提供了加工信息输入到“黑箱”中,该“黑箱”按照预先设计功效对接收到这些符合预定要求输入信息进行加工,然后返回输出信息给使用者。 函数输入信息输出信息 可见,要想形成一个函数,必须要设计好它能够接收什么样输入信息,又输出什么样信息,即必须设计好函数接口。 第14页定义函数时出现在函数名后括号中参数即是形式参数。之所以称为形式参数,是因为在定义函数时这些参数并不含有详细值,而只是代表某个数据类型一
9、个变量。函数形式参数函数形参作用形参就是函数输入接口:使用者在调用该函数时提供输入信息被传递给对应形式参数,然后函数按照预先设计程序对形参进行处理,实际上就是对传递进来数据进行处理。 编写一个函数时很主要一个工作就是要确定形参(数量、类型、意义、作用)。第15页调用函数时出现在函数名后括号中参数即是实际参数。之所以称为实际参数,是因为在调用函数时这些参数必须含有实际值,才能用于去调用函数。实参能够使常量、变量或表示式。函数实际参数调用函数时给出实参必须和形参一致实参必须和形参在数量、次序、类型上一致才能正确调用。第16页int func(int x, int y, char op) int z
10、; switch(op) case + : z = x + y; break; case - : z = x - y; break; case * : z = x * y; break; case / : z = x / y; break; return(z);函数参数:例result = func(3, 5, *);定义函数时参数是形式参数。调用函数时参数是实际参数。第17页调用函数时,参数传递过程是由实参变量 “单向值传递”给对应形参变量。函数参数传递过程参数传递过程是“单向”:即只由实参传递给形参,而不会在函数调用结束时由形参传回给实参。所谓“单向值传递”包含两方面含义:参数传递过程中传
11、递是“值”:即只由实参将其值传递给对应形参。第18页int func(int x, int y, char op) 函数参数传递过程int a = 3, b = 5, result;charc=*;result = func(a, b, c);单向值传递在内存中,实参单元和形参单元是不一样单元。在调用某函数之前,该函数形参并不存在,即不占据内存单元。只有当调用该函数时,系统才给形参分配内存单元,并将实参值传递给对应形参。调用结束后,形参所占单元被释放,而实参单元仍存在并维持原来值第19页函数参数传递过程35*35*调用函数之前:调用函数开始:调用函数结束:35*cbacbaopyx第20页函数
12、返回值是指经过调用函数得到一个值。注意:并不是全部函数都返回值。函数返回值函数返回值是经过函数中return语句取得。return语句只能位于函数体内,它使函数调用结束并把被调用函数内一个确定值作为函数值带回给主调函数。 函数输入信息输出信息 return使用方法:return(表示式);return语句执行过程:首先求解括号内表示式,然后使对该函数该次调用结束,同时将表示式值返回给调用者。编写一个函数时另一个主要工作就是要确定怎样返回值及返回什么值。第21页int func(int x, int y, char op) int z; switch(op) case + : z = x + y
13、; break; case - : z = x - y; break; case * : z = x * y; break; case / : z = x / y; break; return(z);函数返回值:例result = func(3, 5, *);return返回变量z值,则调用该函数得到值就是变量z值。调用该得到值被赋值给变量result。第22页相关函数返回值说明:函数返回值说明标准就是:定义一个函数时必须要明确它返回值类型。一个函数用return语句只能返回一个值。return 语句是一个显式返回值方法。一个函数中可能有多个return语句,但只可能有一个被执行到。返回值类型
14、由函数定义时类型决定。函数中能够没有return语句,则函数执行完最终一个语 句结束,不以显著形式带回值。这时必须把函数定义为void类型,表示该函数不会显式返回任何值。5。函数定义时无返回值类型,默认返回值类型是 int 必须有return语句带一个整数第23页函数例子1/*/* Name: IsDaffodilNumber */* Function: judge a daffodil number */* Parameter: one integer */* Return value: 1 yes; 0 No */*/int IsDaffodilNumber(int num) int a,
15、 b, c; a = num / 100;/* 百位 */ b = num % 100 / 10;/* 十位 */ c = num % 10;/* 个位 */ if (num=a*a*a + b*b*b + c*c*c) return(1); else return(0);第24页函数例子2/*/* Name: IsPrimeNumber */* Function: judge a prime number */* Parameter: one integer */* Return value: 1 yes; 0 No */*/IsPrimeNumber(int num) int n, bFl
16、ag = 1; for(n = 2; n = num 1; n +) if(num % n = 0 ) bFlag = 0; break; return(bFlag);第25页函数例子3/*/* Name: PrintFibonacciSerial */* Function: print Fibonacci number */* Parameter: print numbers count */* Return value: None */*/void PrintFibonacciSerial(int n) int i, f1 = 1, f2 = 1, f3; printf(“%8d%8d”,
17、 f1, f2); for(i = 2; i = pow_yx) return(pow_xy); else return(pow_yx);嵌套调用自定义函数Powermain().PowerMax(3,4);.主调函数局部变量与被调函数局部变量同名,是允许,因为它们是在不一样函数中定义.进入被调函数主调函数同名变量被屏蔽,调用返回,主调函数同名变量恢复作用第36页8.6 函数递归调用第37页 假如被嵌套调用函数是该函数本身,就叫做递归调用。C语言允许函数递归调用。函数递归调用 注意:使用递归调用方法,要确保是有限次,有终止递归调用。即当满足某个条件时,不再继续递归调用。函数1函数1调用函数1调
18、用函数1函数1第38页例:阶乘用递归函数实现N! =N*(N-1)! 以函数p(n)返回值表示n阶乘 int p(int n)return(n*p(n-1);然而,函数p是不会返回。 在函数体中调用本函数,层层调用,永远不会停顿函数体中必须设置不再调用条件。1!=1 求p(1) 不再调用函数p就可得到 1!int p(int n)if(n1)return(n*p(n-1);else return(1);void main() int x;x=p(4);p(4)p(3)p(2)p(1)4*3*2*126124x=nnnn每层调用,都产生局部变量n,保留传入值(4,3,2,1),用它和下一层调用返
19、回值相乘,得到本层调用传入值阶乘(4!,3!,2!,1!)局部变量产生函数被调用毁灭调用返回无效调用其它函数有效回到本函数第39页例:利用递归方法求 Fibonacci 数列第n项值 f(1) = 1, f (2) = 1 ; f(n) = f(n-1) + f(n-2) n=3函数递归调用:例 题目分析:因为Fibonacci 数列是一个由递推公式产生,所以有下面事实成立:f(n) = f(n-1) + f(n-2) , 即是说只要求出f(n-1)和f(n-2),就能够求出f(n)。而 f(n-1)=f(n-2)+f(n-3),f(n-2)=f(n-3)+f(n-4),f(n-3)=f(n-
20、4)+f(n-5), ,依这类推。此处f(n), f(n-1), f(n-2), f(n-3), f(n-4)实际上都是调用同一个函数,只是调用时实参不一样而已。当调用到f(1)或f(2)时,函数就能够返回了。第40页函数递归调用:例83/* 使用递归法求 Fibonacci 数列第n项 */long int Fibo(int n) long int fn ; if ( n = 1 | n = 2 ) fn = 1 ; else fn = Fibo(n-1) + Fibo(n-2); return (fn);递归调用每次调用返回值递归调用停顿第41页函数递归调用:例#include long
21、int Fibo(int n); /* 函数原型申明 */void main( ) long int f; int i = 4; f = Fibo(i); printf(“f = %ldn”, f);long int Fibo(int n)。调用该函数求出数列第4项:第42页Fibo(4)Fibo(3)Fibo(2)Fibo(2)Fibo(1)11215long int Fibo(int n) long int fn ; if ( n = 1 | n = 2 ) fn = 1 ; else fn = Fibo(n-1) + Fibo(n-2); return (fn);递归调用过程递归函数返回
22、,是有条件,除非层层调用,调到某层返回条件成立,才会从这一层:调用最终层,返回;一旦最终层返回,前面各层依从后到前次序返回,返回是传递故称递归,回溯第43页传值调用和传名调用C语言中,只有传值调用,没有传名调用。 不能把变量名传给函数让它修改传入变量名变量值。 在实参数表中不论用数值还是用变量名表示实际参数,传递给被 调函数都是数值。怎样才能够在函数中修改函数外变量值呢?针对C只能传值不能传名特点,在形参表中定义接收地址值变量(指针变量),在实参数表中传递希望在函数中改变值变量地址值。在函数中经过变量地址值对变量间接访问,改变变量值。函数返回,外部变量值也改变了。这就是函数返回值另一个方法:隐
23、式返回值。在形参表中定义了多少指针变量,就能够隐式返回多少值。这是显式返回一个值望尘莫及。第44页8.7 数组作为函数参数一、 数组元素作为实参因为数组元素即相当于一个与数组同类型普通变量,所以能够作为实参使用。但它不能单独申明,所以不能作为形参使用。void main( ) int i , f10=1,2,3,4,5,6,7,8,9;for ( i = 0 ; i 10 ; i + ) if ( IsPrime ( fi ) = 1 ) printf( “%d is a prime numbern” , fi);例 判断数组元素是否素数int IsPrime( int num ) int i
24、 ; for ( i = 2 ; i num ; i + ) if ( num % i = 0 ) return( 0 ) ; return ( 1 ) ;第45页二、 数组名作为函数形参和实参在函数定义中能够用数组名作形参,它表示一个能够接收传入数组首地址变量,与定义数组数组名表示一个地址常量不一样,它表示是地址变量,形参数组名不分配数组存储单元,在形参表中,数组是被申明而不是被定义.不论有没有元素个数指示,都还必须定义一个整型形参,用以接收传入数组首地址表示数组元素个数.函数调用时对应实参是数组名,它表示在主调函数中定义数组首地址,一个地址常量。函数调用就是把这个地址值传给被调函数地址变量
25、。使得形参数组名就是实参是数组名,对形参数组操作就是实参数组操作 .第46页假如在函数里改变了形参数组元素值,实际上就是改变了对应实参数组元素值。返回主调函数后,就就能够访问到被改变后数组元素。从这个角度讲,利用数组名 作为函数实参和形参,能够使函数调用有多个返回值。例83:编写Strcopy( ) 函数,将字符串2中前n个字符拷贝到字符串1中当发生函数调用时,实参数组名将其值(实际上是实参数组首地址)传递给形参数组名,也就是说,形参数组首地址和实参数组首地址是相同,即形参数组和实参数组占据同一内存空间。第47页#include void Strcopy( char str1 , char s
26、tr2 , int n ) int i = 0; while ( i n & str2i ! = 0 ) str1i = str2i+ ; str1i = 0 ;void main( ) char string180 = “” , string2 = “Hello, World” ; Strcopy( string1 , string2 , 5 ) ; printf(“string1= %sn string2= %sn”, string1,string2 ) ; Strcopy( string1 , string2 + 6, 5 ) ; printf(“string1= %sn string2
27、= %sn”, string1,string2 ) ; 第48页8.8 局部变量和全局变量第49页 局部和全局是从变量作用范围(空间上)划分。局部变量 局部变量在一个函数内定义变量叫做局部变量。局部变量只在定义它函数范围内有效,即程序只有在执行该函数时才能访问这些变量,在执行其它函数时不能访问。#include “stdio.h”void main( ) long int f; int n = 5; f = Fibo(n); printf(“f = %ldn”, f);n是main函数中局部变量f也是main函数中局部变量第50页局部变量相关说明1.主函数之中定义变量一样属于局部变量。其它函数
28、不能访问主函数中局部变量,主函数也不能访问其它函数中局部变量。说明:2.不一样函数中能够定义相同名字变量。因为它们是各自函数内部局部变量,所以互不影响。3.形参变量也是局部变量。4.在函数内部,还能够在复合语句(花括号括起一组语句)内定义变量,这些变量只在该复合语句内起作用。第51页全局变量 全局变量一个源程序文件中,在全部函数外定义变量叫做全局变量。全局变量作用范围从定义位置开始到该源程序文件结束。也就是说,在这个范围内,全部函数都能够访问它(当然就能够改变它值)。 全局变量作用:因为在全局变量作用范围内,全部函数都能够访问它,所以利用全局变量就能够在函数之间增加传递信息通道。包含调用函数时
29、传递信息进去,以及函数返回后得到多个返回值。第52页全局变量:例84#include /* 例84 */long int pow1 , pow2 ; /* 定义全局变量 */void Power(int x , int y ) ; /* 函数原型申明 */void main( ) int a = 2, b = 5; pow1 = 1; pow2 = 1; Power(a, b); printf(“pow1 = %ldn”, pow1); printf(“pow2 = %ldn”, pow2); void Power(int x , int y) int n ; for (n = 1; n =
30、y; n +) pow1 = pow1 * x; for (n = 1; n = x; n +) pow2 = pow2 * y;在main函数中改变全局变量值在main函数中访问全局变量在Power函数中改变全局变量值第53页全局变量相关说明说明:1.只在必要时候使用全局变量。原因:占用内存;降低可移植性;降低可阅读性;程序犯错可能性增加(因为每个函数都可能改变全局变量值)进行任务模块划分以及实现函数时,应把函数做成一个含有良好“接口”封闭体,即只能经过实参 形参这个渠道传递信息给函数,函数实现只和它形参相关系。这么程序可移植性好,可读性强。2.同一个源程序文件中,假如有局部变量和全局变量同
31、名,则在该局部变量作用范围内,全局变量被“屏蔽”,即不起作用。第54页8.9 变量存放类别第55页变量存放类别四种存放类别:auto(自动)、static(静态)、 register(存放器)、extern(外部)变量存放类别是从变量生存周期(存在时间上)划分:动态和静态存放方式。 动态存放方式:在程序运行期间依据需要进行动态分配内存空间,即需要时分配内存单元(变量生存周期开始),用完后释放内存单元(变量生存周期结束时)。分自动和人工两种。 函数中定义变量,函数调用时自动产生,函数结束时自动释放,称为自动变量。本节介绍是这一个。 另一个要在函数中用malloc函数或者new运算符(C+)人工产
32、生和用free函数或者delete运算符人工释放,称为人工动态变量。 静态存放方式:在程序运行期间分配固定内存空间。即一旦分配了内存空间就不释放,直到程序运行结束。第56页局部变量存放类别局部变量按存放类别分为:局部自动(动态)变量和局部静态变量。 “局部”:是从变量作用范围来说,即只有在该函数内部执行时才能访问。 “动态静态”:是从变量生存时间来说,即什么时候给变量分配内存单元以及分配后是否收回。第57页自动变量自动变量(局部动态变量):定义关键字 auto 默认为不写函数中局部变量(包含形参变量),假如没有尤其申明为static型变量,都是自动变量。auto型变量只在调用函数时才由系统分配
33、内存单元(出生),函数调用返回后内存单元被系统收回(死亡)。 long int Power(int x, int y) auto int n ; auto long pow = 1 ; Power函数中变量x, y, n, pow都是局部动态变量注:关键字auto能够省略第58页局部静态变量 局部静态变量:定义关键字 static用static关键字对函数中局部变量进行定义,则使其成为局部静态变量。static型局部变量一旦被分配了内存单元(出生)就不释放,直到整个程序结束才释放,所以它保留值一直存在。 long int Power(int x, int y) static int n ; l
34、ong int pow = 1 ; Power函数中变量x, y, pow都是局部动态变量而变量n却是局部静态变量第59页局部静态变量特点特点: 局部:只能在该函数内部访问,即只能在调用该函数时访问 静态:分配内存单元后不释放直到程序结束,所以某一次函数调用返回后该变量值依然存在,不会丢失。下一次调用该函数,再访问该静态变量得到是上次函数调用结束时值。 对局部静态变量初始化,是在编译时完成,即只赋初始值一次。以后每次调用函数时不再重新赋初值,保留上次调用结束时值。自动变量初始化是在程序运行中完成,每次调用函数都要重新赋初值,不可能保留上次值 static int a=1;不等价于 static
35、 int a;a=1f() static int a=1;a+;第1次调用f(),结束时f中a是2,结束后a无定义,第2次调用f(),static int a=1;这一行相当于不做,a是2,结束时是3第60页局部静态变量:例85#include int Fac(int n) / 函数定义 static int f = 1; f = f*n; return(f); void main( ) int i ; for (i = 1; i y ? x : y);static int C = 21, D = 12;#include “stdio.h”extern C, D; /* 全局变量申明 */ /
36、* file2.c */extern int Max(int, int); /* 外部函数申明 */void main( ) extern A, B; /* 全局变量申明 */ printf(“%d”, Max(A, B); printf(“%d”, Max(C, D);int A = 13, B = -8;用static定义全局变量:例此处访问C和D就犯错了。因为C和D定义为内部。第64页用extern申明全局变量用 extern 申明全局变量:扩展其作用域 在同一个源程序文件内申明全局变量,可扩展其在该文件内作用域 即:某函数假如想访问在它后面定义全局变量,就必须在该函数内对这些全局变量进
37、行申明。申明方法: extern 变量类型符 全局变量名列表 ;/(出现在函数内部) 假如变量类型是整型,变量类型符 能够不要: extern 全局变量名列表;申明全局变量格式: extern 变量类型 全局变量名列表;不是用来定义extern全局变量,而是用于申明extern全局变量申明全局变量不一样于定义变量,能够屡次出现;在函数内,外出现。表示要使用在某个地方定义全局变量。第65页用extern申明全局变量:例#include “stdio.h”int Max(int x, int y) int z; z = x y ? x : y; return(z);void main( ) ext
38、ern A, B; /* 全局变量申明 */ printf(“%d”, Max(A , B);int A = 13, B = -8; /* 全局变量定义 */经过申明,在函数main中就能够访问在它后面定义全局变量。第66页用extern申明全局变量用 extern 申明全局变量:扩展其作用域 在同属一个工程中其它源程序文件中申明全局变量,可把全局变量作用范围由定义它源程序文件扩展到其它对它进行了申明源程序文件中。即:某个源程序文件内函数假如想访问在其它源程序文件中定义全局变量,就必须在这个源程序文件中对欲访问全局变量进行申明。申明方法:extern 变量类型符 全局变量名列表 ;/(出现在函
39、数外部)假如变量类型是整型,变量类型符 能够不要: extern 全局变量名列表;第67页C 程序结构C 程序 (project 项目或工程)源程序文件1源程序文件2源程序文件n预处理命令全局变量申明函数n函数1函数首部函数体局部变量申明执行语句第68页用extern申明全局变量:例int Max(int x, int y) /* file1.c */ return(x y ? x : y);int C = 21, D = 12;#include “stdio.h”extern int C, D; /*外部全局变量申明 */ /* file2.c */extern int Max(int, int); /* 外部函数申明 */void main( ) extern A, B; /*外部全局变量申明 */ printf(“%d”, Max(A, B); printf(“%d”, Max(C, D);int A = 13, B = -8;此处能
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教 八年级 语文 下册 第5单元《17.壶口瀑布 第1课时》课件
- 2025 网络基础中农业网络的精准农业与物联网应用课件
- 2026年矿山介绍合同(1篇)
- 广播通信铁塔生产项目可行性研究报告
- 刑法条文的理解和适用技巧
- 2026年及未来5年市场数据中国竹制一次性筷子行业市场深度研究及投资潜力预测报告
- 2025 高中信息技术数据与计算之计算思维在森林火灾数据监测分析中的应用课件
- 2025 高中信息技术数据与计算之算法的猴群优化算法课件
- 2026年及未来5年市场数据中国市政园林景观设计行业发展监测及投资前景展望报告
- 智能灌溉控制系统:原理、技术与应用实践
- 2026山东出版集团有限公司山东出版传媒股份有限公司招聘193人备考题库及答案详解(基础+提升)
- 职业危害事故处置及报告全流程培训
- 2026年无锡工艺职业技术学院单招职业技能考试题库有答案详解
- 物业服务标准与质量管理手册(标准版)
- 2025年监理工程师《案例分析(交通运输工程)》真题及答案
- 2026年全国高考体育单招考试模拟语文试题试题(含答案)
- GB/T 13462-2008电力变压器经济运行
- GB 7912-2010食品安全国家标准食品添加剂栀子黄
- 品质工程监理实施方案
- 2023年汉字听写大赛题库全部词语拼音解释
- GA/T 882-2014讯问同步录音录像系统技术要求
评论
0/150
提交评论