




已阅读5页,还剩56页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章 函数与模块化程序设计基础,6.1 概述,6.2 函数的定义,6.3 函数的调用,6.4 变量的作用域与存储特性,6.1 概述,6.1 概述,一. 模块与函数,1. 结构化程序设计, C语言是结构化的程序设计语言。,一种设计程序的技术。,通常采用自顶向下逐步求精的设计方法和单入口单出口控制结构。,2.“自顶向下”的模块化程序设计方法,将一个大问题按层次分解成多个方便解决小问题的模块的设计思想.,3. 功能模块,求解较小问题的算法和程序称作“功能模块”, 各功能模块可以先单独设计,然后将求解所有子问题的模块组合成求解原问题的程序。,由功能模块组成程序的结构图,6.1 概述,4. 函数: 完成相对独立功能的程序,例6-1,,输入年月日,计算出该日为该年的第几天。,分析: (1)判断年份是否为闰年。年份有闰年与平年之分,两者的区别在于闰年的二月为29天,平年的二月为28天。因此,给定一个年份,首先应确定其是否是闰年。 (2)求月份对应的天数。月份不同,其对应的天数不同,1、3、5、7、8、10、12月每月为31天,4、6、9、11月每月为30天,2月根据所在年份是否为闰年来确定。 (3)求总天数。分为经历完整的月份天数与经历不完整的月份天数。 (4)输出数据。年月日及相应的天数。,6.1 概述,程 序 实 现:,(1)判断闰年。,int leap(int year),int lp; lp=(year%4=0,return lp; ,6.1 概述,(2)求某月的天数。 /*函数month_days调用函数leap判断year是否为闰年*/ int month_days(int year,int month) int ds,d; switch(month) case 1: case 3: case 5: case 7: case 8: case 10: case 12:d=31;break; case 2:d=leap(year)?29:28;break; /*若为闰年,d赋值29,否则赋值28*/ default:d=30; return d; ,6.1 概述,(3)求天数和。 /*函数days调用函数month_days,求各月份对应的天数*/ int days(int year,int month,int day) int i,ds=0; for (i=1;imonth;i+) ds=ds+month_days(year,i); ds=ds+day; return ds; ,6.1 概述,(4)主函数。 void main() int year,month,day,t_day; printf(“Input year-month-day:n“); scanf(“%d-%d-%d“,&year,&month,&day); /*函数scanf作为输入模块是系统定义的, 主函数main可以直接调用它*/ t_day=days(year,month,day); /*求天数和*/ printf(“%d-%d-%d is %dth day of the year! n“,year,month,day,t_day); /*函数printf作为输出模块也是系统定义, 主函数main可以直接调用*/ ,注意:在完整的程序中,前三个函数应放在main( )函数之前。,6.1 概述,二. 模块设计原则,1. 模块相对独立性,(1)模块实现相对独立的特定子功能。模块的功能单一,函数处理的任务明确,函数的定义相互独立,一个函数不从属于另一个函数,但可以相互调用。 (2)模块之间的关系简单。模块之间没有过多的相互作用,只通过数据传递发生联系,并且函数传递的数据个数越少越好。例如,C语言禁止使用goto语句作用到另一个函数,以保证函数的独立性。 (3)模块内数据的局部化。模块内使用的数据具有独立性,一个模块不允许使用其它模块的数据,且一个模块的数据也不能影响其他模块中的数据。例如,C语言的局部变量就可以满足模块内数据局部化的要求。,6.1 概述,2. 模块大小适中,3. 模块分解层次清楚,模块化程序设计要求对问题进行逐层分解、逐步细化,形成模块的层次结构。,分解问题时要注意对问题进行抽象,将问题中的相似方面集中和概括起来,暂时忽略它们之间的差异,采取自上而下、逐步求精的方法实现.,6.1 概述,6.2 函数的定义,从函数使用的角度来看,C语言的函数可以分为两类:标准库函数和用户自定义函数。,一. 标准库函数与头文件,1. Turbo C系统提供了400多个标准库函数(参见附录),按功能可以分为: (1)类型转换函数,(2)字符判别与转换函数,(3)字符串处理函数,(4)标准I/O函数,(5)文件管理函数,(6)数学运算函数等。,它们的执行效率高,用户需要时,可在程序中直接进行调用。,6.2 函数的定义,C语言库函数所用到的常量、外部变量、函数类型和参数说明,都在相应的头文件(扩展名为.h)中声明,这些文件通常存放在系统目录tcinclude。如:,2. 头文件,(1) stdio.h文件:标准输入输出函数所用的常量、结构、宏定义、函数的类型、参数的个数与类型的描述。 (2) math.h文件:与数学函数有关的常量、结构及相应的函数类型和参数描述。 (3) string.h文件:与字符串操作函数有关的常量、结构以及相应的函数类型和参数描述。 (4) stdlib.h文件:与存储分配、转换、随机数产生等有关的常量、结构以及相应函数的类型和参数描述。 (5) ctype.h文件:字符函数有关的常量、宏定义以及相应函数的类型和参数描述。,6.2 函数的定义,二. 用户自定义函数,1. 函数分类,(从函数的形式看),无参函数,有参函数,函数定义时无参数说明,调用无参函数一般用来执行指定的一组操作,主调函数不传送数据给被调函数,函数定义时定义了一个或一个以上的参数,调用时将要处理的数据传送给被调函数,空函数,定义时既无参数也无执行语句,被调用时,不执行任何操作就立即返回,6.2 函数的定义,定义形式二: 函数值类型名 函数名(形式参数类型及参数说明) 数据说明部分 语句 ,定义形式一: 函数值类型名 函数名(形式参数列表) 形式参数说明 数据说明部分 语句 ,2. 函数定义形式,ANSI风格,建议使用,如: int max(a,b) int a,b;,如: int max(int a,int b),6.2 函数的定义,3. 函数由函数说明与函数体两部分构成。,(1)函数说明,函数说明包括函数值类型、函数名、参数类型及参数说明.,函数说明又称为函数首部。,函数值类型指定所定义函数返回值的类型,可以是简单类型、void类型或构造类型等。,当函数值类型为void时,表示函数无返回值,相当于其它语言的过程。当函数值类型为int时,可省略其类型的说明,建议不使用缺省形式类型说明.,函数名是函数的标识符,遵循C语言标识符的命名规则,区分大小写。,形式参数简称形参,处在函数名后的一对圆括号中。要特别注意的是,无论函数是否有形式参数,函数名后的圆括号不可省,并且圆括号之后不能接“;”。,形式参数属于所在函数的局部变量,其存储类型只能是auto型或register型,缺省为auto型。,6.2 函数的定义,函数体结束在“”括号处。,(2)函数体,函数说明之后的花括号“”部分为函数体。,函数体内数据说明部分在前,执行语句部分在后。,函数体中说明的变量是该函数调用时有效的局部变量,执行语句是实际生成命令代码的部分。,函数的功能由函数体内的各个语句的执行来实现。,例6-2:,定义符号函数sign。,sign(x) /*函数返回值类型未说明,默认为int,建议给出函数类型说明*/,int x; /*形式参数说明*/, int y;/*函数体局部变量*/,y=x0?1:(x=0?0:-1);,return y; /*返回函数值*/,6.2 函数的定义,(3) return语句的表示形式如下: return 表达式; 或 return(表达式);,符号函数的另一种定义形式:,int sign(int x) /*形式参数类型说明与参数列表与函数名一起说明*/, return y=x0?1: (x=0?0:-1);/*返回一个复杂的表达式的值*/ ,当函数类型为float型并且return语句缺省时,调用出错。,当函数类型为int型并且return语句的表达式缺省或return语句缺省时,返回不确定的值(在TC2中返回值为0),6.2 函数的定义,例6-3:写出以下程序的运行结果。 max( ) /*函数类型缺省,为int型,return语句缺省*/ min( ) /*函数类型缺省,return语句缺省表达式*/ return ; main( ) printf(“%d,%dn“,max(),min()); 程序运行结果为: -256,-256 /*返回值不确定,TC2开发环境中返回值为0*/,若函数max与函数min的类型为float,则返回值为:,Floating point error: Domain.,Abnormal program termination,6.2 函数的定义,在具有多个函数的C程序中,主函数出现的位置并不重要。为阅读方便,可将主函数main放在最前面。为了避免过多的函数声明语句,习惯上将主函数放在所有函数之后。不论主函数放在什么位置,一旦启动该程序,总是从主函数开始执行,并且最终在主函数结束整个程序的执行。,3. 函数main,一个C语言程序至少包含一个函数,并且必须有且只能有一个名为main的函数,称之为主函数。,在包含多个函数的程序中,不仅可以由主函数调用其它函数,还可以由被调函数调用其它函数,但任何函数都不能调用主函数。,通常主函数的类型定义为void(在TC2中可省略函数main的类型说明)。,6.2 函数的定义,6.3 函数的调用,在C语言的一般函数体中,可以包含对其它函数的调用,称为函数的嵌套调用,甚至包含对自身的调用,称为函数的递归调用。,一个函数一旦被定义,就可在程序的其它函数中使用它,这个过程称为函数调用。,一. 函数的一般调用与声明,函数名(实际参数列表),1. 函数调用形式,函数调用的一般形式:,6.3 函数的调用,实际参数也称为实在参数,简称为实参,实际参数之间以“,”分隔。,函数调用时,实参与形参应保持个数、次序及类型的一致性,以确保实参与形参之间数据的正确传递。,实际参数一般为表达式,可以是常量、变量(调用时必须有确定的值或确定的地址)。,形式参数必须为变量。,当实际参数的个数、次序、类型与对应形式参数的个数、次序、类型不一致时,系统并不提示错误,后果却难以预测。,注意,6.3 函数的调用,C语言中函数调用的三种形式:,函数语句调用,函数表达式调用,函数参数调用,在函数调用后加“;”,构成一个语句。,调用函数的目的可能是执行一个动作或完成特定的功能。,大多数函数的调用形式。,被调用函数执行的结果为调用函数提供一个值,除非一个函数的类型说明为void型。,调用函数通过表达式接收值。,被调函数作为某个函数的一个参数。,6.3 函数的调用,例6-4, 函数语句调用与函数表达式调用。 #include void main() printf(“nk1=%d“,printf(“n%k2“); 程序运行结果为: k2 k1=3,6.3 函数的调用,void main( ) /*主函数中采用函数参数调用形式调用函数max2*/ int x,y,z,m; scanf(“%d,%d,%d“,&x,&y,&z); printf(“max=%dn“,max2(max2(x,y),z); / *内层函数max2的值作为外层函数max2的实参,整个函数max2的值又作函数printf的的实参*/ ,例6-5:函数参数调用形式调用函数max2:,int max2(int a,int b) /*求两个数中较大者*/ int y; y=(ab)?a:b; return y;,6.3 函数的调用,2. 函数声明,调用用户自定义函数时,一般调用函数和被调用函数应在同一个文件中,在调用函数中对被调用函数返回值的类型、函数名称、函数形式参数的类型进行说明,这种说明称为函数声明。,函数声明的一般形式如下:,类型名 函数名(类型1 形参1,类型2 形参2,类型n 形参n);,或,类型名 函数名(类型1,类型2,类型n);,或,类型名 函数名();,函数声明是以语句形式出现的,因此其后有语句结束标记“;”。,若函数定义放在主调函数之前,遵循先定义后调用原则,函数声明可以省略。,6.3 函数的调用,例6-6: 编程求两个整数的阶乘之和。,long fac(n) /*定义函数fac,其功能是求n!*/ int n; int i; long r=1; /*注意r的初始化值为1*/ for(i=1;i=n;i+)r=r*i; return r; ,#include void main() int m1,m2; long result; long fac(int); /*在主函数中声明后面定义的函数fac*/ scanf(“%d,%d“,&m1,&m2); result=fac(m1)+fac(m2); printf(“%d!+%d!=%ldn“, m1,m2,result); ,6.3 函数的调用,二. 形参与实参,形式参数 (简称形参),定义函数使用的参数,实际参数 (简称实参),调用函数使用的参数,C语言中,采用函数之间的参数传递方式或用全局变量共享数据方式,使一个函数能对不同的数据进行相同功能的处理。,C语言函数的参数传递均采用单向值传递方式(或称复制方式)。,单向值传递方式是指在函数调用时,将实参之值传递给对应的形式参数,使形参具有与实参相同的值。,当实际参数是变量的地址值、指针常量或指针变量时,实际参数传递给形式参数的是地址值,也同样是单向值传递方式。,6.3 函数的调用,例6-7,求方程ax2+bx+c=0(a0)的实数根。,分析: (1)一元二次方程的实根的条件是: 。 (2)定义函数dict来判断数方程是否有实根,有实根则返回函数值1,否则返回函数值0;然后在主函数中求方程的实根。,#include #include void main() float a,b,c,x1,x2,d,dt; int dict(float,float,float); /*声明函数dict及形式参数类型*/ printf(“Input a,b,c:“); scanf(“%f,%f,%f“, /* ,可以用一个函数实现*/,6.3 函数的调用,if(d) x1=(-b+sqrt(dt)/(2*a); x2=(-b-sqrt(dt)/(2*a); printf(“实根x1=%f,x2=%fn“,x1,x2); else printf(“无实数根!n“); int dict(a,b,c) /*定义函数dict及形参说明*/ float a,b,c; float d; d=b*b-4*a*c; /*可以用一个函数实现*/ if(d=0) return(1); else return(0); ,6.3 函数的调用,通过函数调用,将实参的值传递给形参.,函数调用时,系统对参数的处理步骤为:,(1)计算各实参的值,将实参值压入形参栈中,然后执行函数体。 (2)当函数执行完返回时,形参从栈顶弹出(取走)。,6.3 函数的调用,有关实参与形参的几点说明:,(1)在函数定义中指定的形参,未调用时,它们不占用存储单元。只有调用该函数时,形参才被分配空间,函数调用结束后,形参所占的存储单元被释放。,(2)实参为表达式。函数调用时,先计算表达式的值,然后将值传递给形参。常量、变量、函数值都可看成是表达式的特殊形式。,(3)定义函数时,形参的排列没有次序要求,但对形参列表中每个参数要进行说明。调用函数时,实参类型、个数及排列次序应与形参一一对应。若类型不一致,必须在参数前加上强制转换符,否则会发生“类型不匹配”的错误。,(4)实参与形参的数据传递为单向传递,只可由实参向形参传递,不能由形参传回实参。实参与形参处在不同的函数中,作用的区域不同,即使实参与形参同名,也是不同的变量。,6.3 函数的调用,三. 函数的嵌套调用,所谓函数的嵌套调用是指一个函数调用另一函数的过程中又出现对其它的函数调用。,这种嵌套调用的层次原则上不限制。,函数1 函数2 函数3 . . 调用函数2 调用函数3 . ,6.3 函数的调用,例6-8,采用函数多重嵌套调用求方程ax2+bx+c=0(a0)的实数根。,#include #include void main() float a,b,c,x1,x2; int dict(float,float,float); float dt(float,float,float); float root(float,float,float,int); printf(“Input a,b,c:“); scanf(“%f,%f,%f“,&a,&b,&c);,函数声明,if(dict(a,b,c) x1=root(a,b,c,1); /*调用函数root*/ x2=root(a,b,c,0); printf(“实根x1=%f,x2=%fn“,x1,x2); else printf(“无实根!n“); ,6.3 函数的调用,int dict(float a,float b,float c) int f; if (dt(a,b,c)=0) f=1; else f=0; return f; float root(float a,float b,float c,int flag) float d,x; d=dict(a,b,c); /*调用函数 dict*/ if(d) x=flag?(-b+sqrt(dt(a,b,c)/(2*a):(-b-sqrt(dt(a,b,c)/(2*a); return x; ,float dt(float a,float b,float c) return b*b-4*a*c; ,6.3 函数的调用,四. 函数的递归调用,在C语言的函数调用过程中,若函数直接或间接调用函数自身,则这种调用称为函数的“递归调用”。,1. 直接递归与间接递归,直接递归,函数体内直接调用函数自身,间接递归,函数调用其它函数,而其它函数又调用该函数自身,(1)直接递归,void fun( ), .,fun( );,.,(2)间接递归,void fun1( ), .,fun2( );,.,void fun2( ), .,fun2( );,.,6.3 函数的调用,无论是直接还是间接递归,两者都是无终止的调用自身。 要避免这种情况的发生,使用递归解决的问题应满足两个基本条件:,(1)问题的转化。有些问题不能直接求解或难以求解,但它可以转化为一个新问题,这个新问题相对较原问题简单或更接近解决方法。这个新问题的解决与原问题一样,可以转化为下一个新问题,。,(2)转化的终止条件。原问题到新问题的转化是有条件的、次数是有限的,不能无限次数地转化下去。 这个终止条件也称为边界条件,相当于递推关系中的初始条件。,6.3 函数的调用,例6-9,编程求mn(m,n都为整数且n0)。,分析:,(1)mn可以通过累乘方法实现。,(2)mn又可写成递归公式:,即mn问题可以理解为:直接计算mn没有相应的运算符,但可以将mn转化为mmn-1的形式,即将mn转化为一个乘法问题,但乘法中的mn-1与mn是同一类问题,需要继续进行转化,直到问题趋于边界条件m0=1。,6.3 函数的调用,#include void main( ) int m,n; long power(int,int); /*函数声明*/ scanf(“%d,%d“,&m,&n); printf(“power(%d,%d)=%ldn“,m,n,power(m,n); long power(int m,int n) /*求mn的递归函数的定义*/ long p; if (n=0)p=1; else p= m*power(m,n-1); /*注意:不可写成power(m,n)=m*power(m,n-1)*/ return p; ,6.3 函数的调用,6.3 函数的调用,例6-10,编程求裴波那契(Fibonacci)数列(1,1,2,3,5,8,)第10项的值。,分析:,(1)对于裴波那契数列而言,有两个初始条件,分别为: fib(1)=1,fib(2)=1;,(2)其递推关系为从第三项开始,每项是前两项之和。因此,可以写出它的递归公式:,6.3 函数的调用,#include void main() int n; long m; long fib(int); /*函数声明*/ scanf(“%d“,&n); /*求第n项*/ m=fib(n); printf(“fib(%d)=%ldn“,n,m); long fib(int n) /*定义函数fib及形参说明*/ if (n=1) return(1); else if(n=2) return (1); /*递归终止条件*/ else return fib(n-1)+fib(n-2); ,6.3 函数的调用,例6-11,汉诺(Hanoi)塔游戏。,汉诺塔(Tower of Hanoi)游戏据说来源于布拉玛神庙。游戏的装置如图6-6所示(图上以3个金片例),底座上有三根金的针,第一根针上放着从大到小64个金片。游戏的目标是把所有金片从第一根针移到第三根针上,第二根针作为中间过渡。每次只能移动一个金片,并且大的金片不能压在小的金片上面。该游戏的结束就标志着“世界末日”的到来。,6.3 函数的调用,分析:,游戏中金片移动是一个很繁琐的过程。通过计算,对于64个金片至少需要移动 264 1 = 1.81019 次 。,不妨用A表示被移动金片所在的针(源),C表示目的针,B表示过渡针。对于把n(n1)个金片从第一根针A上移到第三根针C的问题可以分解成如下步骤:,(1)将n-1个金片从A经过C移动到B。,(2)将第n个金片移动到C。,(3)再将n-1个金片从B经过A移动到C。,这样就把移动n个金片的问题转化为移动n-1个金片的问题,即移动n个金片的问题可用移动n-1个金片的问题递归描述,以此类推,可转化为移动一个金片的问题。显然,一个金片就可以直接移动。,6.3 函数的调用,i=0; /*i为移动的次数,说明为全局变量*/ void hanoi(int n, int A,int B,int C) if(n=0) return; /* 0个金片不处理 */ if(n=1) step(A,C); /* n=1时, 直接将金片从A移动到C*/ else hanoi(n-1,A,C,B); /* 先将n-1个金片从A经过C 移动到B */ step(A,C); /* 将第n个金片从A移动到C */ hanoi(n-1,B,A,C); /* 再将n-1个金片从B经过A移动到C*/ void step(int take,int put) i+; /*第i次移动*/ printf(“%d %d-%dn“,i,take,put); #include void main() int n; printf(“Input n:“);scanf(“%d“,&n); hanoi(n,1,2,3);/*n个金片从第一根针经过第二根针移动到第三根针*/ ,6.3 函数的调用,程序运行结果: Input n:3 1 1-3 3 2 1-2 2 3 3-2 3 4 1-3 1 5 2-1 3 6 2-3 2 7 1-3 3 说明: 结果中第1列表示第i次移动,第2列表示从第m根针移动到第n根针,第3列表示第i个金片(i=1,2,3,最小的金片编号为3)。,递归在算法上简单而自然,递归过程结构清晰,源程序代码紧凑,因而递归调用在完成诸如阶乘运算、级数运算以及对递归的数据结构进行处理等方面特别有效。,6.3 函数的调用,2. 递归与递推,递推方法,程序描述繁杂,可读性差;,主要采用循环技术;,逐步执行;,当前值的求得总建立在前面求解的基础上;,递归方法,描述与原始问题(递归公式)比较接近;,书写简洁、易读易写;,易于分析算法的复杂性和证明算法的正确性;,在问题转化时,需要花时间和存储空间将有关的“现场信息”保存起来;当达到中止条件时,系统又需要花时间将有关的“现场信息”恢复以便处理未曾处理完的函数调用 。,占用存储空间少,执行速度快。,6.3 函数的调用,6.4 变量的作用域及存储特性,变量的数据类型,变量应占用的内存空间大小,变量在存储空间分配时所限定的边界条件,变量的性质,变量的数据类型,变量存储类型,变量的作用域,变量的生存期,共同决定,6.4 作用域及存储特性,一. 变量的作用域,例6-12: void f1( ) int t=2; a *= t; b /= t; void main( ) int a, b; printf(”Enter a,b:”); scanf(”%d,%d”, ,编译程序会提示出错: Undefined symbol a 和 Undefined symbol b 。 为什么?,6.4 作用域及存储特性,1. 变量按作用域:分为全局变量和局部变量 2. 区别:,6.4 作用域及存储特性,例6-13: #include int a,b; /*a,b为全局变量*/ void f1( ) int t1,t2; t1 = a * 2; t2 = b * 3; b = 100; printf (”t1=%d,t2=%dn ”, t1, t2); void main( ) a=2; b=4; f1( ); printf (”a=%d,b=%d”, a, b); ,程序输出结果为: t1=4,t2=12 a=2,b=100,6.4 作用域及存储特性,例6-14: #include int a=2,b=4; /*a,b为全局变量*/ void f1( ) int t1,t2; t1 = a * 2; t2 = b * 3; b = 100; printf (” t1=%d,t2=%dn”, t1, t2); void main() int b=4; f1( ); printf (” a=%d,b=%d ”, a, b); ,程序输出结果为: t1=4,t2=12 a=2, b=4,结论: 全局变量与局部变量同名时,局部变量的作用域屏蔽全局变量,6.4 作用域及存储特性,二. 变量的存储特性,变量的存储特性,变量的生存期,变量的存储类型,变量的存在时间,即变量的存在性。,变量存放的存储媒介,如存储器、外存储器和CPU的通用寄存器.,6.4 作用域及存储特性,变量 (按存在时间),静态存储变量,动态存储变量,生存期为程序执行的整个过程,在该过程中占有固定的存储空间,也称永久存储。,只生存在某一段时间内,函数的形参、函数体或分程序中定义的变量,只有当程序进入该函数或分程序时才分配存储空间,函数/分程序执行完后,变量的存储空间又被释放。,变量属性,数据类型,存储特性,6.4 作用域及存储特性,C语言变量的存储特性可分四类: 自动型(auto)、静态型(static)、外部型(extern)和寄存器型(register)。,完整的变量定义:,存储特性 数据类型 变量名;,1. 自动型变量,auto 类型标识符 变量列表;常常可以缺省auto。,函数内定义的局部变量、函数的形式参数和函数体内分程序的局部变量。,随函数的调用而存在,随函数的返回而消失,它们在一次调用结束到下一次调用开始之间不再占有存储空间。,作用域局限于所定义的函数,其生存期就是函数的生存期,在一个函数中引用另一个函数的自动型变量的值是错误的。,6.4 作用域及存储特性,2. 静态型变量,静态型变量是指在编译时分配存储空间的变量。,static 类型标识符 变量列表;,局部静态变量,全局静态变量,函数内部定义的静态变量,作用域与自动型变量相同,当所在的函数执行结束后,静态变量所占内存单元并不释放,其值仍然保留,函数外部定义的静态变量,在程序中凡
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 果实硬度无损检测技术-洞察及研究
- 昆虫拟态多样性与物种保护策略研究-洞察及研究
- 农村垃圾处理的数字化研究-洞察及研究
- 智慧乡村规划-洞察及研究
- CVD法LED材料性能提升研究-洞察及研究
- 多维度用户行为数据融合分析-洞察及研究
- 海水淡化膜材料研究-洞察及研究
- 机器视觉在石墨分选中的应用-洞察及研究
- 多模态成像追踪-洞察及研究
- 暗物质晕宇宙学参数-洞察及研究
- 个人向企业正式借款合同
- 2025部编版五年级上册《道德与法治》教学工作计划
- 催收话术培训
- 国开电大《组织行为学》形考任务1-4
- 期末检测试卷-2024-2025学年六年级数学上册人教版
- 品牌代工厂协议书范本
- GB/T 44815-2024激光器和激光相关设备激光束偏振特性测量方法
- 三管防控及护理管理要点
- 携程旅行合同电子版
- 幼儿园食品安全和膳食经费管理方案
- DL∕T 5776-2018 水平定向钻敷设电力管线技术规定
评论
0/150
提交评论