第8章函数省公共课一等奖全国赛课获奖课件.pptx
《第8章函数省公共课一等奖全国赛课获奖课件.pptx》由会员分享,可在线阅读,更多相关《第8章函数省公共课一等奖全国赛课获奖课件.pptx(51页珍藏版)》请在咨信网上搜索。
1、第8章 函 数C语言是经过函数来实现模块化程序设计。所以较大C语言应用程序,往往是由多个函数组成,每个函数分别对应各自功效模块。8.1 函数定义与调用函数定义与调用8.2 函数嵌套调用与递归调用函数嵌套调用与递归调用8.3 数组作为函数参数数组作为函数参数8.4 内部变量与外部变量内部变量与外部变量8.5 内部函数与外部函数内部函数与外部函数8.6 变量动态存放与静态存放变量动态存放与静态存放 Return第1页8.1 函数定义与调用函数定义与调用8.1.1 8.1.1 函数定义函数定义8.1.2 8.1.2 函数返回值与函数类型函数返回值与函数类型8.1.3 8.1.3 对被调用函数申明和函
2、数原型对被调用函数申明和函数原型8.1.4 8.1.4 函数调用函数调用8.1.5 8.1.5 函数形参加实参函数形参加实参 Return第2页8.1.1 函数定义函数定义函数概述:函数概述:v一个一个C程序可由一个主函数和若干个函数组成。程序可由一个主函数和若干个函数组成。任何函数(包含主函数任何函数(包含主函数main())都是由函数申)都是由函数申明和函数体两部分组成。明和函数体两部分组成。v程序执行从程序执行从main()函数开始,在函数开始,在main()函数中函数中结束。中间调用程序后要回到结束。中间调用程序后要回到main()函数中来。函数中来。v全部函数都是平行,一个函数并不隶
3、属于另一全部函数都是平行,一个函数并不隶属于另一个函数。函数之间能够相互调用。个函数。函数之间能够相互调用。v标准函数标准函数(库函数库函数)由系统提供,使用时需要加由系统提供,使用时需要加上头文件。上头文件。第3页案例案例8.1 定义一个函数,用于求两个数中大数。定义一个函数,用于求两个数中大数。/*功效:定义一个求较大数函数并在主函数中调用功效:定义一个求较大数函数并在主函数中调用*/运行过程:Inputtwonumbers:3587max=87_int max(int n1,int n2)/*定义一个函数定义一个函数max()*/return(n1n2?n1:n2);main()int
4、num1,num2;printf(input two numbers:n);scanf(%d%d,&num1,&num2);printf(“max=%dn”,max(num1,num2);/*函数调用函数调用*/getch();/*使程序暂停,按任一键继续使程序暂停,按任一键继续*/第4页1依据函数是否需要参数,可将函数分为无参函数和有参函数两种。(1)无参函数普通形式)无参函数普通形式类型标识符类型标识符 函数名函数名()申明部分;申明部分;语句部分;语句部分;charprintstar()Printf(“*”);main()printstar();*请看运行结果第5页(2)有参函数普通形式
5、)有参函数普通形式函数类型函数名(数据类型参数,数据类型参数2)申明语句部分;可执行语句部分;有参函数比无参函数多了一个参数表。调用有参函数时,有参函数比无参函数多了一个参数表。调用有参函数时,调用函数将赋予这些参数实际值。调用函数将赋予这些参数实际值。为了与调用函数提供实际参数区分开,将函数定义中参为了与调用函数提供实际参数区分开,将函数定义中参数表称为形式参数表,简称形参表。数表称为形式参数表,简称形参表。intmax(intx,inty)intz;z=xy?x:y;Return(z);形参表第6页2说明说明v函数定义不允许嵌套函数定义不允许嵌套。在在语语言言中中,全全部部函函数数(包包含
6、含主主函函数数main())都都是是平平行行。一一个个函函数数定定义义,能能够够放放在在程程序序中中任任意意位位置置,主主函函数数main()之之前前或或之之后后。但在一个函数函数体内,不能再定义另一个函数,即不能嵌套定义。但在一个函数函数体内,不能再定义另一个函数,即不能嵌套定义。v空函数空函数既无参数、函数体又为空函数。其普通形式为:既无参数、函数体又为空函数。其普通形式为:函数类型函数类型 函数名函数名()v在在老老版版本本C语语言言中中,参参数数类类型型申申明明允允许许放放在在函函数数申申明明部部分分第第2行行单独指定。单独指定。Returnintmax(x,y)intx,y;intz
7、;第7页8.1.2 函数返回值与函数类型函数返回值与函数类型语语言言函函数数兼兼有有其其它它语语言言中中函函数数和和过过程程两两种种功功效效,从从这这个个角角度度看,又可把函数分为有返回值函数和无返回值函数两种。看,又可把函数分为有返回值函数和无返回值函数两种。1函数返回值与函数返回值与return语句语句有参函数返回值,是经过函数中有参函数返回值,是经过函数中return语句来取得。语句来取得。(1)return语句普通格式:语句普通格式:return(返回值表示式返回值表示式);(2)return语语句句功功效效:返返回回调调用用函函数数,并并将将“返返回回值值表表示示式式”值带给调用函数
8、。值带给调用函数。注注意意:调调用用函函数数中中无无return语语句句,并并不不是是不不返返回回一一个个值值,而而是是一一个个不不确确定定值值。为为了了明明确确表表示示不不返返回回值值,能能够够用用“void”定定义义成成“无(空)类型无(空)类型”。Void printstar()printf(“*”);第8页2函数类型函数类型在在定定义义函函数数时时,对对函函数数类类型型申申明明,应应与与return语语句中、返回值表示式类型一致。句中、返回值表示式类型一致。假假如如不不一一致致,则则以以函函数数类类型型为为准准。假假如如缺缺省省函函数数类型,则系统一律按整型处理。类型,则系统一律按整型
9、处理。Returnmax(intx,inty)return(xy?x:y);良好程序设计习惯良好程序设计习惯:为了使程序含有良好可读性并:为了使程序含有良好可读性并降低犯错,凡不要求返回值函数都应定义为空类型;降低犯错,凡不要求返回值函数都应定义为空类型;即使函数类型为整型,也不使用系统缺省处理。即使函数类型为整型,也不使用系统缺省处理。int第9页8.1.3 对被调用函数申明和函数原型对被调用函数申明和函数原型 在ANSIC新标准中,采取函数原型方式,对被调用函数进行申明,其普通格式以下:函数类型函数类型 函数名函数名(数据类型数据类型 参数名参数名,数据类型数据类型 参数名参数名2);Re
10、turn语言同时又要求,在以下2种情况下,能够省去对被调用函数申明:(1)当被调用函数函数定义出现在调用函数之前时。因为在调用之前,编译系统已经知道了被调用函数函数类型、参数个数、类型和次序。(2)假如在全部函数定义之前,在函数外部(比如文件开始处)预先对各个函数进行了申明,则在调用函数中可缺省对被调用函数申明。第10页8.1.4 函数调用函数调用 在程序中,是经过对函数调用来执行函数体,其过程与其它语言子程序调用相同。语言中,函数调用普通形式为:函数名函数名(实际参数表实际参数表)切切记记:实参个数、类型和次序,应该与被调用函数所要求参数个数、类型和次序一致,才能正确地进行数据传递。在语言中
11、,能够用以下几个方式调用函数:(1)函函数数表表示示式式。函数作为表示式一项,出现在表示式中,以函数返回值参加表示式运算。这种方式要求函数是有返回值。(2)函函数数语语句句。C语言中函数能够只进行一些操作而不返回函数值,这时函数调用可作为一条独立语句。(3)函函数数实实参参。函数作为另一个函数调用实际参数出现。这种情况是把该函数返回值作为实参进行传送,所以要求该函数必须是有返回值。第11页说明说明:(1)调调用用函函数数时时,函函数数名名称称必必须须与与含含有有该该功功效效自自定定义函数名称完全一致。义函数名称完全一致。(2)实实参参在在类类型型上上按按次次序序与与形形参参,必必须须一一一一对
12、对应应和和匹匹配配。假假如如类类型型不不匹匹配配,C编编译译程程序序将将按按赋赋值值兼兼容容规规则则进进行行转转换换。假假如如实实参参和和形形参参类类型型不不赋赋值值兼兼容容,通通常常并并不不给给出出犯犯错错信信息息,且且程程序序依依然然继继续续执执行行,只只是是得得不不到到正正确确结结果。果。(3)假如实参表中包含多个参数,对实参求值次序)假如实参表中包含多个参数,对实参求值次序随系统而异。有系统按自左向右次序求实参值,有系统随系统而异。有系统按自左向右次序求实参值,有系统则相反。则相反。Turbo C和和MS C是按自右向左次序进行是按自右向左次序进行。Return第12页8.1.5 函数
13、形参加实参函数形参加实参函数参数分为形形参参和实实参参两种,作用是实现数据传送。形参出现在函数定义中,只能在该函数体内使用。发生函数调用时,调用函数把实参值复制1份,传送给被调用函数形参,从而实现调用函数向被调用函数数据传送。案例案例8.3 实参对形参数据传递。/*实参对形参数据传递。*/*案例代码文件名:AL7_3.C*/第13页void main()void s(int n);/*申明函数申明函数*/int n=100;/*定义实参定义实参n,并初始化,并初始化*/s(n);/*调用函数调用函数*/printf(n_s=%dn,n);/*输出调用后实参值,便于进行比较输出调用后实参值,便于
14、进行比较*/getch();/*/void s(int n)int i;printf(n_x=%dn,n);/*输出改变前形参值输出改变前形参值*/for(i=n-1;i=1;i-)n=n+i;/*改变形参值改变形参值*/printf(n_x=%dn,n);/*输出改变后形参值输出改变后形参值*/程序演示第14页说明:说明:(1)实实参参能能够够是是常常量量、变变量量、表表示示式式、函函数数等等。不不论论实实参参是是何何种种类类型型量量,在在进进行行函函数数调调用用时时,它它们们都都必必须须含含有有确确定定值值,方方便便把把这这些值传送给形参。些值传送给形参。所以,应预先用赋值、输入等方法,使
15、实参取得确定值。所以,应预先用赋值、输入等方法,使实参取得确定值。(2)形形参参变变量量只只有有在在被被调调用用时时,才才分分配配内内存存单单元元;调调用用结结束束时时,即刻释放所分配内存单元。即刻释放所分配内存单元。所所以以,形形参参只只有有在在该该函函数数内内有有效效。调调用用结结束束,返返回回调调用用函函数数后后,则不能再使用该形参变量。则不能再使用该形参变量。(3)实实参参对对形形参参数数据据传传送送是是单单向向,即即只只能能把把实实参参值值传传送送给给形形参参,而不能把形参值反向地传送给实参。而不能把形参值反向地传送给实参。(4)实参和形参占用不一样内存单元,即使同名也互不影响。)实
16、参和形参占用不一样内存单元,即使同名也互不影响。Return第15页8.2函数嵌套调用和递归调用8.2.1 函数嵌套调用函数嵌套调用函函数数嵌嵌套套调调用用是是指指,在在执执行行被被调调用用函函数数时时,被被调调用用函函数数又又调调用用了了其其它它函函数数。这这与与其其它它语语言言子子程程序序嵌嵌套套调调用用情情形形是是类类似似,其其关关系系可可表示如图表示如图7-1。第16页案例案例8.4 计算计算s=1k+2k+3k+N k /*案例代码文件名:案例代码文件名:AL7_4.C*/*功效:函数嵌套调用功效:函数嵌套调用*/#define K 4#define N 5long f1(int n
17、,int k)/*计算计算nk次方次方*/long power=n;int i;for(i=1;ik;i+)power*=n;return power;第17页long f2(int n,int k)/*计算计算1到到nk次方之累加和次方之累加和*/long sum=0;int i;for(i=1;i1)f=power(n-1)*n;else f=1;return(f);第20页main()int n;long y;printf(input a inteager number:n);scanf(%d,&n);y=power(n);printf(%d!=%ldn,n,y);getch();程序演
18、示程序演示Return第21页8.3 数组作为函数参数数组作为函数参数数组用作函数参数有两种形式:一个是把数组元素(又称下标变量)作为实参使用;另一个是把数组名作为函数形参和实参使用。8.3.1 数组元素作为函数参数数组元素作为函数参数 8.3.2 数组名作为函数形参和实参数组名作为函数形参和实参 Return第22页8.3.1 数组元素作为函数参数数组元素作为函数参数数组元素就是下标变量,它与普通变量并无区分。数组元素只能用作函数实参,其使用方法与普通变量完全相同:在发生函数调用时,把数组元素值传送给形参,实现单向值传送。案例8.6写一函数,统计字符串中字母个数。/*案例代码文件名:AL7_
19、6.C*/*功效:数组元素作为函数实参*/intisalp(charc)if(c=a&c=A&c=Z)return(1);elsereturn(0);第23页main()inti,num=0;charstr255;printf(Inputastring:);gets(str);for(i=0;stri!=0;i+)if(isalp(stri)num+;puts(str);printf(num=%dn,num);getch();程序演示第24页说明:(1)用数组元素作实参时,只要数组类型和函数形参类型一致即可,并不要求函数形参也是下标变量。换句话说,对数组元素处理是按普通变量对待。(2)在普通变
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 公共课 一等奖 全国 获奖 课件
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。