第五章函数(正式)ppt课件

上传人:我*** 文档编号:151152743 上传时间:2020-11-12 格式:PPT 页数:53 大小:464.50KB
返回 下载 相关 举报
第五章函数(正式)ppt课件_第1页
第1页 / 共53页
第五章函数(正式)ppt课件_第2页
第2页 / 共53页
第五章函数(正式)ppt课件_第3页
第3页 / 共53页
第五章函数(正式)ppt课件_第4页
第4页 / 共53页
第五章函数(正式)ppt课件_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《第五章函数(正式)ppt课件》由会员分享,可在线阅读,更多相关《第五章函数(正式)ppt课件(53页珍藏版)》请在金锄头文库上搜索。

1、1,第5章 函数,模块化程序设计 基本思想:将一个大的程序按功能分割成一些小模块, 特点: 各模块相对独立、功能单一、结构清晰、接口简单 控制了程序设计的复杂性 缩短开发周期 避免程序开发的重复劳动 易于维护和功能扩充 开发方法: 自上向下,逐步分解,分而治之,2,函数分类 从用户角度 标准函数(库函数):由系统提供 用户自定义函数 从函数形式 有参函数 无参函数 (1)在程序中要调用某个库函数,则要用预处理命令 #include将该函数所在的头文件包含到程序中。 (2)要正确使用一个库函数,取得预期的结果,程序设计人员需要准确理解库函数,函数的功能描述和函数原型。,使用库函数应注意: 1、函

2、数功能 2、函数参数的数目和顺序,及各参数意义和类型 3、函数返回值意义和类型 4、需要使用的包含文件,3,5.2 函数的定义与调用 5.2.1函数的定义 一般格式,合法标识符,函数返回值类型 缺省int型 无返回值void,函数体,例 有参函数(现代风格) int add(int x, int y) int z; z=x+y; return(z); ,例 无参函数 printstar( ) printf(“*n”); 或 printstar(void ) printf(“*n”); ,4,例 有参函数(传统风格) int max(x,y) int x,y; int z; z=xy?x:y;

3、return(z); ,5,例5.1 输入两个正整数m,n(mn),计算从m个元素中任取n个元素的组合数。 计算公式为: 在该问题的求解中,需要三次计算阶乘值:如果有一个函数可以提供求阶乘的功能,调用三次就可以解决问题了。可以自行编写求阶乘的函数。 函数编写如下:,long fac(int x) int i; long f =1; for(i=1;i=x;i+) f=f*i; return (f); ,6,1主调函数与被调函数 main函数是一个程序的执行入口 程序的执行是从main函数开始的 其它函数必须由main函数调用才能得到执行。,7,2.形式参数与实际参数 形式参数:在函数定义的函数

4、首部,函数名后的括号中说明的变量,简称形参。 形参的个数可以有多个,多个形参之间用逗号隔开。 实在参数:函数被调用时,在调用处给出对应的参数,简称实参; 实参往往是具有明确值的常量、变量或表达式等。 在编译程序时,系统并不给形参分配内存空间。 在函数被调用时,形式参数才临时占有存储空间,并从对应的实在参数获得值。,main() int a=10, b=24 ,sum; sum=add(a, b); printf(”sum= %dn,sum); ,int add(int x,int y) int z; z=x+y; return(z); ,8,3函数值的返回 在函数体中,对形式参数接收的数据进行

5、具体操作,并应该在函数体的最后将处理结果返回给主调函数。返回处理结果必须采用return语句完成。 return语句的形式: return (表达式); 或 return 表达式; return语句执行后,程序将退出被调函数,被调函数携带函数值返回主调函数,在主调函数中继续执行。,int add(int x,int y) int z; z=x+y; return(z); ,9,说明: 函数中可有多个return语句 若无return语句,遇时,自动返回调用函数 若函数类型与return语句中表达式值的类型不一致,按前者为准,自动转换-函数调用转换 void型函数,10,例 函数返回值类型转换,

6、main() float a,b; int c; scanf(%f,%f, ,11,4无参函数与无返回值的函数 (1)无参函数 函数的定义中可以没有形式参数,称为无参函数。,int printstar( ) printf(*n); return 1; ,(2)无返回值的函数 函数返回值的类型应定义为void,即表示“空类型”, 在函数体中,return语句可以省略。,void swap(int x,int y ) int temp; temp=x; x=y; y=temp; ,12,例5.2 设计一个函数,其功能是分解并打印出参数x的各个素数因子。如:36=1*2*2*3*3。,void di

7、visor(int x) int i; printf(%d=1,x); for(i=2;i=x;i+) while (x%i=0) printf(*%d,i); x=x/i; ,13,5.2.2 函数调用 函数调用是使函数实际执行的过程。 格式: 函数名(实在参数表) long fac(int x); /* 函数原型说明 */ main() int m,n,c; printf(input m,n:); scanf(%d%d, ,14,函数说明 对被调用函数要求: 必须是已存在的函数 库函数: #include 用户自定义函数: 函数类型说明 函数说明 一般形式: 函数类型 函数名(形参类型 形

8、参名,. ); 或 函数类型 函数名(); 作用:告诉编译系统函数类型、参数个数及类型,以便检验 函数定义与函数说明不同 函数说明位置:程序的数据说明部分(函数内或外) 下列情况下,可不作函数说明 若函数返值是char或int型,系统自动按int型处理 被调用函数定义出现在主调函数之前 有些系统(如Borland C+)要求函数说明指出函数返值类型和形参类型,并且对void 和 int 型函数也要进行函数说明,15,例 函数说明举例,16,1.对在程序中除main之外的所有函数进行原型说明(位置关系) int cmn(int m,int n); /*推荐位置关系*/ long fac(int

9、x); main() /*main函数*/ int m,n,c; long fac(int x) /*fac函数*/ int i; long f=1; int cmn(int m,int n)/*cmn函数*/ ,17,2 根据函数有无返回值,可以将调用方式分为两种 (1)对于有返回值的函数的调用,通常作为表达式的一部分。 函数表达式: 例 m=max(a,b)*2; 函数参数: 例 printf(“%d”,max(a,b); m=max(a,max(b,c); (2)对于无返回值的函数,函数的调用通常作为一个单独的语句来使用。 对于例5.2所示的函数可以给出如下的main函数进行调用: vo

10、id divisor(int x); /* 函数原型说明 */ main() int n; printf(input n:); scanf(%d, ,18,3 函数的调用过程 函数调用过程是使函数得到执行的过程,有以下步骤: (1)根据函数名找到被调函数,若没找到,系统将报告出错信息。 (2)计算实在参数的值。 (3)将实在参数的值传递给形式参数。 (4)中断在主调函数中的执行,转到被调函数的函数体中开始执行。 (5)遇到return语句或函数结束的花括号时,返回主调函数。 (6)从主调函数的中断处继续执行,19,4 参数的结合问题 在函数调用时,将实参值传给对应的形参 注意: (1)实参的个

11、数和形参的个数应该相等; (2)实参与形参的应该在顺序上一一对应; (3)实参的类型一般应该与对应的形参的类型相同; (4)C语言中实参与形参的结合是一种传值方式 将实参的值拷贝一份传递给对应的形参; (5)在函数的调用过程中,如形参的值发生改变,不影响实参的值。 (6)实参表求值顺序,因系统而定(Turbo C 自右向左),20,例5.3 参数结合示例。 int change(int x,int y); main() int a,b,m; printf(input two data:); scanf(%d %d, ,21,main() int i=2,p; p=f(i,+i); printf

12、(%d,p); int f(int a, int b) int c; if(ab) c=1; else if(a=b) c=0; else c=-1; return(c); ,例 参数求值顺序,main() int i=2,p; p=f(i, i+); printf(%d,p); int f(int a, int b) int c; if(ab) c=1; else if(a=b) c=0; else c=-1; return(c); ,运行结果:0,运行结果:1,22,5.3 变量作用域 所谓变量的作用域,是指一个变量有效的范围 根据变量作用范围不同,变量分为局部变量和全局变量 5.3.1

13、局部变量 所谓局部变量,是指定义在一个程序块(函数)中的变量 1局部变量的定义位置及作用域 在函数体的开始处; 在复合语句的开始处; 它的作用范围只是定义它的程序块。,23,2对于局部变量的补充说明 (1)不同函数中的变量可以同名,它们互不影响; (2)形式参数也属于局部变量; (3)main函数中定义的变量也只能在main函数中有效; (4)main函数中,不能引用其他函数中定义的局部变量。,24,局部变量与全局变量 局部变量-内部变量 定义:在函数内定义,只在本函数内有效 说明: main中定义的变量只在main中有效 不同函数中同名变量,占不同内存单元 形参属于局部变量 可定义在复合语句

14、中有效的变量 局部变量可用存储类型:auto register static (默认为auto),运行结果:5 4 3 2 1,25,3局部变量的初始值与初始化 自动变量定义时,所分配的存储单元中原来存放的值就是该变量的初始值,是一个不确定的值; 变量在必要时必须先赋值,后引用。 所谓变量的初始化就是在定义变量的同时,给该变量一个确定的值。 如: int i,s=0; for (i=1;i=10;i+) s=s+i;,26,5.3.2 全局变量 全局变量是指在任何函数之外定义的变量; 有效范围是从定义开始,直至整个程序结束; 定义一个全局变量的目的就是让多个函数可以共享; 全局变量的定义位置:

15、在函数外定义 注意: 1. 定义全局变量不能重名,但允许全局变量与某个函数内部的局部变量重名; 2. 在函数内部对变量的访问是指对局部变量的访问,也就是说,在函数内部,局部变量与全局变量重名时,全局变量暂时失去作用。,27,int a,b=3; main() int i,j; . char ch; float add(float x,float y) . ,全局变量定义举例:,28,float max,min; float average(float array, int n) int i; float sum=array0; max=min=array0; for(i=1;imax) max=arrayi; else if(arrayimin) min=arrayi; sum+=arrayi; return(sum/n); main() int i; float ave,score10; /*Input */ ave=average(score,10); printf(max=%6.2fnmin=%6.2fn average=%6.2fn,max,min,ave); ,29,p,q的作用范围,30,1全局变量的初始值 全局变量在编译阶段分配内存,在执行阶段不释放; 全局变量只进行一次初始化,并

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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