版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章函数西安工程大学本章内容:函数概述函数的定义与调用数组作为函数参数函数的嵌套调用和递归调用变量的属性变量的存储类别内部函数与外部函数7.1概述模块化程序设计基本思想:将一个大的程序按功能分割成一些小模块特点及优点:各模块相对独立、功能单一、结构清晰、接口简单控制了程序设计的复杂性提高元件的可靠性缩短开发周期避免程序开发的重复劳动易于维护和功能扩充开发方法:自上向下,逐步分解,分而治之C是模块化程序设计语言C程序结构C是函数式语言必须有且只能有一个名为main的主函数C程序的执行总是从main函数开始,在main中结束函数不能嵌套定义,可以嵌套调用函数分类从用户角度标准函数(库函数)用户自定义函数从函数形式无参函数有参函数使用库函数应注意:1、函数功能2、函数参数的数目和顺序,及各参数意义和类型3、函数返回值意义和类型4、需要使用的包含文件例如:Printf(“%d”,a);Scanf(“%d”,&a);Getchar()Putchar(a);Abs(x);Sqrt(x);Getchar()Printf(“%d”,a)7.2函数的定义和调用7.2.1函数的定义7.2.2函数的返回值与函数类型7.2.3对被调用函数的说明和函数原型7.2.4函数的调用7.2.5函数的形参与实参7.2.1函数的定义一般格式合法标识符函数返回值类型缺省int型无返回值void函数体函数类型函数名(数据类型参数[,数据类型参数2……]){ 说明部分; 语句部分;}例有参函数(现代风格)intmax(intx,inty){intz;z=x>y?x:y;return(z);}例有参函数intmax(intx,y){intz;z=x>y?x:y;return(z);}例空函数dummy(){}函数体为空例无参函数printstar(){printf(“**********\n”);}或printstar(void){printf(“**********\n”);}函数首部函数的定义说明(1)函数定义不允许嵌套。在一个函数的函数体内,不能再定义另一个函数,即不能嵌套定义。(2)空函数──既无参数、函数体又为空的函数。其一般形式为:[函数类型]函数名(void){}(3)在老版本C语言中,参数类型说明允许放在函数说明部分的第2行单独指定。例有参函数(传统风格)intmax(x,y)intx,y;{intz;z=x>y?x:y;return(z);}7.2.2函数的返回值与函数类型函数的返回值和return语句有参函数的返回值,是通过函数中的return语句来获得的。Return语句的形式:return(表达式);或return表达式;或return;功能:返回调用函数,并将“返回值表达式”的值带给调用函数。说明:函数中可有多个return语句若无return语句,并不是不返回一个值,而是遇}时,自动返回调用函数,并带回一个不确定的值。为了明确表示不返回值,可以用“void”定义成“无(空)类型”。若函数类型与return语句中表达式值的类型不一致,按前者为准,自动转换------函数调用转换例无返回值函数voidswap(intx,inty){inttemp;temp=x;x=y;y=temp;}printstar(){printf("**********");}main(){inta;a=printstar();printf("%d",a);}例函数带回不确定值输出:10voidprintstar(){printf("**********");}main(){inta;a=printstar();printf("%d",a);}编译错误!例函数返回值类型转换main(){floata,b;intc;scanf("%f,%f",&a,&b);c=max(a,b);printf("Maxis%d\n",c);}max(floatx,floaty){floatz;z=x>y?x:y;return(z);}7.2.3对被调用函数的说明对被调用函数要求:必须是已存在的函数库函数:#include<*.h>用户自定义函数:函数类型说明函数说明一般形式:函数类型函数名(形参类型[形参名],…..);或函数类型函数名();作用:告诉编译系统函数类型、参数个数及类型,以便检验函数定义与函数说明不同函数说明位置:程序的数据说明部分(函数内或外)下列情况下,可不作函数说明若函数返值是char或int型,系统自动按int型处理被调用函数定义出现在主调函数之前例函数说明举例main(){floata,b;intc;scanf("%f,%f",&a,&b);c=max(a,b);printf("Maxis%d\n",c);}max(floatx,floaty){floatz;z=x>y?x:y;return(z);}int型函数可不作函数说明/*ch7_5.c*/floatadd(floatx,floaty){floatz;z=x+y;return(z);}main(){floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);printf("sumis%f",c);}被调函数出现在主调函数之前,不必函数说明/*ch7_5.c*/main(){floatadd(float,float);/*functiondeclaration*/floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);printf("sumis%f",c);}floatadd(floatx,floaty){floatz;z=x+y;return(z);}floatadd();注意:实参与形参个数相等,类型一致,按顺序一一对应7.2.4函数的调用调用形式函数名(实参表);调用方式函数语句例printstar();printf(“Hello,World!\n”);函数表达式:例m=max(a,b)*2;函数参数:例printf(“%d”,max(a,b));m=max(a,max(b,c));7.2.5函数参数及其传递方式形参与实参形式参数:定义函数时函数名后面括号中的变量名实际参数:调用函数时函数名后面括号中的表达式c=max(a,b);(main函数)
(max函数)max(intx,inty){intz;z=x>y?x:y;return(z);}例比较两个数,并输出大较者main(){inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf("Maxis%d",c);}max(intx,inty){intz;z=x>y?x:y;return(z);}形参实参函数调用过程演示Main函数abMax函数xy5757cz77说明:实参必须有确定的值形参必须指定类型形参与实参类型一致,个数相同若形参与实参类型不一致,自动按形参类型转换———函数调用转换形参在函数被调用前不占内存;函数调用时为形参分配内存;调用结束,内存释放例计算x的立方#include<stdio.h>floatcube(floatx){return(x*x*x);}main(){floata,product;printf("Pleaseinputvalueofa:");scanf("%f",&a);product=cube(a);printf(”Cubeof%.4fis%.4f\n",a,product);}xaproduct××××1.21.21.728参数传递方式之一——值传递值传递方式方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值特点:形参与实参占用不同的内存单元单向传递711xy调用前:例交换两个变量的值。#include<stdio.h>main(){intx=7,y=11;printf("x=%d,\ty=%d\n",x,y);printf("swapped:\n");swap(x,y);printf("x=%d,\ty=%d\n",x,y);}swap(inta,intb){inttemp;temp=a;a=b;b=temp;}
ab调用时:711temp交换开始了7117调用结束:练习:
char
fun(char
x
,
char
y)
{
if(x<y)
return
x;
return
y;
}
main(
)
{
int
a=’9’,b=’8’,c=’7’;
printf(“%c\n”,fun(fun(a,b),fun(b,c)));
}
程序的执行结果是A、函数调用出错
B、8
C、9
D、7写出下列程序的运行结果:voidswap(intx,inty)
{intt;
t=x;x=y;y=t;printf("%d%d",x,y);
}
main()
{inta=3,b=4;
swap(a,b);printf("%d%d\n",a,b);
}
答案:4334
7.3数组作为函数参数数组元素作函数实参——值传递例两个数组比较大小432105a562312107688432105b212343986654n=0m=0k=0in=0m=0k=1in=0m=1k=1in=1m=1k=1in=1m=1k=2in=2m=1k=2in=3m=1k=2a和b为有10个元素的整型数组比较两数组对应元素变量n,m,k记录a[i]>b[i],a[i]==b[i],a[i]<b[i]的个数最后若n>k,认为数组a>b若n<k,认为数组a<b若n==k,认为数组a==b#include<stdio.h>main(){inta[10],b[10],i,n=0,m=0,k=0;printf("Enterarraya:\n");for(i=0;i<10;i++) scanf("%d",&a[i]);printf("Enterarrayb:\n");for(i=0;i<10;i++) scanf("%d",&b[i]);for(i=0;i<10;i++){if(large(a[i],b[i])==1)n=n+1;elseif(large(a[i],b[i])==0)m=m+1;elsek=k+1;}
/*Output*/}intlarge(intx,inty){intflag;if(x>y)flag=1;elseif(x<y)flag=-1;elseflag=0;return(flag);}说明:用数组元素作实参时,只要数组元素类型和函数的形参类型一致即可,并不要求函数的形参也是下标变量。换句话说,对数组元素的处理是按普通变量对待的。例求10位学生的平均成绩#include<stdio.h>
floataverage(intstu[10],intn);voidmain(){intscore[10],i;floatav;printf("Input10scores:\n");for(i=0;i<10;i++)scanf("%d",&score[i]);av=average(score,10);printf("Averageis:%.2f",av);}floataverage(int
stu[10],intn){inti;floatav,total=0;for(i=0;i<n;i++)total+=stu[i];av=total/n;returnav;}实参用数组名形参用数组定义,intstu[]..2109score562312….….88stu例数组排序----简单选择排序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; if(k!=i) {t=array[i]; array[i]=array[k]; array[k]=t; }}}main(){inta[10],i;for(i=0;i<10;i++) scanf("%d",&a[i]);
sort(a,10);for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");}0123456789a4968573299927137688arraykjjjkjkjjjjj949i=0例数组排序----简单选择排序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; if(k!=i) {t=array[i]; array[i]=array[k]; array[k]=t; }}}main(){inta[10],i;for(i=0;i<10;i++) scanf("%d",&a[i]);
sort(a,10);for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");}kjjkjkjjjjj0123456789a4968573299927137688array949kk1368i=10123456789a9132732495768768899arrayi=8例数组排序----简单选择排序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; if(k!=i) {t=array[i]; array[i]=array[k]; array[k]=t; }}}main(){inta[10],i;for(i=0;i<10;i++) scanf("%d",&a[i]);
sort(a,10);for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");}地址传递方式:函数调用时,将数据的存储地址作为参数传递给形参特点:形参与实参占用同样的存储单元“双向”传递实参和形参必须是地址常量或变量例求二维数组中最大元素值1357246815173412ijmax=11357246815173412ijmax=31357246815173412ijmax=5j1357246815173412imax=7j1357246815173412imax=7j1357246815173412imax=34intmax_value(intarray[3][4]){inti,j,k,max;max=array[0][0];for(i=0;i<3;i++)for(j=0;j<4;j++) if(array[i][j]>max) max=array[i][j];return(max);}main(){inta[3][4]={{1,3,5,7}, {2,4,6,8},{15,17,34,12}};printf("maxvalueis%d\n",max_value(a));}多维形参数组第一维维数可省略,第二维必须相同intarray[][4]例求二维数组中各行元素之和get_sum_row(intx[][3],intresult[],introw,intcol){inti,j;for(i=0;i<row;i++){result[i]=0; for(j=0;j<col;j++) result[i]+=x[i][j];}}main(){inta[2][3]={3,6,9,1,4,7};intsum_row[2],row=2,col=3,i;
get_sum_row(a,sum_row,row,col);for(i=0;i<row;i++)printf("Thesumofrow[%d]=%d\n",i+1,sum_row[i]);}314679asum_rowxresult1812数组名作函数参数用数组名作函数参数,要求形参和相对应的实参都必须是类型相同的数组,或指向数组的指针变量。实参数组和形参数组大小不要求必须一致,C编译系统对形参数组大小不作检查,只将实参数组的首地址传给形参数组。形参数组可以不指定大小,但若是二维数组,则第二维必须指定大小,第一维可以不指定。用数组名作为函数实参时,不是把数组的值传递给形参,而是把实参数组的起始地址传递给形参数组,两数组共用同一段存储单元。例数组元素作函数参数与数组名作函数参数的比较12a调用前a[0]a[1]12a调用a[0]a[1]12xy21xy交换12a返回#include<stdio.h>voidswap2(intx,inty){intz;z=x;x=y;y=z;}main(){inta[2]={1,2};
swap2(a[0],a[1]);printf("a[0]=%d\na[1]=%d\n",a[0],a[1]);}值传递12a调用前12ax调用21ax交换21a返回#include<stdio.h>voidswap2(intx[]){intz;z=x[0];x[0]=x[1];x[1]=z;}main(){inta[2]={1,2};
swap2(a);printf("a[0]=%d\na[1]=%d\n",a[0],a[1]);}地址传递例数组元素作函数参数与数组名作函数参数的比较写出下列程序的运行结果:#defineN20fun(intb[],intn,intm){inti,j;for(i=m;i>=n;i--)b[i+1]=b[i];}main(){inti,a[N]={1,2,3,4,5,6,7,8,9,10};fun(a,2,9);for(i=0;i<5;i++)printf("%d",a[i]);}0123456789a21345678910mnb92345678910以下程序的功能是计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请选择填空。floatfun1(floata,floatb){floatnum;num=a/b;returnnum;}#include<stdio,h>#include<math.h>floatfun1(float,float);voidmain(void){floatx,y,z,sum;scanf("%f%f%",&x,&y,&z);sum=fun1(①)+fun1(②);printf("sum=%f\n",sum);}
#include
main()
{charch[]="abc",x[3][4];inti;
for(i=0;i<3;i++)strcpy(x[i],ch);
for(i=0;i<3;i++)printf("%s",&x[i][i]);
printf("\n");
}答案:abcbcc7.4函数的嵌套调用和递归C语言规定:函数定义不可嵌套,但可以嵌套调用函数例求三个数中最大数和最小数的差值#include<stdio.h>
intdif(intx,inty,intz);intmax(intx,inty,intz);intmin(intx,inty,intz);voidmain(){inta,b,c,d;scanf("%d%d%d",&a,&b,&c);
d=dif(a,b,c);printf("Max-Min=%d\n",d);}intdif(intx,inty,intz){returnmax(x,y,z)-min(x,y,z);}intmax(intx,inty,intz){intr;r=x>y?x:y;return(r>z?r:z);}intmin(intx,inty,intz){intr;r=x<y?x:y;return(r<z?r:z);}main()调用函数dif输出结束dif函数max函数调用函数max调用函数minmin函数递归调用定义:函数直接或间接的调用自身叫函数的递归调用f()调f调f2调f1f1()f2()intf(intx){inty,z;……
z=f(y);…….return(2*z);}intf1(intx){inty,z;……
z=f2(y);…….return(2*z);}intf2(intt){inta,c;……
c=f1(a);…….return(3+c);}例求n的阶乘#include<stdio.h>intf(intn){intf;if(n<0)printf("n<0,dataerror!");elseif(n==0||n==1)f=1;elsef=f(n-1)*n;return(f);}main(){intn,y;printf("Inputaintegernumber:");scanf("%d",&n);
y=f(n);printf("%d!=%15d",n,y);}f(5)..f(4)*5..f(4)f(3)f(2)f(1)..f(3)*5....f(2)*5....f(1)*5....Return(1)..main()..f(5)..说明C编译系统对递归函数的自调用次数没有限制每调用函数一次,在内存堆栈区分配空间,用于存放函数变量、返回值等信息,所以递归次数过多,可能引起堆栈溢出例Hanoi问题ABC第一步:先把小盘和中盘从A借助于C移至B柱;(1)先把小盘移至C;(2)再把中盘移至B;(3)再把小盘移至B;第二步:把大盘子移至C柱;第三步:再把小盘和中盘从B借助于A移至C柱;(1)先把小盘子移至A;(2)再把中盘子移至C;(3)再把小盘子移至C;
例Hanoi问题ABChanoi(n,A,B,C);第一步:先把n-1个盘从A借助于C移至B柱;hanoi(n-1,A,C,B);第二步:把大盘子移至C柱;Move(n,c);第三步:再把n-1个盘从B借助于A移至C柱;hanoi(n-1,B,A,C);例Hanoi问题voidmove(chargetone,charputone){printf("%c--->%c\n",getone,putone);}voidhanoi(intn,charA,charB,charC){if(n==1)move(A,C);else{hanoi(n-1,A,C,B); move(A,C);
hanoi(n-1,B,A,C);}}main(){intm;printf("Inputthenumberofdisks:");scanf("%d",&m);printf("Thestepstomoving%3ddisks:\n",m);hanoi(m,'A','B','C');}ABC思考:什么样的问题可以用递归来解决?7.5变量的属性概述变量是对程序中数据的存储空间的抽象内存…….main(){inta;a=10;printf(“%d”,a);}编译或函数调用时为其分配内存单元1020002001程序中使用变量名对内存操作变量的属性数据类型:变量所持有的数据的性质(操作属性)存储属性存储器类型:寄存器、静态存储区、动态存储区生存期:变量在某一时刻存在-------静态变量与动态变量作用域:变量在某区域内有效-------局部变量与全局变量变量的存储类型auto-----自动型register-----寄存器型static------静态型extern-----外部型变量定义格式:[存储类型]数据类型变量表;如:intsum;autointa,b,c;registerinti;staticfloatx,y;局部变量与全局变量局部变量---内部变量定义:在函数内定义,只在本函数内有效说明:main中定义的变量只在main中有效不同函数中同名变量,占不同内存单元形参属于局部变量可定义在复合语句中有效的变量局部变量可用存储类型:autoregisterstatic(默认为auto)floatf1(inta){intb,c;…….}charf2(intx,inty){inti,j;……}main(){intm,n;…….}a,b,c有效x,y,i,j有效m,n有效例不同函数中同名变量main(){inta,b;a=3;b=4;printf("main:a=%d,b=%d\n",a,b);sub();printf("main:a=%d,b=%d\n",a,b);}sub(){inta,b;a=6;b=7;printf("sub:a=%d,b=%d\n",a,b);}例复合语句中变量#defineN5main(){inti;inta[N]={1,2,3,4,5};for(i=0;i<N/2;i++)
{
inttemp; temp=a[i]; a[i]=a[N-i-1]; a[N-i-1]=temp;
}for(i=0;i<N;i++)printf("%d",a[i]);}运行结果:54321例复合语句中变量#defineN5main(){inti;inta[N]={1,2,3,4,5};for(i=0;i<N/2;i++)
{
inttemp; temp=a[i]; a[i]=a[N-i-1]; a[N-i-1]=temp;
}for(i=0;i<N;i++)printf("%d",a[i]);}例不同函数中同名变量main(){inta,b;a=3;b=4;printf("main:a=%d,b=%d\n",a,b);sub();printf("main:a=%d,b=%d\n",a,b);}sub(){inta,b;a=6;b=7;printf("sub:a=%d,b=%d\n",a,b);}运行结果:main:a=3,b=4sub:a=6,b=7main:a=3,b=4全局变量---外部变量定义:在函数外定义,可为本文件所有函数共用有效范围:从定义变量的位置开始到本源文件结束,及有extern说明的其它源文件应尽量少使用全局变量,因为:全局变量在程序全部执行过程中占用存储单元降低了函数的通用性、可靠性,可移植性降低程序清晰性,容易出错定义
说明次数:只能1次可说明多次位置:所有函数之外函数内或函数外分配内存:分配内存,可初始化不分配内存,不可初始化>外部变量说明:extern数据类型变量表;外部变量定义与外部变量说明不同若外部变量与局部变量同名,则外部变量被屏蔽外部变量可用存储类型:缺省或staticfloatmax,min;floataverage(floatarray[],intn){inti;floatsum=array[0];max=min=array[0];for(i=1;i<n;i++){if(array[i]>max)max=array[i];elseif(array[i]<min)min=array[i];sum+=array[i];}return(sum/n);}main(){inti;floatave,score[10];/*Input*/ave=average(score,10);printf("max=%6.2f\nmin=%6.2f\naverage=%6.2f\n",max,min,ave);}作用域maxminintp=1,q=5;floatf1(inta){intb,c;…….}intf3(){…..}charc1,c2;charf2(intx,inty){inti,j;……}main(){intm,n;…….}c1,c2的作用范围p,q的作用范围externcharc1,c2;externcharc1,c2;c1,c2的作用范围扩展后c1,c2的作用范围扩展后例外部变量定义与说明intmax(intx,inty){intz;z=x>y?x:y;return(z);}main(){externinta,b;printf("max=%d",max(a,b));}inta=13,b=-8;运行结果:max=13externinta,b;intmax(){intz;z=a>b?a:b;return(z);}main(){printf("max=%d",max());}inta=13,b=-8;/*ch7_17.c*/inta=3,b=5;max(inta,intb){intc;c=a>b?a:b;return(c);}main(){inta=8;printf("max=%d",max(a,b));}例外部变量与局部变量运行结果:max=8inti;main(){voidprt();for(i=0;i<5;i++)prt();}voidprt(){for(i=0;i<5;i++)printf(“%c”,’*’);printf(“\n”);}例外部变量副作用运行结果:*****动态变量与静态变量存储方式静态存储:程序运行期间分配固定存储空间动态存储:程序运行期间根据需要动态分配存储空间内存用户区程序区静态存储区动态存储区全局变量、局部静态变量形参变量局部动态变量(autoregister)函数调用现场保护和返回地址等生存期静态变量:从程序开始执行到程序结束动态变量:从包含该变量定义的函数开始执行至函数执行结束7.6变量存储类型静态动态存储方式程序整个运行期间函数调用开始至结束生存期编译时赋初值,只赋一次每次函数调用时赋初值自动赋初值0或空字符不确定未赋初值静态存储区动态区存储区寄存器局部变量外部变量作用域定义变量的函数或复合语句内本文件其它文件局部变量默认为auto型register型变量个数受限,且不能为long,double,float型局部static变量具有全局寿命和局部可见性局部static变量具有可继承性extern不是变量定义,可扩展外部变量作用域register局部staticauto外部static外部存储类别例文件file1.cinta;main(){…….…….f2;…….f1;…….}f1(){autointb;………f2;……..}f2(){staticintc;………}C作用域b作用域a作用域mainf2f1mainf1f2maina生存期:b生存期:c生存期:例auto变量的作用域main(){intx=1;voidprt(void);
{
intx=3;prt();printf(“2ndx=%d\n”,x);
}printf(“1stx=%d\n”,x);}voidprt(void){intx=5;printf(“3thx=%d\n”,x);}运行结果:3thx=52ndx=31stx=1x=1作用域x=1作用域x=3作用域x=5作用域main(){voidincrement(void);increment();increment();increment();}voidincrement(void){intx=0;x++;printf(“%d\n”,x);}例局部静态变量值具有可继承性运行结果:111main(){voidincrement(void);increment();increment();increment();}voidincrement(void){staticintx=0;x++;printf(“%d\n”,x);}运行结果:123例变量的寿命与可见性#include<stdio.h>inti=1;main(){staticinta;
registerintb=-10;
intc=0;printf("-----MAIN------\n");printf("i:%da:%d\b:%dc:%d\n",i,a,b,c);c=c+8;other();printf("-----MAIN------\n");printf("i:%da:%d\b:%dc:%d\n",i,a,b,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度云计算与大数据融合应用合同2篇
- 承租方装修的租赁合同协议标准版3篇
- 大货车买卖合同协议书模板
- 二零二四年度环保设施建设和运营合同with设施内容和环保标准详细描述
- 二零二四年度电影《某某》演员特技替身合同3篇
- 二零二四年度智能交通系统建设合作协议
- 2024年度窗帘原材料采购合同
- 2024版房地产居间合同范例2篇
- 二零二四年度大数据中心建设及运营合同2篇
- 2024年度租赁合同担保支付条款
- GB/T 44713-2024节地生态安葬服务指南
- 一年级家长会课件2024-2025学年
- 《扣件式钢管脚手架安全技术规范》JGJ130-2023
- 欠薪清零台账
- N5语法练习加详解(共26页)
- 《书愤》PPT课件
- (最新)陕西省建筑工程施工质量验收技术资料管理整编规定及指
- 乌兹别克斯坦新增进口商品消费税税率表
- 基于人才战略的企业年金在民办高校中的应用研究
- 消防维保年度总结范文(2篇)精选范文
- 天津科技大学 大学物理(下)本科试卷(A卷)(含答案)
评论
0/150
提交评论