免费预览已结束,剩余58页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章函数 本章学习要点 掌握函数的定义方法 掌握函数的类型和返回值 掌握形式参数与实际参数 参数传递 掌握函数的正确调用 了解函数的递归调用 掌握局部变量和全局变量 变量的存储类型 作用域和生存期 8 1概述函数 英文名为Function 直译为 功能 函数 的意思 在C语言里 函数指的是实现一个特定功能的程序模块 它相当于其他语言中的子程序 一个C语言程序可由一个主函数和若干个函数构成 其中主函数是不可缺省的 每个C程序由主函数调用其他函数 其他函数也可以相互调用 在程序设计中 常将一些常用的功能模块编写成函数 放在函数库中供公共选用 main 函数a 函数e 函数f 函数g 函数b 函数h 函数I 函数J 函数c 函数K 函数L 函数M main printstar print message printstar printstar printf n print message printf Howdoyoudo n 说明 1 源程序文件可由一个或多个函数组成 其中主函数是不可缺省的 源程序文件是编译单位 函数不是编译单位 2 一个C程序由一个或多个源程序文件组成 较大的C程序 常将一些函数和其他内容分别放在若干源文件中 再由若干源文件组成一个C程序 最简单的情况 一个C程序由一个源程序组成 这个源程序中只包含了一个函数 主函数 3 C程序的执行从main函数开始 在main函数中结束 4 所有函数在定义时是相互独立的 函数之间可以相互引用但不能嵌套定义 函数的分类 1 从用户使用的角度函数可分为 标准函数 即库函数 由系统提供 用户不必定义 直接使用 用户自定义函数 由用户根据需要 自行编写 以解决专门需要 2 从函数的形式分 函数可分为 无参数函数 在调用无参函数时 主函数并不将数据传送给被调用函数 一般用来执行指定的一组操作 无参函数可以带回也可以不带回函数值 一般以后者居多 有参函数 在调用函数时 在主函数和被调用函数之间有数据传递 8 2函数定义的一般形式 1 无参函数的定义形式类型标识符函数名 声明部分语句 其中 用 类型标识符 指定函数值的类型 即函数带回来的类型 无参函数一般不需要带回函数值 因此可以不写类型标识符 2 有参函数定义的一般形式类型标识符函数名 形式参数表列 声明部分语句 例如 intmax intx inty intz z x y x y return z 3 可以有 空函数 形式为 类型说明符函数名 例如 dummy 调用此函数时 什么工作也不做 没有任何实际作用 此中空函数的使用一般用于程序设计的模块设计阶段 4 对形参的声明方式C语言传统声明方式为 对形参类型的声明放在函数定义的第2行 在函数括号外单独指定 传统声明方式 intmax x y intx y intz z x y x y return z 现代声明方式 intmax intx inty intz z x y x y return z 8 3函数参数和函数的值 8 3 1形式参数和实际参数1 形式参数 形参 函数定义时设定的参数 下例中 函数头intmax intx inty 中x y就是形参 它们的类型都是整型 2 实际参数 实参 调用函数时所使用的实际的参数 下例中 主函数中调用max函数的语句是 nmax max a b 其中a b就是实参 它们的类型都是整型 例8 2调用函数时的数据传递main inta b c scanf d d 运行情况如下 7 8Maxis8 实参a b 形参x y 关于形参和实参的说明 1 只用在发生函数调用时 形参才被分配内存单元 在调用结束后 形参所占的内存单元也被释放 2 实参可以是常量 变量或表达式 如 max 3 a b 但要求它们有确定的值 在调用时将实参的值赋给形参 3 在被定义的函数中 必须指定形参的类型 4 实参和形参的类型应相同或赋值兼容 否则会出错 5 C语言规定 实参对形参变量的数据传递是 值传递 即单向传递 只能由实参传给形参 而不能由形参传回来 8 3 2函数的返回值通常 希望通过函数调用使主调函数得到一个确定的值 这就是函数的返回值 例如例8 2 说明 1 函数的返回值是通过函数中的return语句获得的 2 一个函数中可以有一个以上的return语句 3 return语句后的括弧可以不要 例如 returnz 和return z 是等效的 4 函数返回值的类型应当在定义函数值时指定 在定义函数时对函数值说明的类型一般应该和return语句中的表达式类型一致 如果不一致 则以函数类型为准 5 如果被调用函数中没有return语句 并不带回一个确定的 用户所希望的值 带回的是一个不确定的值 C语言允许用户把该值赋给变量 6 为了明确表示 不带回值 可以用 void 定义无类型 例如 例8 1中的定义可以改为 voidprintstar voidprint message 这样 系统就保证不使函数带回任何值 即禁止在调用函数中使用被调用函数的返回值 例如 a printfstar b print message 是不合法的 8 4函数的调用 8 4 1函数调用的一般形式函数调用的一般形式为 函数名 实参表列 说明 1 如果是调用无参函数 则 实参表列 可以没有 但括弧不能省略 2 如果实参表列多个实参 则各参数间用逗号隔开 实参与形参的个数应相等 类型应一致 在TurboC中 对实参求值的顺序是按自右至左顺序求值的 8 4 2函数调用的方式按函数在程序中出现的位置来分 可以有以下三种函数调用方式 1 函数语句把函数调用作为一个语句 如例8 1中的printstar 这种不要求函数带回值 只要求函数完成一定的操作 2 函数表达式函数出现在一个表达式中 这种表达式称为函数表达式 这是要求函数带回一个确定的值参加表达式的运算 例如 c 2 max a b 3 函数参数函数调用作为一个函数的实参 这种调用的实质也是函数表达式调用的一种 例如 m max a max b c 其中max b c 是一次函数调用 它的值作为max另一次调用的实参 8 4 3对被调用函数的声明和函数原型 在一个函数中调用另一个函数需要具备的条件 1 首先被调用的函数必须是已经存在的函数 库函数或用户自己定义的函数 2 如果使用库函数 一般还应该在本文件开头用 include命令将调用有关库函数时所用到的信息 包含 到本文件中来 例如 include其中 stdio h 是一个 头文件 在stdio h文件中放了输入输出库函数所用到的一些宏定义 如果不包含 stdio h 文件中的信息 就无法使用输入输出库中的函数 同样 使用数学库中的函数 应该用 include 3 如果使用用户自己定义的函数 函数调用与函数定义前 一般还应该在主调函数中对被调用函数作声明 例8 5main floatadd floatx floaty floata b c scanf f f 对被调用函数的声明 从此行开始为对被调用函数的定义 包括函数首部 函数体等 函数声明也称为函数原形 其作用主要是在程序的编译阶段对调用函数的合法性进行全面检查 在函数声明中也可以不写形参名 而只写形参的类型 如上例中可以这样进行函数声明 floatadd float float 函数原型的一般形式为 1 函数类型函数名 参数类型1 参数类型2 2 函数类型函数名 参数类型1参数名1 参数类型2参数名2 编译系统不检查参数名 因此上例程序中函数声明可以写成 floatadd floata floatb 应当保证函数原型与函数首部写法上的一致 即函数类型 函数名 参数个数 参数类型和参数顺序必须相同 函数调用时函数名 实参个数应与函数原型一致 实参类型必须与函数原型中的参数类型赋值兼容 如果被调用函数的定义出现在主调函数之前 可以不必加以声明 8 5函数的嵌套调用 C语言的函数定义都是互相平行 独立的 C语句不能嵌套定义函数 但可以嵌套调用函数 也就是说 在调用一个函数的过程中 又调用另一个函数 下图表示的是两层嵌套 连main函数共3层函数 其执行过程见图 开始 调用a函数 结束 开始 调用b函数 开始 main函数 a函数 b函数 8 6函数的递归调用 在调用一个函数的过程中又出现直接或间接地调用该函数本身 称为函数的递归调用 C语言的特点之一就在于允许函数的递归调用 例如 intf intx inty z z f y return 2 z 在调用函数f的过程中 又要调用f函数 这是直接调用本函数 见图 开始 调用f函数 f函数 在调用f1函数过程中要调用f2函数 而在调用f2函数过程中又要调用f1函数 从图上可以看到 这两种递归调用都是无终止的自身调用 可以用if语句来控制 只有在某一条件成立时才继续执行递归调用 否则就不再继续 f1函数 f2函数 例8 7有5个人坐在一起 问第5个人多少岁 他说比第4个人大2岁 问第4个人岁数 他说比第3个人大2岁 问第3个人 又说比第2个人大2岁 问第2个人 说比第1个人大2岁 最后问第1个人 他说是10岁 请问第5个人多大 显然 这是一个递归问题 每一个年龄都比其前1个人的年龄大2岁 即age 5 age 4 2age 4 age 3 2age 3 age 2 2age 2 age 1 2age 1 10因此 除了第一个人 其余的人的年龄都需用递归法求出 执行过程如下 age函数n 5 main age 5 输出age 5 c age 4 2 age函数n 4 c age 3 2 age函数n 3 c age 2 2 age函数n 2 c age 1 2 age函数n 1 c 10 age 2 12 age 3 14 age 4 16 age 5 18 intage intn 递归函数 intc if n 1 c 10 elsec age n 1 2 return c main 主函数 printf d age 5 递归结束条件 递归公式 递归函数编写总结 1 采用if语句格式 2 两要素 递归结束条件递归公式3 一般形式if 递归结束条件 else递归公式4 递归公式中包含递归函数名 但参数不同5 if语言前的语句在递归进入时执行 if语句后的语句在递归返回时执行 例8 8用递归的方法求n 递推法 从1开始 乘2 乘3 一直乘到n 其基本原理是从一个已知事实推出下一个事实 递归法 当n 1或0时 n 1 当n 1时 n n n 1 floatfac intn floatf if n 0 printf n 0 dataerror elseif n 0 n 1 f 1 elsef fac n 1 n return f main intn floaty printf inputaintegernumber scanf d 8 7数组作为函数参数 1 数组元素作为函数实参数组元素作函数实参 值传递 方式 即单向传递 例8 10有两个数组a b 各有10个元素 将它们对应地逐个相比 如果a数组中的元素大于b数组中的相应元素的数目多于b数组中元素中大于a数组中相应元素的数目 则认为a数组大于b数组 并分别统计出两个数组相应元素大于 等于 小于的次数 分析 1 对于两个数组中的元素比较结果 我们可以用3个变量来记录 2 为了保持程序的简洁 用一个函数来进行数组元素的比较 比较结果用该函数的返回值表示 main intlarge intx inty inta 10 b 10 i n 0 m 0 k 0 printf enterarraya n for i 0 ib i dimes na i b i dimes na i k printf arrayaislargerthanarrayb n if ny flag 1 elseif x y flag 1 elseflag 0 return flag 输入数组a和数组b的数据 调用large函数进行数组元素比较 large函数 返回比较结果 2 数组名可作函数参数数组名可作函数参数 此时实参与形参都应用数组名 例8 11有一个一维数组score 内放10个学生成绩 求平均成绩 floataverage floatarray 10 inti floataver sum array 0 for i 1 i 10 i sum sum array i aver sum 10 return aver main floatscore 10 aver inti printf input10score n for i 0 i 10 i scanf f 说明 1 用数组名作函数参数 应该在主调函数和被调用函数分别定义数组 不能只在一方定义 2 实参数组与形参数组类型应一致 否则出错 3 实参数组与形参数组大小可以一致也可以不一致 C编译对形参数组大小不作检查 只是将实参数组的首地址传给形参数组 4 形参数组也可以不指定大小 在定义数组时在数组名后面跟一个空的方括弧 为了在被调用函数中处理数组元素的需要 可以另设一个参数 传递数组元素的个数 参见P180例8 125 数组名作函数实参 不是值传递而是地址传递 实参和形参数组将共占用同一段内存单元 如果形参数组中各元素发生变化会使实参数组元素的值同时发生变化 例8 13用选择法对数组中10个整数按由小到达排序 选择法介绍 1 将10个数进行相互比较 找出最小数 将之与a 0 对换 2 再将a 1 到a 9 的数进行比较 找出最小数 将之与a 1 对换 3 共比较9轮 最后得到排序后的结果 以5个数为例说明 a 0 a 1 a 2 a 3 a 4 36194未排序时的情况16394将5个数中最小数1与a 0 对换13694将余下的4个数中最小数3与a 1 对换13496将余下的3个数中最小数4与a 2 对换13469将余下的2个数中最小数6与a 3 对换至此完成排序 voidsort intarray intn inti j k t for i 0 i n 1 i k i for j i 1 j n j if array j array k k j t array k array k array i array i t main inta 10 i printf enterthearray n for i 0 i 10 i scanf d 变量k用于记录最小数的位置 初始值为i 变量i用于记录进行选择排序的数的起始位置 初始值为第一个数的位置 3 用多维数组名作函数参数用多维数组作为实参和形参 遵循 地址传递 形参值变化影响实参值变化 在被调用函数中对形参数组定义时可以指定每一维的大小 也可以省略第一维的大小说明 从实参传递来的是数组起始地址 在内存中按数组排列规则存放 按行存放 并不区分行和列 与此不能省略第二维 注意 二维数组的一维表示时 其元素与一维数组等同 8 8局部变量和全局变量 8 8 1局部变量在一个函数内部定义的变量是内部变量 只在本函数范围内有效 在此函数之外是不能使用这些变量 成为局部变量 floatf1 inta intb c charf2 intx inty inti j main intm n 变量a b c有效 变量x y i j有效 变量m n有效 说明 1 主函数main中定义的变量 如m n 也只在主函数中有效 主函数也不能使用其他函数中定义的变量 2 不同函数中可以使用相同名字的变量 它们代表不同的对象 互不干扰 3 形式参数也是局部变量 例如fl函数中的形参a 也只在fl函数中有效 其他函数不能调用 4 在一个函数内部 可以在复合语句中定义变量 这些变量只在本复合语句中有效 main inta b intc c a b 变量c只在复合语句内有效 离开后就无效 释放内存单元 变量a b在此范围有效 8 8 2全局变量 局部变量 在函数内定义的变量 全局变量 在函数之外定义的变量 也称外部变量 全程变量 全局变但可以为本文件中其他函数所共用 它的有效范围为从定义变量的位置开始到本源文件结束 intp 1 q 5 floatf1 a inta intb c charc1 c2 charf2 intx inty inti j main intm n 全局变量c1 c2的作用范围 全局变量p q的作用范围 说明 1 全局变量的主要作用时增加了函数间数据联系的渠道 一般约定全局变量的第一个字母用大写 2 建议不在必要时不要使用全局变量 因为 全局变量在程序的全部执行过程中都占用存储单元 它使函数的通用性降低了 降低了程序的可靠性和通用性 程序设计的原则 要求模块的 内聚性 强 与其他模块的 耦合性 弱 即模块的功能要单一 不要把许多互不相于的功能放到一个模块中 与其他模块的相互影响要尽量少 而用全局变量是不符合这个原则的 一般要求把程序中的函数做成一个封闭体 除了可以通过 实参 形参 的渠道与外界发生联系外 没有其他渠道 这样的程序移植性好 可读性强 使用全局变量过多 会降低程序的清晰性 难以清楚地判断出每个瞬时各个外部变量的值 在各个函数执行时都可能改变外部变量的值 3 如果在同一个源文件中 外部变量与局部变量同名 则在局部变量的作用范围内 外部变量被 屏蔽 即它不起作用 例8 16外部变量与局部变量同名 inta 3 b 5 max inta intb intc c a b a b return c main inta 8 printf d max a b 结果为 8 a b为全局变量 a b为局部变量 形参a b作用范围 局部变量a作用范围全局变量b作用范围 8 9变量的存储类别 8 9 1动态存储方式与静态存储方式按作用域来分 全局变量和局部变量 按变量值生存期来分 静态存储方式 动态存储方式 静态存储方式 在程序运行期间分配固定的存储空间的方式动态存储方式 在程序运行期间根据需要进行动态的分配存储空间的方式 内存中的供用户使用的存储空间的情况 这个存储空用户区间 分为三部分 见图 程序区 静态存储区 动态存储区 用户区 数据存放区 全局变量全部存放在静态存储区 非动态地进行分配和释放 在程序开始执行时给全局变量分配存储区 程序执行完毕就释放 在程序执行过程中它们占据固定的存储单元 动态存储区中存放以下数据 1 函数形式参数 2 自动变量 未加static声明的局部变量 3 函数调用别的现场保护和返回地址等 动态地进行分配和释放 在函数调用开始时分配动态存储空间 函数结束时释放这些空间 在C语言中每一个变量和函数有两个属性 数据类型和数据存储类别 数据类型包括整型 字符型等 存储类别措的是数据在内存中存储的方法 存储方法分为两大类 静态存储类和动态存储类 具体包含四种 自动的 auto 静态的 static 寄存器的 register 外部的 extern 根据变量的存储类别 可以知道变量的作用域和生存期 8 9 2auto变量 函数中的局部变量 如不专门声明为static存储类别 都是动态地分配存储空间的 数据存储在动态存储区中在函数调用结束时就自动释放这些存储空间 因此这类局部变量称为自动变量 自动变量用关键字auto作存储类别的声明 例如 intf inta 定义f函数 a为形参 autointb c 3 定义b c为自动变量 实际上 关键字 auto 可以省略 auto不写则隐含确定为 自动存储类别 程序中大多数变量属于自动变量 我们前面介绍的函数中定义的变量都没有声明为auto 其实都隐含指定为自动变量 8 9 3用static声明局部变量 有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值 即其占用的存储单元不释放 在下一次该函数调用时 该变量已有值 就是上一次函数调用结束时的值 这时就应该指定该局部变量为 静态局部变量 用关键字static 进行声明 例8 17f inta autointb 0 staticintc 3 b b 1 c c 1 return a b c main inta 2 i for i 0 i 3 i printf d f a 运行结果为 789 说明 1 静态局部变量属于静态存储类别 在静态存储区内分配存储单元 在程序整个运行期间都不释放 2 对静态局部变量是在编译时赋初值的 在程序运行时它已有初值 以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值 自动变量赋初值 不是在编译时进行 而是在函数调用时进行 每调用一次函数重新给一次初值 相当于执行一次赋值语句 3 如在定义局部变量时不赋初值的话 对静态局部变量 编译时自动赋初值0 对数值型变量 或空字符 对字符变量 而对自动变量来说 如果不赋初值则它的值是一个不确定的值 4 虽然静态局部变量在函数调用结束后仍然存在 但其他函数是不能引用它的 一般在以下情况下使用局部静态变量 1 需要保留函数上一次调用结束时的值 2 如果初始化后 变量只被引用而不改变其值 则这时用静态局部变量比较方便 以免每次调用时重新赋值 但是应该看到 用静态存储要多占内存 而且降低了程序的可读性 当调用次数多时往往弄不清静态局部变量的当前值是什么 因此 如不必要 不要多用静态局部变量 8 9 4register变量 一般情况下 变量 包括静态存储方式和动态存储方式 的值是存放在内存中的 当程序中用到哪一个变量的值时 由控制器发出指令将内存中该变量的值送到运算器中 经过运算器进行运算 如果需要存数 再从运算器将数据送到内存存放 如果有一些变量使用频繁 则从内存存取数据将花费较多时间 为了提高执行效率 C语言允许将局部变量的值放在CPU中的寄存器中 由于对寄存器的存取速度远高于对内存的存取速度 因此这样就可以提高执行效率 这种变量叫做 寄存器变量 用关键字register作声明 内存 CPU 总线 运算器 控制器 寄存器 例8 19使用寄存器变量intfac intn registerinti f 1 for i 1 i n i f f i return f main inti for i 1 i 5 i printf d d n i fac i 说明 1 只有局部自动变量和形式参数可以作为寄存器变量 其他 如全局变量 不行 2 一个计算机系统中的寄存器数目是有限的 不能定义任意多个寄存器变量 3 不同的系统对寄存器变量的处理方法是不同的 有的系统对寄存器不良当自动变量处理 分配内存单元 有的系统只允许将int char和指针型变量定义为寄存器变量 当今的优化编译系统能够识别使用频繁的变量 从而自动地将这些变量放在寄存器中 而不需要程序设计者指定 4 局部静态变量不能定义为寄存器变量 8 9 5用extern声明外部变量 外部变量 即全局变量 是在函数的外部定义的 它的作用域为从变量的定义处开始 到本程序文件的未尾 在此作用域内 全局变量可以为程序中各个函数所引用 编译时 将外部变量分配在静态存储区 有时需要用extern来声明外部变量 以扩展外部变量的作用域 1 在一个文件内声明外部变量如果外部变量不在文件的开头定义 其有效的作用范围只限于定义处到文件终了 如果在定义点之前的函数恩引用该外部变量 则应该在引用之前用关键字exturn对该变量作 外部变量声明 表示该变量是一个已经定义的外部变量 有了此声明 就可以从 声明 处开始 合法使用该外部变量 2 在多文件的程序中声明外部变量一个C程序可以由一个或多个源程序文件组成 如果程序只由一个源文件组成 使用外部变量的方法如前面介绍 如果一个程序包含两个文件 在两个文件中都要用到同一个外部变量 不能分别在两个文件中对该变量各自定义 否则进行程序的连接时会出现 重复定义 的错误 正确的做法是 在任一个文件中定义该变量 而在另一文件中用extern对该变量作 外部变量声明 在编译和连接时系统会由此知道此变量是一个已在别处定义的外部变量 井将在另一文件中定义的外部变量的作用域扩展到本文件 在本文件中可以合法地引用外部变量 例8 21给定b的值 输入a和m 求a b和am的值 文件file1 c中的内容 intA 定义外部变量 main inputpower int 对调用函数作声明 intb 3 c d m printf enterthenumberaanditspowerm n scanf d d 说明 1 假如程序有5个源文件 在一个文件中定义外部整型变量A 其他4个文件都可以引用A 但必须在每一个文件中都加上一个externA声明 在各文件经过编译后 将备目标文件联接成一个可执行的目标文件 2 在编译时遇到extern时 先在本文件中找外部变量的定义 如果找到 就在本文件中扩展作用域 如果找不到 就在连接时从其他文件中找外部变量的定义 如果找到 就将作用域扩展到本文件 如果找不到 按出错处理 8 9 6用static声明外部变量 有时在程序设计中希望某些外部变量只限于被本文件引用 而不能被其他文件引用 这时可以在定义外部变量时加一个static声明 这种加上static声明 只能用于本文件的外部变量 全局变量 称为静态外部变量 这为程序的模块化 通用性提供方便 如果已知道其他文件不引用本文件的外部变量 可以对本文件中的外部变量都加上static 成为静态外部变量 以免彼其他文件误用 需要指出对外部变量加上static声明 并不意味着这时才是静态存储 存放在静态存储区中 而不是static的是动态存储 存放在动态存储区 两种形式的外部变量都是静态存储方式 只是作用范围不同而已 都是在编晖
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年电商考试试题及答案
- 2025年社区工作人员真题及参考答案详解能力提升
- 建行行测试题及答案
- 2025年公文写作与处理竞赛题库(附答案)
- 健康生活常识考试题库及解答
- 电子商务运营策略与实践案例分析题及答案解析
- (2025)汽车驾驶员(技师)考试题库及答案
- 2025年江苏省高考政治试题与参考答案
- 部编版初中语文七年级下册期中练习试卷
- 北斗卫星导航系统科普演讲
- 工程项目建筑材料采购流程方案
- 临时场地使用协议书
- 2022年医学检验事业单位面试全攻略(结构化+专业核心)
- 2026年内蒙古民族幼儿师范高等专科学校单招职业技能测试题库完美版
- 储能解决方案介绍
- 房屋漏水检测报告和鉴定报告
- 2025浙江绍兴北站站区综合管理服务中心招聘辅助人员92人考试笔试备考试题及答案解析
- 杂志代理授权协议书模板
- 肉驴养殖项目可行性研究报告
- 公司内部控制制度及操作流程手册
- 市场部的安全生产职责
评论
0/150
提交评论