收藏 分销(赏)

第5章函数与预处理省名师优质课赛课获奖课件市赛课一等奖课件.ppt

上传人:天**** 文档编号:10604000 上传时间:2025-06-04 格式:PPT 页数:43 大小:395.54KB 下载积分:12 金币
下载 相关 举报
第5章函数与预处理省名师优质课赛课获奖课件市赛课一等奖课件.ppt_第1页
第1页 / 共43页
第5章函数与预处理省名师优质课赛课获奖课件市赛课一等奖课件.ppt_第2页
第2页 / 共43页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,本资料仅供参考,不能作为科学依据。谢谢,第五章 函数与预处理,5.1,概述,模块化程序设计,基本思想:将一个大程序按功效分割成一些小模块,特点:,各模块相对独立、功效单一、结构清楚、接口简单,控制了程序设计复杂性,提升元件可靠性,缩短开发周期,防止程序开发重复劳动,易于维护和功效扩充,开发方法:,自上向下,逐步分解,分而治之,第1页,C是模块化程序设计语言,C程序结构,C,是,函数式,语言,必须有且只能有一个名为,main,主函数,C,程序执行总是,从main函数开始,在main中结束,函数,不能嵌套定义,能够嵌套调用,第2页,函数分类,从用户角度,标准函数(库函数):由系统提供,用户自定义函数,从函数形式,无参函数,有参函数,使用,库函数,应注意:,1、函数功效,2、函数参数数目和次序,及各参数意义和类型,3、函数返回值意义和类型,4、需要使用包含文件,第3页,函数定义,普通格式,正当标识符,函数返回值类型,缺省,int,型,无返回值,void,函数体,函数类型 函数名,(,数据类型 变量名1,数据类型 变量名n,),说明部分,语句部分,例,空函数,dummy(),函数体为空,例 无参函数,printstar(),cout“*n”;,或,printstar(,void,),couty?x:y;,return(z);,例 有参函数,int max,(int x,int y,),int z;,z=xy?x:y;,return(z);,第4页,函数原型(函数申明),函数原型普通形式:,数据类型 函数名(参数类型说明列表);,功效:当对一个函数调用出现在该函数定义之前时,,必须对函数进行原型申明。,#include,int and(int a,int b);,void main(),int x,y,s;,cinxy;,s=and(x,y);,coutsab;,c=add(a,b);,coutsum is“c;,float add(float x,float y),float z;,z=x+y;,return(z);,例 函数申明举例,#include,float add(float x,float y),float z;,z=x+y;,return(z);,main(),float a,b,c;,coutab;,c=add(a,b);,coutsum is“c;,被调函数出现在主调函数,之前,无须进行函数申明,第6页,函数调用,调用形式,函数名(实参表);,说明:,实参加形参,个数相等,,,类型一致,,,按次序一一对应,实参表求值次序,因系统而定(,),第7页,调用方式,函数语句:,例 printstar();,函数表示式:,例 m=max(a,b)*2;,函数参数:,例 couty?x:y;,return(z);,例 比较两个数并输出大者,void main(),int a,b,c;,cinab;,c=,max(a,b);,coutMax is“y?x:y;,return(z);,形参,实参,第9页,说明:,实参必须有确定值,形参必须指定类型,形参加实参,类型一致,个数相同,若形参加实参类型不一致,自动按形参类型转换,函数调用转换,形参在函数被调用前不占内存;,函数调用时为形参分配内存;调用结束,内存释放,函数参数及其传递方式,形参加实参,形式参数:定义函数时函数名后面括号中变量名,实际参数:调用函数时函数名后面括号中表示式,第10页,参数传递方式,值传递,方式,(值调用),方式:函数调用时,为形参分配单元,并将实参值,复制,到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值,特点:,形参加实参占用,不一样,内存单元,单向,传递,第11页,调用结束:,7,11,x:,y:,例 交换两个数,#include,void main(),int x=7,y=11;,cout x“t”yendl;,coutswapped:n;,swap(x,y);,coutx“t”yendl;,swap(,int a,int b,),int temp;,temp=a;a=b;b=temp;,/cout“a=“a b=“,第12页,引用调用,方式:使用“引用”作为函数参数,特点:,形参加实参占用,一样,存放单元,“双向”,传递,方法:把形残申明为引用类型,即在形参名前加上&标示符。调用函数时实参要用变量名,将实参变量赋给形参引用。,第13页,#incude,void swap(int&u,int&v),int temp=v;,v=u;,u=tem;,void main(),int a,b;,cinab;,couta”t”b;,cout“swapped:n”;,swap(a,b);,couta”t”ab;,c=max(a,b);,coutMax is cy?x:y;,return(z);,第16页,指针与函数,指针作为,函数参数,以数据地址作为实参调用一个函数,参数传递不是数据本身,而是数据地址。,注意:,(1)在主调函数中,要以指向变量指针,即变量存放地址作为实参来调用另一个函数。,(2)被调用函数形参必须是能够接收地址值指针变量,而它数据类型应与被传送数据类型保持一致。,第17页,例,:,#include,swap(int*p1,int*p2),int p;,p=*p1;,*p1=*p2;,*p2=p;,void main(),int a,b;,cinab;,cout“a=”a“b=”bendl;,cout“swap:n”;,swap(,cout“a=”a“b=”bendl;,int*p;,p=p1;,p1=p2;,p2=p;,第18页,函数调用中数组传递,使用数组名作为实参调用函数,在被调用函数中,以指针变量作为形参接收数组地址,该指针被赋予数组地址之后,就指向了数组存放空间。,#include,void main(),int a10,small;,void input(int*s,int n);,int min(int*s,int n);,input(a,10);,small=min(a,10);,cout“minimum is”smallendl;,void input(int*s,int n),cout“please enter”n“integers:”endl;,for(int i=0;isi;,int min(int*s,int n),int min,i;,min=*s;for(i=1;in;i+),if(simn;,result=(*pf)(m,n);,cout“result=”resultendl;,int func(int a,int b),return a+b;,指针函数,指针函数是指返回值为指针函数。如:,int*pf(int x,int y);,第21页,main()函数,f1()函数,f2()函数,void main(),调用f1()函数,f1(),调用f2()函数,f2(),return();,函数嵌套调用,函数嵌套调用和递归调用,第22页,假如在一个函数调用过程中直接或间接地对自己进行了调用,这么调用形式就是函数递归调用,这个函数就称为递归函数。递归函数分为直接递归和间接递归。,递归调用定义,第23页,main()函数,f1()函数,f2()函数,void main(),调用f1()函数,f1(),调用f2()函数,f2(),return();,函数直接递归调用,调用f2函数,第24页,main()函数,f1()函数,f2()函数,void main(),调用f1()函数,f1(),调用f2()函数,f2(),return();,函数间接递归调用,调用f1函数,第25页,递归函数编写方法,分治法:分析问题,给出问题求解递归定义。,递归定义,基本项,归纳项,描述了一个或几个递归过程终止状态,描述了怎样从当前状态到终止状态转化,实质,:当一个复杂问题能够分解成若干个子问题来处理时,其中一些问题与原问题有相同特征属性,则可利用和原问题相同分析处理方法(函数开启自己最新副原来处理这个较小问题);反之,这些问题处理了,原问题也就迎刃而解了。,归纳项就是描述这种原问题和子问题之间转化关系。,第26页,举例 编写函数计算,n,阶乘。,方法一,:迭代法。,n!=1*2*3*n,#include,long fact(long n),return(f);,long f=1;,for(int i=1;it;,a=fact(t);,coutt“!=”a1,方法二,:递归法。,递归定义:,long fact(long n),if(n=0|n=1),return(1);,else return(fact(n-1)*n);,5!,5*4!,4*3!,3*2!,2*1!,1,2*1,3*2,4*6,5*24,120,回推,递推,未知,已知,未知,第28页,5.6 作用域,5.6.1.作用域,1.函数原型作用域,函数原型中所作函数参数申明作用域:起始于函数原型说明左括号处,结束于函数原型说明右括号处。,2.块作用域,块:用括号括起来一段代码区域。,作用区域:起始于标识符被定义地方,结束于块右括号。,3.函数作用域,作用区域:起始于函数中标识符定义地方,结束于函数体右括号。,4.类作用域,5.文件作用域,在函数或类之外说明标识符含有文件作用域。,作用区域:从说明点开始到文件末尾处。,第29页,#include,int i;,void main(),i=5;,int i;,i=7;,cout“i=”iendl;,cout“i=”ib?a:b;,cout“c=”cy?x:y;,return z;,void main(),coutmax(a,b)endl;,int a=13,b=-8;,例:,extern int a,b;,定义,说明,次数:只能1次 可说明屡次,位置:全部函数之外 函数内或函数外,分配内存:分配内存,可初始化 不分配内存,不可初始化,第34页,全局变量为函数间传递数据提供了一个新方法。,#include,int max,min;,void find(int*s,int n),max=min=*s;,for(int i=0;isi)min=si;,if(maxsi)max=si;,void main(),int a5=34,2,56,4,27;,find(a,5);,cout“min=”min“,max=”max;,应尽可能少使用全局变量,因为:,全局变量在程序全部执行过程中占用存放单元,降低了函数通用性、可靠性,可移植性,降低程序清楚性,轻易犯错,第35页,5.7 变量存放类型,5.7.1 变量存放类型,程序区,静态存放区,动态存放区,全局变量、局部静态变量,形参变量,局部动态变量(auto register),函数调用现场保护和返回地址等,存放方式,静态存放:程序运行期间分配固定存放空间,动态存放:程序运行期间依据需要动态分配存放空间,内存用户区,第36页,对一个变量定义,需要指出两种属性:存放类型和数据类型。所以,变量普通定义形式是:,存放类型 数据类型 变量名;,变量存放类型要求了变量存在时间,即生存期。,详细有四种存放类型:,自动类(auto),存放器类(register),静态类(static),外部类(extern),生存期,静态变量:从程序开始执行到程序结束,动态变量:从包含该变量定义函数开始执行至函数执行结束,第37页,5.7.2 局部变量存放方式,1.自动(auto)存放方式,auto int a;,说明:,自动变量作用范围局限于定义它函数。,关键字auto通常被缺省,不做专门说明局部变量均为自动变量。,在不一样函数中自动变量能够使用相同名称,它们类型能够相同或相异,彼此互不干扰。,自动变量是随函数调用而存在和消失,存放在动态存放区,第38页,2.静态(static)存放方式,static int a;,说明:,定义时使用关键字static说明局部变量称为,静态局部变量,。,静态局部变量属于静态存放类型,被分配在静态存放区。对静态局部变量初始化是在编译阶段完成,运行时即使所在函数调用结束,其所占空间也不被释放,仍保留其值。以后在每次调用所在函数时,不再对其初始化而是直接使用上次调用完成时结果。,若静态局部变量没有赋初值,在编译时自动被赋值为0。,静态局部变量作用范围局限于定义它函数。即使在内存中存在,其它函数也不得使用。,第39页,#include,int f(int a),auto int b=0;,static int c=3;,b+;c+;,return(a+b+c);,void main(),int a=2,i;,for(i=0;i3;i+),coutf(a)endl;,例:自动变量与静态局部变量,第40页,3.存放器(register)存放方式,register int a;,说明:,存放器变量与自动变量性质基本相同,也含有局部性和动态性。,只有自动变量和形参能够作为存放器变量,其它变量(全局变量、局部静态变量)不能够。,存放器变量数目有限制,不能定义太多。,第41页,5.7.3 全局变量存放方式,全局变量采取静态存放方式,放在程序静态存放区。,1.,外部全局变量,说明:,未加尤其说明全局变量均是外部,能被其它文件函数所使用。但在引用它其它文件中,需用关键字extern加以说明,如:,extern int a;,2.内部全局变量,使用关键字static说明全局变量是内部,其作用域为本文件,其它文件不能使用该变量。如:,static int a;,第42页,变量存放类型,静态,动态,存放方式,程序整个运行期间,函数调用开始至结束,生存期,编译时赋初值,,只赋一次,每次函数调用时,赋初值,自动赋初值0或空字符,不确定,未赋初值,静态存放区,动态区,存放区,存放器,局部变量,外部变量,作用域,定义变量函数或复合语句内,本文件,其它文件,register,局部,static,auto,外部,static,外部,存放类别,第43页,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服