ImageVerifierCode 换一换
格式:PPTX , 页数:49 ,大小:507KB ,
资源ID:5439854      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/5439854.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     留言反馈    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(函数与宏定义公开课一等奖优质课大赛微课获奖课件.pptx)为本站上传会员【a199****6536】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

函数与宏定义公开课一等奖优质课大赛微课获奖课件.pptx

1、C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义第六章第六章函数与宏定义函数与宏定义 6.1函数概念函数概念 6.2变量作用域和存储类型变量作用域和存储类型 6.3内部函数与外部函数内部函数与外部函数 6.4递归函数设计和调用递归函数设计和调用 6.6综合范例综合范例 10/10/1第1页第1页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义6.1函数概念函数概念 C语言允许把问题设计成一个一个模块,程序通过调用模语言允许把问题设计成一个一个模块,程序通过调用模块功效来处理问题。这些模块通常都是通过函数来实现,块功效来处理问题。这些模块通

2、常都是通过函数来实现,又可称其为又可称其为函数模块函数模块。C语言中,函数可分为两类语言中,函数可分为两类:一类是由系统定义一类是由系统定义原则函数原则函数,又称为,又称为库函数库函数,其函数申,其函数申明普通是放在系统明普通是放在系统include目录下以目录下以.h为后缀头文献中,为后缀头文献中,如在程序中要用到某个库函数,必须在调用该函数之前如在程序中要用到某个库函数,必须在调用该函数之前用用#include命令将库函数信息包括到本程序命令将库函数信息包括到本程序中。中。另一类函数是另一类函数是自定义函数自定义函数,两种形式:,两种形式:第一个:第一个:函数申明、函数调用、函数定义。函数

3、申明、函数调用、函数定义。第二种:第二种:函数定义、函数调用。函数定义、函数调用。10/10/2第2页第2页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义6.1.1函数定义函数定义函数定义普通形式能够有两种。函数定义普通形式能够有两种。形式一:形式一:存存储储类类型型符符返返回回值值类类型型符符函函数数名名(形形参参阐阐明明表表)函数语句体函数语句体形式二:形式二:存存储储类类型型符符返返回回值值类类型型型型符符函函数数名名(形形参参表表)形参阐明;形参阐明;函数语句体函数语句体10/10/3第3页第3页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏

4、定义函数与宏定义阐明:阐明:1存储类型符存储类型符指是函数作用范围,它只有两种形式:指是函数作用范围,它只有两种形式:static和和extern。static阐明函数只能作用于其所在源文献,用阐明函数只能作用于其所在源文献,用static阐明阐明函数又称为函数又称为内部函数内部函数。extern阐明函数可被其它源文献中函数调用,用阐明函数可被其它源文献中函数调用,用extern阐明函数,又称为阐明函数,又称为外部函数外部函数。缺省缺省情况为情况为extern。2返返回回值值类类型型符符指指是是函函数数体体语语句句执执行行完完毕毕后后,函函数数返返回回值值类类型型,如如int,float,ch

5、ar等等等等,若若函函数数无无返返回回值,则用值,则用空类型空类型void来定义函数返回值。来定义函数返回值。缺省缺省情况为情况为int型。型。10/10/4第4页第4页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义3函数名函数名由任何合法标识符构成。提议将函数名命由任何合法标识符构成。提议将函数名命名与函数内容有一定关系。名与函数内容有一定关系。4在在第第一一个个函函数数定定义义形形式式中中,形形参参阐阐明明表表是是一一系系列列用逗号分开每个形参变量阐明。用逗号分开每个形参变量阐明。如:如:intx,inty,intz这表示形参变量有三个:这表示形参变量有三个:

6、x,y,z。它们类型都是。它们类型都是int型。型。在在第第二二种种函函数数定定义义形形式式中中,形形参参表表是是一一系系列列用用逗逗号分开形参变量。如:号分开形参变量。如:x,y,z5函数语句体函数语句体是放在一对花括号是放在一对花括号中,由局部数据中,由局部数据类型描述和功效实现两部分构成。类型描述和功效实现两部分构成。10/10/5第5页第5页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义6函数返回语句函数返回语句形式有下列两种:形式有下列两种:函数无返回值情况:函数无返回值情况:return;函数有返回值情况:函数有返回值情况:return(表示式值表示式

7、值);在在第第种种情情况况下下要要注注意意“表表示示式式值值”类类型型必必须须与与函函数数返回值类型相一致。返回值类型相一致。比比如如:求求两两个个任任意意整整数数绝绝对对值值和和,用用函函数数abs_sum()实实现。现。/*直接调用库函数来计算直接调用库函数来计算m和和n绝对值绝对值*/intabs_sum(intm,intn)return(abs(m)+abs(n);/*函数函数abs()是在头文献是在头文献math.h中申明中申明*/10/10/6第6页第6页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义函数定义下列:函数定义下列:intabs_sum(i

8、ntm,intn)if(m0)m=-m;if(n0)n=-n;return(m+n);6.1.2函数申明和调用函数申明和调用一函数申明一函数申明函数申明普通形式:函数申明普通形式:存存储储类类型型符符返返回回值值类类型型符符函函数数名名(形形参参阐阐明明表表);如:如:intabs-sun(intm,intn);10/10/7第7页第7页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义二函数调用二函数调用函数调用是通过函数调用语句来实现,分两种形式:函数调用是通过函数调用语句来实现,分两种形式:无返回值情况:无返回值情况:函数名函数名(实参表实参表);有返回值情况:

9、有返回值情况:变量名函数名变量名函数名(实参表实参表);该变量名类型必须与函数返回值类型相同。该变量名类型必须与函数返回值类型相同。函函数数调调用用时时都都会会去去执执行行函函数数语语句句中中内内容容,函函数数执执行行完完毕毕后,回到函数调用处,继续执行下面语句。后,回到函数调用处,继续执行下面语句。10/10/8第8页第8页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义6.1.3函数传值方式函数传值方式函数传值方式函数传值方式:采用实参表将每一个实参值相应地传递给每一个形参采用实参表将每一个实参值相应地传递给每一个形参变量,形参变量在接受到实参表传过来值时,会在

10、内存变量,形参变量在接受到实参表传过来值时,会在内存暂暂时开辟新空间时开辟新空间,以保留形参变量值,当函数执行完毕时,以保留形参变量值,当函数执行完毕时,这些这些暂时开辟内存空间会被释放暂时开辟内存空间会被释放,并且形参值在函数中无,并且形参值在函数中无论是否发生改变,论是否发生改变,都不会影响到实参变量值改变都不会影响到实参变量值改变,这就是,这就是函数传值方式。函数传值方式。自定义函数在程序中使用顺序有两种形式:自定义函数在程序中使用顺序有两种形式:先进行函数申明,再进行函数调用,先进行函数申明,再进行函数调用,函数定义放在函数定义放在函数调用之后。函数调用之后。函数申明在函数调用之前。函

11、数申明在函数调用之前。函数定义放在函数调用之前。函数定义放在函数调用之前。10/10/9第9页第9页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义【例例6-1】编编程程序序,通通过过调调用用函函数数abs-sum(),求求任任意意两个整数绝对值和。两个整数绝对值和。/*exam6_1.c调用函数求两整数绝对值和调用函数求两整数绝对值和*/#includeintabs_sum(intm,intn);main()intx,y,z;scanf(%d%d,&x,&y);z=abs_sum(x,y);printf(sumis%d,z);intabs_sum(intm,int

12、n)if(m0)m=-m;if(n0)n=-n;returnm+n;程序运营结果程序运营结果程序运营结果程序运营结果:712712 sumis19sumis1910/10/10第10页第10页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义用传值方式调用函数时,实参也能够是函数调用语句用传值方式调用函数时,实参也能够是函数调用语句【例【例6-2】求任意三个数绝对值和。】求任意三个数绝对值和。/*exam6_2.c调用函数求三个整数绝对值和调用函数求三个整数绝对值和*/#includeintabs_sum(intm,intn);main()intx,y,z,sum;s

13、canf(%d%d%d,&x,&y,&z);sum=abs_sum(abs_sum(x,y),z);printf(sumis%d,sum);intabs_sum(intm,intn)if(m0)m=-m;if(n0)n=-n;returnm+n;程序运营结果程序运营结果:7125 sumis2410/10/11第11页第11页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义注意:注意:对于有返回值函数,调用时若没有把它赋给某个变量,对于有返回值函数,调用时若没有把它赋给某个变量,仍然是能够,只是函数返回值有也许会被丢失。仍然是能够,只是函数返回值有也许会被丢失。【例

14、【例6-3】求任意两数乘积。求任意两数乘积。自定义一个函数自定义一个函数mul(),用于求两数乘积,程序:,用于求两数乘积,程序:/*exam6_3.c求两个数乘积求两个数乘积*/#includefloatmul(floata,floatb);main()floatx,y,z;scanf(%f%f,&x,&y);z=mul(x,y);/*/x=x+10;y=y-10;mul(x,y);/*/10/10/12第12页第12页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义x=x*2;y=y*2;printf(z=%f,mul(%f,%f)=%fn,z,x,y,mul(

15、x,y);/*/floatmul(floata,floatb)returna*b;程序运营结果程序运营结果:56 z=30.000000,mul(30.000000,-8.000000)=-240.00000010/10/13第13页第13页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义程序阐明程序阐明:注释注释处调用函数后返回值赋给变量处调用函数后返回值赋给变量z。注释注释处调用函数后返回值没有赋给任何变量,处调用函数后返回值没有赋给任何变量,函数返回值被丢失。函数返回值被丢失。注释注释处调用函数后返回值成为了处调用函数后返回值成为了printf()函数参数。函

16、数参数。10/10/14第14页第14页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义6.2变量作用域和存储类型变量作用域和存储类型 一变量作用域一变量作用域 变量作用域:指是变量有效范围,针对变量不同作用域,可把变量分为局部变量和全局变量。局部变量局部变量:在函数内部或某个控制块内部定义变量为局:在函数内部或某个控制块内部定义变量为局部变量,局部变量有效范围只限于部变量,局部变量有效范围只限于本函数内部本函数内部,退出函,退出函数,该变量自动失效。数,该变量自动失效。全局变量全局变量:在函数外面定义变量称为全局变量,全局变量:在函数外面定义变量称为全局变量,全局

17、变量作用域是从该变量定义位置开始,直到源文献结束。在作用域是从该变量定义位置开始,直到源文献结束。在同同一文献一文献中所有函数都能够引用全局变量。中所有函数都能够引用全局变量。10/10/15第15页第15页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义局部变量和全局变量局部变量和全局变量作用域作用域如图所表示:如图所表示:10/10/16第16页第16页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义【例【例6-4】变量作用域应用举例,阅读下面程序,变量作用域应用举例,阅读下面程序,注意区别局部变量和全局变量作用域。注意区别局部变量和

18、全局变量作用域。/*exam6_4.c变量作用域举例变量作用域举例*/#includevoida(void);voidb(void);voidc(void);intx=1;main()intx=5;printf(localxinouterscopeofmainis%dn,x);10/10/17第17页第17页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义intx=7;printf(localxininnerscopeofmainis%dn,x);printf(localxinouterscopeofmainis%dn,x);a();b();c();a();b();

19、c();前三次输出前三次输出结果结果:localxinouterscopeofmainis5localxininnerscopeofmainis7localxinouterscopeofmainis510/10/18第18页第18页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义printf(localxinmainis%dn,x);getchar();return0;voida(void)intx=25;printf(nlocalxinais%dafterenteringan,x);+x;printf(localxinais%dbeforeexitingan,x)

20、;10/10/19第19页第19页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义voidb(void)staticintx=50;printf(nlocalstaticxis%donenteringbn,x);+x;printf(localstaticxis%donexitingbn,x);voidc(void)printf(nglobalxis%donenteringcn,x);x*=10;printf(globalxis%donexitingcn,x);10/10/20第20页第20页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义

21、程序运营结果程序运营结果:后后6次函数调用次函数调用localxinais25afterenteringalocalxinais26beforeexitingalocalstaticxis50onenteringblocalstaticxis51onexitingbglobalxis1onenteringcglobalxis10onexitingclocalxinais25afterenteringalocalxinais26beforeexitingalocalstaticxis51onenteringblocalstaticxis52onexitingbglobalxis10onenter

22、ingcglobalxis100onexitingc最后一次输出:最后一次输出:localxinmainis510/10/21第21页第21页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义二变量存储类型二变量存储类型变量存储类型:指是变量变量存储类型:指是变量存储属性存储属性,它阐明,它阐明变量占用存变量占用存储空间区域。储空间区域。在内存中,供用户使用存储区由在内存中,供用户使用存储区由程序区程序区、静态存储区静态存储区和和动态存储区动态存储区三部分构成。三部分构成。变量存储类型有四种:变量存储类型有四种:auto型、型、register型、型、static型和

23、型和extern型。型。auto型型变量存储在内存变量存储在内存动态存储区动态存储区。register型变量保留在型变量保留在存储器存储器中。中。static型变量和型变量和extern型变量型变量存储在存储在静态存储器静态存储器。10/10/22第22页第22页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义局部变量局部变量存储类型缺省值为存储类型缺省值为auto型型。全局变量全局变量存储类型缺省值为存储类型缺省值为extern型型。auto型变量和型变量和register型变量只用于定义局部变量。型变量只用于定义局部变量。static型变量即可定义成局部变量,又

24、可定义成全局变量。型变量即可定义成局部变量,又可定义成全局变量。【例【例6-5】设计一个函数:设计一个函数:longfac(intn),可用来计算,可用来计算15阶乘。阶乘。分析:可在函数中定义一个分析:可在函数中定义一个static型变量,用来保留型变量,用来保留上次计算结果。上次计算结果。10/10/23第23页第23页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义/*exam6_5.c用用static型变量保留上次阶乘值型变量保留上次阶乘值*/#includelongfac(intn)staticintf=1;f=f*n;returnf;main()inti

25、;for(i=1;i=5;i+)printf(%d!=%ldn,i,fac(i);程序运营结果程序运营结果:1!=12!=23!=64!=245!=120局部变量局部变量局部变量局部变量f f被定义成被定义成被定义成被定义成staticstatic型,因此,型,因此,型,因此,型,因此,它只在该函数第它只在该函数第它只在该函数第它只在该函数第1 1次被调用时候初次被调用时候初次被调用时候初次被调用时候初始化其值为始化其值为始化其值为始化其值为1 1,以后再调用该函数,以后再调用该函数,以后再调用该函数,以后再调用该函数时,不再进行初始化,而是使用时,不再进行初始化,而是使用时,不再进行初始化,

26、而是使用时,不再进行初始化,而是使用上一次调用值。上一次调用值。上一次调用值。上一次调用值。10/10/24第24页第24页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义6.3内部函数与外部函数内部函数与外部函数 一内部函数一内部函数若函数存储类型为若函数存储类型为static型,则称其为型,则称其为内部函数内部函数或称或称静态函静态函数数,它表示在同一个程序中(由多个源文献构成),该函,它表示在同一个程序中(由多个源文献构成),该函数只能在一个文献中存在,在其它文献中不可使用。数只能在一个文献中存在,在其它文献中不可使用。如:如:staticintfun-nam

27、e();内部函数只能被其所在源文献调用。内部函数只能被其所在源文献调用。二外部函数二外部函数若函数存储类型定义为若函数存储类型定义为extern型,则称其为型,则称其为外部函数外部函数,它,它表示该函数能被其它源文献调用。函数缺省存储类型为表示该函数能被其它源文献调用。函数缺省存储类型为extern型。型。注意:注意:在需要用到外部函数文献中,其函数申明必须用在需要用到外部函数文献中,其函数申明必须用extern进行阐明。进行阐明。10/10/25第25页第25页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义比如:有两个源文献比如:有两个源文献file1.c和和f

28、ile2.c下列所表下列所表示:示:/*file1.c调用外部函数调用外部函数*/#includeintmod(inta,intb);externintadd(intm,intn);/*外部函数申明外部函数申明*main()intx,y,result;scanf(“%d%d”,&x,&y);result=add(x,y);/*调用外部函数调用外部函数*/if(result0)result=result-mod(x,y);printf(“result=%dn”,result);10/10/26第26页第26页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义intmod

29、(inta,intb)return(a%d);/*file2.c外部函数外部函数*/externintadd(intm,intn)return(m+n);阐明:阐明:1在文献在文献1(file1.c)中函数申明:中函数申明:intmod(inta,intb);事实上相称于:事实上相称于:externintmod(inta,intb);10/10/27第27页第27页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义2在文献在文献2(file2.c)中函数定义:中函数定义:externintadd(intm,intn)return(m+n);事实上相称于:事实上相称于:

30、intadd(intm,intn)return(m+n);3由多个源文献构成一个程序时,由多个源文献构成一个程序时,main()函数只能函数只能出现在一个源文献中。出现在一个源文献中。10/10/28第28页第28页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义4多个源文献连接方式有三种:多个源文献连接方式有三种:将各源文献分别编译成目的文献,得到多个目的文献将各源文献分别编译成目的文献,得到多个目的文献(.obj后缀),然后用连接命令(后缀),然后用连接命令(tlink)把多个)把多个.obj文献文献连接起来,在连接起来,在Turboc上用下列命令:上用下列命令

31、:tlinkfile1.obj+file2.obj+filen.obj生成一个生成一个file1.exe可执行文献。可执行文献。建立项目文献(建立项目文献(.prj后缀),详细操作可参阅各种后缀),详细操作可参阅各种C编译手册。编译手册。使用文献包括命令。使用文献包括命令。10/10/29第29页第29页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义6.4递归函数设计和调用递归函数设计和调用 C语言中一个函数中语句能够是对另一个函数调用。语言中一个函数中语句能够是对另一个函数调用。函数嵌套调用函数嵌套调用图例:图例:调用过程按图中箭头所表示方向和顺序进行,属于一个

32、调用过程按图中箭头所表示方向和顺序进行,属于一个线性调用关系线性调用关系,每次调用后,最后返回到原调用点,继,每次调用后,最后返回到原调用点,继续执行下列语句。续执行下列语句。10/10/30第30页第30页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义C语言中还允许在函数中语言中还允许在函数中调用本身调用本身,或函数之间互,或函数之间互相调用,这种调用方式称之为相调用,这种调用方式称之为递归递归。递归又分为。递归又分为直直接递归调用接递归调用和和间接递归调用间接递归调用。直接递归调用;函数直接调用本身。直接递归调用;函数直接调用本身。间接递归调用:函数互相调用对

33、方。间接递归调用:函数互相调用对方。直接递归:直接递归:inttemp(intx)inty,z;z=temp(y);10/10/31第31页第31页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义间接递归:间接递归:显然,递归有也许陷入无限递归状态,最后造成错误发显然,递归有也许陷入无限递归状态,最后造成错误发生。因此,生。因此,设计一个递归问题必须具备两个条件设计一个递归问题必须具备两个条件:1后一部分与原始问题类似。后一部分与原始问题类似。2后一问题是原始问题简化。后一问题是原始问题简化。10/10/32第32页第32页C C 程序设计基础教程程序设计基础教程第

34、六章第六章函数与宏定义函数与宏定义【例【例6-6】编程,从键盘输入一个正整数编程,从键盘输入一个正整数n,求,求n!。n!数字表示式为:数字表示式为:n!=定义一个求定义一个求n!函数:函数:longfac(intn)longfac(intn)longresult;if(n=0|n=1)result=1;elseresult=n*fac(n-1);return(result);10/10/33第33页第33页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义完整程序下列:完整程序下列:/*exam6_6.c用递归法求用递归法求n!*/#includelongfac(i

35、ntn)longresult;if(n=0|n=1)result=1;elseresult=n*fac(n-1);returnresult;main()intx;longf;10/10/34第34页第34页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义scanf(%d,&x);if(x1)设计一个函数:设计一个函数:longfibonacci(intn)用于计算数列用于计算数列中第中第n项值,项值,10/10/36第36页第36页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义程序下列所表示:程序下列所表示:/*exam6_7.c求第求

36、第n项项Fibonacci数列值数列值*/#includelongfibonacci(intn);main()intx=0;longresult;doresult=fibonacci(x);printf(fibonacci(%d)=%ldn,x,result);scanf(%d,&x);while(x!=-1);10/10/37第37页第37页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义longfibonacci(intn)if(n=0|n=1)returnn;elsereturnfibonacci(n-1)+fibonacci(n-2);程序运营结果程序运营结

37、果程序运营结果程序运营结果:fibonacci(0)=0fibonacci(0)=03 3 fibonacci(3)=2fibonacci(3)=24 4 fibonacci(4)=3fibonacci(4)=36 6 10/10/38第38页第38页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义以以x=4为例,下图阐明了为例,下图阐明了fibonacci函数是如何计算函数是如何计算fibonacci(4)。图中把。图中把fibonacci简写成简写成f。10/10/39第39页第39页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义6

38、.6综合范例综合范例【例【例6-12】在屏幕上画一个在屏幕上画一个1818大小棋盘。大小棋盘。程序下列:程序下列:/*exam6_12.c在屏幕上画一个棋盘在屏幕上画一个棋盘*/#include#include#include/*定义画棋盘所需制表符定义画棋盘所需制表符*/#defineLU0 xda/*左上角左上角*/#defineRU0 xbf/*右上角右上角*/#defineLD0 xc0/*左下角左下角*/#defineRD0 xd9/*右下角右下角*/#defineL0 xc3/*左边左边*/#defineR0 xb4/*右边右边*/10/10/40第40页第40页C C 程序设计基

39、础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义#defineU0 xc2/*上边上边*/#defineD0 xc1/*下边下边*/#defineCROSS0 xc5/*十字叉十字叉*/*棋盘左上角坐标棋盘左上角坐标*/#defineMAP_X5#defineMAP_Y5voiddraw_cross(intx,inty);voiddraw_map();main()textmode(C40);draw_map();10/10/41第41页第41页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义/*函数定义函数定义:*/voiddraw_map()/*画棋盘画

40、棋盘*/inti,j;for(i=0;i19;i+)for(j=0;j19;j+)draw_cross(i,j);voiddraw_cross(intx,inty)gotoxy(x+MAP_X,y+MAP_Y);textcolor(GREEN);if(x=0&y=0)putch(LU);/*画左上角画左上角*/return;10/10/42第42页第42页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义if(x=0&y=18)putch(LD);/*画左下角画左下角*/return;if(x=18&y=0)putch(RU);/*画右上角画右上角*/return;i

41、f(x=18&y=18)putch(RD);/*画右下角画右下角*/return;10/10/43第43页第43页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义if(x=0)putch(L);/*画左边画左边*/return;if(x=18)putch(R);/*画右边画右边*/return;if(y=0)putch(U);/*画上边画上边*/return;10/10/44第44页第44页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义if(y=18)putch(D);/*画下边画下边*/return;putch(CROSS);/*画十

42、字叉画十字叉*/程序中程序中宏定义制表符值宏定义制表符值可从可从ASC码表中查得,如:码表中查得,如:0 xbf为十六进制表示,它代表右上角制表符为十六进制表示,它代表右上角制表符“”。该程序必须在纯该程序必须在纯DOS模式下运营,其运营结果是在屏模式下运营,其运营结果是在屏幕上显示一个绿色幕上显示一个绿色1818大小方格棋盘,大小方格棋盘,如后图所表示。如后图所表示。10/10/45第45页第45页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义该程序显示一个绿色该程序显示一个绿色1818大小方格棋盘大小方格棋盘10/10/46第46页第46页C C 程序设计基础

43、教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义【例【例6-13】将一个字符串字符反向输出到屏幕。将一个字符串字符反向输出到屏幕。采用递归函数调用办法,程序下列:采用递归函数调用办法,程序下列:/*exam6_13.c反向显示字符串反向显示字符串*/#include#includevoidbackwards(chars,intindex);/*函数申明函数申明*/main()charstr80;/*定义字符数组定义字符数组*/intindex=0;strcpy(str,Showthisstring.);/*字符串拷贝字符串拷贝*/backwards(str,index);/*函数调用函

44、数调用*/10/10/47第47页第47页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义voidbackwards(chars,intindex)/*函数定义函数定义*/if(sindex)printf(%c,sindex);/*输出字符输出字符*/backwards(s,index+1);/*递归调用递归调用*/printf(%c,sindex);/*输出字符输出字符*/程序运营结果程序运营结果:Showthisstring.gnirtssihtwohS10/10/48第48页第48页C C 程序设计基础教程程序设计基础教程第六章第六章函数与宏定义函数与宏定义小

45、小结:简介了函数定义和传值调用函数使用办法简介了函数定义和传值调用函数使用办法。注意:若用全局变量作为函数参数,则在函数中能够注意:若用全局变量作为函数参数,则在函数中能够使得该全局变量值发生改变。使得该全局变量值发生改变。对于递归函数设计一定要有可使递归结束条件,不然对于递归函数设计一定要有可使递归结束条件,不然会使程序产生无限递归。会使程序产生无限递归。使用预处理命令时,要注意下列几点:使用预处理命令时,要注意下列几点:1宏替换定义末尾不能使用分号宏替换定义末尾不能使用分号“;”。2在有参数宏定义中,参数加括号和不加括号有时会在有参数宏定义中,参数加括号和不加括号有时会有区别。有区别。3使用文献包括时,要避免出现变量和函数发生重定使用文献包括时,要避免出现变量和函数发生重定义现象。义现象。4要区别条件编译与条件语句作用。要区别条件编译与条件语句作用。10/10/49第49页第49页

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

关于我们      便捷服务       自信AI       AI导航        获赠5币

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

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

gongan.png浙公网安备33021202000488号   

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

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服