数据结构 函数

上传人:jiups****uk12 文档编号:45677626 上传时间:2018-06-18 格式:PPT 页数:70 大小:1.47MB
返回 下载 相关 举报
数据结构 函数_第1页
第1页 / 共70页
数据结构 函数_第2页
第2页 / 共70页
数据结构 函数_第3页
第3页 / 共70页
数据结构 函数_第4页
第4页 / 共70页
数据结构 函数_第5页
第5页 / 共70页
点击查看更多>>
资源描述

《数据结构 函数》由会员分享,可在线阅读,更多相关《数据结构 函数(70页珍藏版)》请在金锄头文库上搜索。

1、第七章 函数第七章 函数概述函数的定义 函数的返回值函数的调用、函数的嵌套与递归调用函数参数及其传递方式变量的存储属性数组作为函数参数第七章 函数 7.1 概述模块化程序设计n基本思想:将一个大的程序按功能分割成一些小模块,n特点:各模块相对独立、功能单一、结构清晰、接口简单控制了程序设计的复杂性提高元件的可靠性缩短开发周期避免程序开发的重复劳动易于维护和功能扩充n开发方法: 自上向下,逐步分解,分而治之第七章 函数n从用户角度标准函数(库函数):由系统提供用户自定义函数n从函数形式无参函数有参函数使用库函数应注意: 1、函数功能 2、函数参数的数目和顺序,及各参数意义和类型 3、函数返回值意

2、义和类型 4、需要使用的包含文件函数分类第七章 函数一般格式合法标识符函数返回值类型 缺省int型 无返回值void函数体函数类型 函数名(形参类型说明表) 说明部分 语句部分 现代风格:例 有参函数(现代风格)int max(int x,int y) int z;z=xy?x:y;return(z);例 有参函数(现代风格)int max(int x, y) int z;z=xy?x:y;return(z);例 空函数dummy( ) 函数体为空例 无参函数printstar( ) printf(“*n”); 或printstar(void ) printf(“*n”); 7.2 函数的定义

3、第七章 函数函数类型 函数名(形参表) 形参类型说明 说明部分 语句部分 传统风格:例 有参函数(传统风格)int max(x,y)int x,y; int z;z=xy?x:y;return(z);函数传统风格和例子第七章 函数返回语句n形式: return(表达式);或 return 表达式;或 return;n功能:使程序控制从被调用函数返回到调用函数中 ,同时把返值带给调用函数n说明:函数中可有多个return语句若无return语句,遇时,自动返回调用函数若函数类型与return语句中表达式值的类型不一致,按前者 为准,自动转换-函数调用转换void型函数例 无返回值函数void s

4、wap(int x,int y ) int temp;temp=x;x=y;y=temp;7.3 函数的返回值第七章 函数调用形式函数名(实参表); 说明:实参与形参个数相等,类型一致,按顺序一一对应实参表求值顺序,因系统而定(Turbo C 自右向左)6.4 函数的调用第七章 函数n函数语句:例 printstar();printf(“Hello,World!n”);n函数表达式:例 m=max(a,b)*2;n函数参数:例 printf(“%d”,max(a,b);m=max(a,max(b,c);函数的调用方式第七章 函数n对被调用函数要求:必须是已存在的函数库函数: #include

5、用户自定义函数: 函数类型说明n函数说明一般形式: 函数类型 函数名(形参类型 形参名,. );或 函数类型 函数名();作用:告诉编译系统函数类型、参数个数及类型,以便检验函数定义与函数说明不同函数说明位置:程序的数据说明部分(函数内或外)下列情况下,可不作函数说明 若函数返值是char或int型,系统自动按int型处理 被调用函数定义出现在主调函数之前有些系统(如Borland C+)要求函数说明指出函数返值类型和形 参类型,并且对void 和 int 型函数也要进行函数说明函数说明第七章 函数 6.4.1 函数的嵌套调用嵌套调用 C规定:函数定义不可嵌套,但可以嵌套调用函数main( )

6、调用函数a结束a函数b函数调用函数b 第七章 函数 例1 求三个数中最大数和最小数的差值思考:max函数int max(int x,int y,int z)功能:求三个数中的最大值min函数int max(int x,int y,int )功能:求三个数中的最小值dif函数功能:求差值方式:max(a,b,c)-min(a,b,c)(即分别调用max函数和 min函数,求其差值)第七章 函数 程序设计: int max(int x,int y,int z) int r;r=xy?x:y;return(rz?r:z); int min(int x,int y,int z) int r;r=x l

7、ong sq(int n) long k;k=n*n; return k; long cn(int n) long k; k=sq(n)*n; return k; main( ) int n;scanf(“%d”, printf(“sq(%d)=%ld,cn(%d)=%ldn”,n,sq(n),n,cn(n);第七章 函数 例3:求1k+2k+3k+nk 思路:求和函数long f2(int n,int k)功能:求1k+2k+3k+nk注意:由于结果可能比较大, 定义为long类型1k+2k+3k+nk =for(i=1;i long f1(int i,int k) long mul=1;

8、int j;for(j=1;j int isprime(int n) int k; for(k=2;k int fac(int n) int f;if(ny?x:y;return(z); 例 比较两个数并输出大者main() int a,b,c;scanf(“%d,%d“,c=max(a,b);printf(“Max is %d“,c); max(int x, int y) int z;z=xy?x:y;return(z); 形参实参6.5 函数参数及其传递方式第七章 函数说明: 实参必须有确定的值 形参必须指定类型 形参与实参类型一致,个数相同 若形参与实参类型不一致,自动按形参类型转换 函

9、数调用转换 形参在函数被调用前不占内存;函数调用时为形参分 配内存;调用结束,内存释放形参与实参 形式参数:定义函数时函数名后面括号中的变量名 实际参数:调用函数时函数名后面括号中的表达式6.5 函数参数及其传递方式第七章 函数n值传递方式方式:函数调用时,为形参分配单元,并将实参的值复制到形参 中;调用结束,形参单元被释放,实参单元仍保留并维持原值特点: 形参与实参占用不同的内存单元 单向传递参数传递方式第七章 函数711x:y:调用前:调用结束:711x:y:/*ch7_2.c*/ #include main() int x=7,y=11;printf(“x=%d,ty=%dn“,x,y)

10、;printf(“swapped:n“);swap(x,y);printf(“x=%d,ty=%dn“,x,y); swap(int a,int b) int temp;temp=a; a=b; b=temp; 调用: 711a:b:711x:y:swap:711x:y:117a:b:temp例 交换两个数第七章 函数方式:函数调用时,将数据的存储地址作为参数传递给形参特点: 形参与实参占用同样的存储单元 “双向”传递 实参和形参必须是地址常量或变量函数的地址传递第七章 函数/*ch9_3.c*/ swap(p1,p2) int *p1,*p2; int p;p=*p1;*p1=*p2;*p2

11、=p; main() int a,b;scanf(“%d,%d“,printf(“a=%d,b=%dn”,a,b);printf(“swapped:n”);swap(printf(”a=%d,b=%dn“,a,b); 例 交换两个数a 59b调前:a 59b调swap:p1long factorial(int n); main() int n1,n2;long a;scanf(“%d,%d“,a=sum(n1,n2);printf(“a=%1d“,a); long sum(int a,int b) long c1,c2;c1=factorial(a);c2=factorial(b);retur

12、n(c1+c2); long factorial(int n) long rtn=1;int i;for(i=1;ibi, ai=bi, aik,认为数组ab若n main() int a10,b10,i,n=0,m=0,k=0;printf(“Enter array a:n“);for(i=0;iy) flag=1;else if(xfloat average(int stu10, int n);void main() int score10, i;float av;printf(“Input 10 scores:n“);for( i=0; i void swap2(int x) int z

13、;z=x0; x0=x1; x1=z; main() int a2=1,2;swap2(a);printf(“a0=%dna1=%dn“,a0,a1); 地址传递例 数组元素与 数组名作函数参数比较第七章 函数void sort(int array,int n) int i,j,k,t;for(i=0;imax) max=arrayi;else if(arrayiy?x:y;return(z); main() extern int a,b;printf(“max=%d“,max(a,b); int a=13,b=-8;运行结果:max=13extern int a,b; int max() i

14、nt z;z=ab?a:b;return(z); main() printf(“max=%d“,max(); int a=13,b=-8;例 外部变量定义与说明第七章 函数/*ch7_17.c*/ int a=3,b=5; max(int a, int b) int c;c=ab?a:b;return(c); main() int a=8;printf(“max=%d“,max(a,b); 运行结果:max=8例 外部变量与局部变量第七章 函数n存储方式静态存储:程序运行期间分配固定存储空间动态存储:程序运行期间根据需要动态分配存储空间n内存用户区程序区静态存储区动态存储区全局变量、局部静态变

15、量形参变量 局部动态变量(auto register) 函数调用现场保护和返回地址等生存期 静态变量:从程序开始执行到程序结束 动态变量:从包含该变量定义的函数开始执行至函数执行结束动态变量与静态变量第七章 函数静态动态存储方式程序整个运行期间函数调用开始至结束生存期编译时赋初值,只赋一次每次函数调用时赋初值自动赋初值0或空字符不确定未赋初值静态存储区动态区存储区寄存器局部变量外部变量作用域定义变量的函数或复合语句内本文件其它文件u局部变量默认为auto型 uregister型变量个数受限,且不能为long, double, float型 u局部static变量具有全局寿命和局部可见性 u局部static变量具有可继承性 uextern不是变量定义,可扩展外部变量作用域register局部statica

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号