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

开通VIP
 

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

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

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

注意事项

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

j8函数与变量省公共课一等奖全国赛课获奖课件.pptx

1、 北京理工大学计算机学院北京理工大学计算机学院第八章第八章 函数与变量函数与变量李李 书书 涛涛 10/10/1第1页 北京理工大学计算机学院北京理工大学计算机学院目录目录1 函数函数 1.1.函数定义函数定义函数定义函数定义 2.2.函数参数与返回值函数参数与返回值函数参数与返回值函数参数与返回值 3.3.函数申明和调用函数申明和调用函数申明和调用函数申明和调用 4.4.函数递归调用函数递归调用函数递归调用函数递归调用 5.5.外部函数与内部函数外部函数与内部函数外部函数与内部函数外部函数与内部函数2 变量作用域和存放类型变量作用域和存放类型 1.1.变量作用域变量作用域变量作用域变量作用域

2、 2.2.变量存放类型变量存放类型变量存放类型变量存放类型3 本章小结本章小结 第八章 函数与变量10/10/2第2页 北京理工大学计算机学院北京理工大学计算机学院 本章介绍函数定义普通格式,函数调用方法,本章介绍函数定义普通格式,函数调用方法,函数返回值,函数之间参数传递;函数嵌套,函数函数返回值,函数之间参数传递;函数嵌套,函数递归调用;变量存放类型,内部变量,外部变量,递归调用;变量存放类型,内部变量,外部变量,内部函数和外部函数内部函数和外部函数函数间参数传递函数间参数传递函数递归函数递归变量存放类型变量存放类型 C程序是结构化很强程序,将程序按功效自上向程序是结构化很强程序,将程序按

3、功效自上向下分解,一个函数实现一个功效模块。下分解,一个函数实现一个功效模块。11 函函函函 数数数数1 函函 数数 C程序模块化结构程序模块化结构10/10/3第3页 北京理工大学计算机学院北京理工大学计算机学院4.组成组成C程序各个函数均彼此平行,独立定义,程序各个函数均彼此平行,独立定义,能够嵌套调用。能够嵌套调用。1.一个一个C程序能够由若干个源文件组成。程序能够由若干个源文件组成。2.一个源文件能够由若干个函数组成。一个源文件能够由若干个函数组成。3.在组成在组成C程序全部函数中,有且仅有一个主程序全部函数中,有且仅有一个主函数函数main(),位置任意(在哪个源文件中都能够),位置

4、任意(在哪个源文件中都能够),但程序运行总是从主函数开始。,但程序运行总是从主函数开始。5.函数类型可按不一样方法分类以下:函数类型可按不一样方法分类以下:说说 明明10/10/4第4页 北京理工大学计算机学院北京理工大学计算机学院标准函数(库函数)标准函数(库函数)用户定义函数用户定义函数从用户角度从用户角度从函数任务从函数任务 从函数形式从函数形式完成某种运算完成某种运算 实现某种处理(并无计算值)实现某种处理(并无计算值)有参函数有参函数无参函数无参函数需使用头文件需使用头文件#include带回一个返回值带回一个返回值return(表示式)表示式)主调函数与被调函主调函数与被调函数间有

5、参数传递数间有参数传递完成一组操作完成一组操作函数类型分类函数类型分类10/10/5第5页 北京理工大学计算机学院北京理工大学计算机学院8.1.18.1.1 函数定义函数定义函数定义函数定义8.1.1 函数定义函数定义一一、无参函数定义、无参函数定义 说明:定义函数类型是指说明:定义函数类型是指 函数返回值类型,无参函函数返回值类型,无参函数通常无返回值,所以能够不写。数通常无返回值,所以能够不写。标识符为函数名,用户自定义标识符为函数名,用户自定义;括号必须有,括号必须有,内称内称 函数体,即函数功效语句。函数体,即函数功效语句。格式:格式:类型类型 标识符标识符()说明语句说明语句 执行语

6、句执行语句 f()int i;for(i=0;i4;i+)printf(“*n”);函数返回值类型函数返回值类型函数体函数体 函数名函数名10/10/6第6页 北京理工大学计算机学院北京理工大学计算机学院f()printf(“*n”);main()int i;main()for(i=1;i4;i+)f();printf(“*n”);f();f();主函数内使主函数内使用循环结构用循环结构函数定义函数定义函数调用函数调用两个程序等价两个程序等价 10/10/7第7页 北京理工大学计算机学院北京理工大学计算机学院格式:类型格式:类型 标识符(形参表)标识符(形参表)形参说明语句形参说明语句 说明语

7、句说明语句 执行语句执行语句 int sum(x,y)int x,y;int z;z=x+y;return(z);main()int a,b,c;a=30,b=50;c=sum(a,b);printf(“%d,%d,%d”,a,b,c);定义定义形参形参函数体函数体返回语句返回语句调用调用 c=sum(a,b);二、有参函数定义二、有参函数定义10/10/8第8页 北京理工大学计算机学院北京理工大学计算机学院三、空函数三、空函数 说明:空函数中没有语句,什么也不执行。说明:空函数中没有语句,什么也不执行。作用:作为程序整体框架中一个空模块,暂时无内作用:作为程序整体框架中一个空模块,暂时无内容

8、,待补充。容,待补充。格式:格式:函数名函数名()2.形参是暂时定义,形式上,只有在函数调用时,形参是暂时定义,形式上,只有在函数调用时,由实参传递一个值,调用结束,其值消失。由实参传递一个值,调用结束,其值消失。1.函数定义类型为函数返回值类型;假如不定义,函数定义类型为函数返回值类型;假如不定义,系统缺省为整型。系统缺省为整型。说说 明明10/10/9第9页 北京理工大学计算机学院北京理工大学计算机学院8.1.2 8.1.2 函数参数与返回函数参数与返回函数参数与返回函数参数与返回值值值值8.1.2 函数参数与返回函数参数与返回值值 主调函数主调函数main()调用被调函数调用被调函数su

9、m()main()int a,b,c;scanf(“%d,%d”,&a,&b);c=sum(a,b);printf(“%d,%d,%d”,a,b,c);主调函数主调函数int sum(x,y)int x,y;int z;z=x+y;return(z);被调函数被调函数形参形参10/10/10第10页 北京理工大学计算机学院北京理工大学计算机学院一一.函数参数函数参数 形参加实参形参加实参3.编译时,系统编译时,系统不为不为形参分配存放空间,函数调用时,形参分配存放空间,函数调用时,暂时分配,调用结束,空间释放。暂时分配,调用结束,空间释放。1.定义函数时,括号内参数表中参数为形参。定义函数时,

10、括号内参数表中参数为形参。2.调用函数时,括号内参数为实参。调用函数时,括号内参数为实参。4.实参实参在在主调函数主调函数内部定义,能够是常量,变量或表示内部定义,能够是常量,变量或表示式,但必须有值,调用被调函数时,将其式,但必须有值,调用被调函数时,将其值值传给形参。传给形参。5.实参加形参是实参加形参是单向值传递单向值传递(实(实 形)。形)。max(x,y)c=max(a.b)10/10/11第11页 北京理工大学计算机学院北京理工大学计算机学院形参形参x,y在被调函数在被调函数sum(x,y)中定义,无值,被主调函数中定义,无值,被主调函数调用时:调用时:c=sum(a,b);将实将

11、实参参a,b值传给值传给x,y。实参实参 a,b 在主调函数在主调函数main()中定义,并有值(中定义,并有值(a为为30,b为为50)。5030abxy3050调用函数调用函数时暂时分时暂时分配空间配空间int sum(x,y)int x,y;int z;z=x+y;return(z);main()int a,b,c;a=30,b=50;c=sum(a,b);printf(“%d,%d,%d”,a,b,c);主调函数主调函数被调函数被调函数实参实参形参形参c=sum(a,b);程序举例程序举例10/10/12第12页 北京理工大学计算机学院北京理工大学计算机学院函数调用格式:函数调用格式:

12、函数名函数名(实参表实参表)函数调用与返回函数调用与返回 main()int a,b,c;scanf(“%d,%d”,&a,&b);c=sum(a,b);printf(“%d,%d,%d”,a,b,c);主调函数主调函数int sum(x,y)int x,y;int z;z=x+y;return(z);被调函数被调函数形参形参10/10/13第13页 北京理工大学计算机学院北京理工大学计算机学院函数调用格式:函数调用格式:函数名函数名(实参表实参表)例:例:输入输入n,计算并输出,计算并输出s=n!main()int n,s;printf(“Input n:“);scanf(“%d”,&n);

13、s=fac(n);printf(“s=%d”,s);主调函数主调函数fac(a)fac(a)int a;int a;int i,z=1;int i,z=1;for(i=1;i=a;i+)for(i=1;ib?a:b);2.return(x);3.return(0);4.retrun;5.无无return语句语句6.void return语句比较语句比较10/10/17第17页 北京理工大学计算机学院北京理工大学计算机学院main()int a;void disp();printf(“Enter an integer:n”);scanf(“%d”,&a);disp(a);void disp(x)

14、int x;if(x 0)printf(“Positive.n”);else if(x=0)printf(“Zero.n”);else printf(“Negative.n”);不返回任何值不返回任何值无类型函数无类型函数10/10/18第18页 北京理工大学计算机学院北京理工大学计算机学院8.1.3 8.1.3 函数申明和调用函数申明和调用函数申明和调用函数申明和调用8.1.3 函数申明和调用函数申明和调用例:例:main()f();主调函数使用被调函数功效,称为对主调函数使用被调函数功效,称为对被调函数调用。被调函数调用。函数函数f()为某一个含有特定功效函数为某一个含有特定功效函数函数调

15、用是经过函数名函数调用是经过函数名 f 实现。实现。10/10/20第20页 北京理工大学计算机学院北京理工大学计算机学院例:例:sum(a,b)1.格式:格式:无参函数:函数名无参函数:函数名()有参函数:函数名有参函数:函数名(实参表实参表)2.实参求值次序:当函数中实参彼此相关系时,实参求值次序:当函数中实参彼此相关系时,TCTC下求值次序是下求值次序是 从右向左从右向左 。从右向左从右向左一、一、函数调用普通形式函数调用普通形式当当i原值为原值为2时,对函数时,对函数f(i,+i)从左向右,为从左向右,为f(2,3);从右向左,为;从右向左,为f(3,3)。若若i=3,printf(“

16、%d,%dn”,i,+i)结果为:结果为:4,4 10/10/21第21页 北京理工大学计算机学院北京理工大学计算机学院介绍三种介绍三种1.以语句形式:以语句形式:函数名函数名(参数参数)加分号加分号printf(“KKKKKn”);2.以表示式形式以表示式形式(函数调用作为运算分量函数调用作为运算分量)x=pow(a,j)+b;3.作为函数参数作为函数参数y=sum(pow(a,j),b)求:求:aj二二、函数调用方式、函数调用方式10/10/22第22页 北京理工大学计算机学院北京理工大学计算机学院对变量应先定义,再使用;对函数,主调函数使用被对变量应先定义,再使用;对函数,主调函数使用被

17、调函数之前,要对被调函数做申明,详细要求:调函数之前,要对被调函数做申明,详细要求:1.首先被调函数必须存在,假如是库函数,需用#include 将函数包含进源程序,假如是用户定义函数,应做申明。函数定义函数定义函数申明函数申明类型类型 函数名函数名(参数表参数表)函数体函数体 类型类型 函数名函数名(参数表参数表)格式:类型格式:类型 函数名函数名(参数表参数表)函数定义只函数定义只能有一次,说能有一次,说明能够有屡次明能够有屡次一个函数可被多个函数调用一个函数可被多个函数调用三、三、对被调函数申明对被调函数申明10/10/23第23页 北京理工大学计算机学院北京理工大学计算机学院(1)定义

18、定义函数时有类型函数时有类型(2)函数函数返回值返回值有类型有类型 (3)主调函数使用被调函数时需主调函数使用被调函数时需说明说明类型类型要求:要求:三个类型应一致三个类型应一致假如定义类型与返回值类型不符,以假如定义类型与返回值类型不符,以定义定义为准为准假如定义类型与说明类型假如定义类型与说明类型不一致不一致,程序出,程序出随机错误随机错误2.相关函数类型相关函数类型10/10/24第24页 北京理工大学计算机学院北京理工大学计算机学院(1)函数返回值是函数返回值是 int ,char(或函数定义类型为或函数定义类型为int 或或char)。(2)被调函数定义出现在主调函数之前。被调函数定

19、义出现在主调函数之前。f2().main()f2();.f2()为被调函数为被调函数 主函数调主函数调用用f2()可不可不作说明作说明(3)在文件开始,所用函在文件开始,所用函数定义之前,已对函数说明数定义之前,已对函数说明了类型,则文件中全部函数了类型,则文件中全部函数都可调用该函数。都可调用该函数。3.C允许在以下情况下不作说明允许在以下情况下不作说明10/10/25第25页 北京理工大学计算机学院北京理工大学计算机学院返回值类型为返回值类型为float,与定义类型不符,以定与定义类型不符,以定义为准义为准int因为是因为是int,主函数,主函数中能够不作说明中能够不作说明输入:输入:6.

20、8,4.5输出?输出?修改程序修改程序输入:输入:6.8,4.5输出?输出?main()float a,b;int m;scanf(“%f,%f”,&a,&b);m=max(a,b);printf(“%d”,m);max(x,y)float x,y;float n;n=xy?x:y;return(n);定义函数定义函数返回值返回值调用函数调用函数%ffloat m;不定义类型,缺省:不定义类型,缺省:int10/10/26第26页 北京理工大学计算机学院北京理工大学计算机学院1.被调函数在调用过程中,调用其它函数称为函数被调函数在调用过程中,调用其它函数称为函数嵌套调用。嵌套调用。2.函数能够

21、嵌套调用,不允许嵌套定义。函数能够嵌套调用,不允许嵌套定义。函数外部性函数外部性一个函数不能定义在其它一个函数不能定义在其它函数内部,函数之间是相函数内部,函数之间是相互独立,是平行。互独立,是平行。f1().f2().f3().f1().f2().平行平行定义定义8.1.4 8.1.4 函数函数函数函数递归调用递归调用递归调用递归调用8.1.4 函数递归调用函数递归调用 一一.函数嵌套函数嵌套10/10/27第27页 北京理工大学计算机学院北京理工大学计算机学院mainmain函数函数函数函数 调用函调用函调用函调用函数数数数 A;A;函数函数函数函数 A A 调用函数调用函数调用函数调用函

22、数 B B;函数函数函数函数 B B 函数嵌套调用函数嵌套调用10/10/28第28页void beijing();void shanghai();void tianjin();main()printf(“I m in main.n”);beijing();printf(“Im finally back in main().n”);void beijing()printf(“I m in beijing.n”);shanghai();printf(“Here Im back in beijing.n”);void shanghai()printf(“Now Im in shanghai.n”)

23、;tianjin();printf(“Now I m back in shanghai.n”);void tianjin()printf(“I m in tianjin now.n”);函数申明函数申明beijing();shanghai();tianjin();函数嵌套调用举例10/10/29第29页 北京理工大学计算机学院北京理工大学计算机学院main()beijing();函数嵌套控制流程函数嵌套控制流程beijing()shanghai();shanghai()tianjin();tianjin()printf(“I m in tianjin now.n”);10/10/30第30页

24、北京理工大学计算机学院北京理工大学计算机学院mainmain函数函数函数函数 调用函调用函调用函调用函数数数数 sum(a,b);sum(a,b);函数函数函数函数sum(x,y)sum(x,y)int x,y;int x,y;两次两次两次两次调用函数调用函数调用函数调用函数 n1=fac n1=fac(x)(x);n2=facn2=fac(y)(y);返回返回返回返回n1+n2n1+n2 两次调用两次调用两次调用两次调用函数函数函数函数facfac(n)(n)int n;int n;for(for()返回返回返回返回n!n!课堂作业:课堂作业:输入输入a,b,求,求s=a!+b!10/10/

25、31第31页 北京理工大学计算机学院北京理工大学计算机学院int sum();int fac();int sum();int fac();main()main()int a,b,s;int a,b,s;printf(Input a,b:);printf(Input a,b:);scanf(%d,%d,scanf(%d,%d,&a,&b);&a,&b);s=sum(a,b);s=sum(a,b);printf(s=%dn,s);printf(s=%dn,s);getch();getch();sum(x,y)sum(x,y)int x,y;int x,y;int n1,n2,s;int n1,n2

26、,s;n1=fac(x);n1=fac(x);n2=fac(y);n2=fac(y);s=n1+n2;s=n1+n2;return(s);return(s);两次调用两次调用两次调用两次调用fac(n)fac(n)int n;int n;int i,z=1;int i,z=1;for(i=1;for(i=1;i=n;i+)i0(n-1)!n010/10/34第34页 北京理工大学计算机学院北京理工大学计算机学院fac(int fac(int n n)if(if(n=0n=0)return(1)return(1);else else return(n return(n*facfac(n-1n-1

27、););facfac(int(int n n)int s;int s;if(if(n=0n=0)s=1;s=1;else else s=s=facfac(n-1n-1););s=n s=n*s;s;return(s);return(s);等价于等价于了解程序思绪:了解程序思绪:n!就是就是 n*(n-1)!递归调用10/10/35第35页n n4 4=4 4facto(int n)facto(int n)int s;int s;if(n=0)if(n=0)s=1;s=1;else else s=fac(n-1);s=fac(n-1);s=n s=n*s;s;return(s);return(s

28、);fac(int n)fac(int n)int s;int s;if(n=0)if(n=0)s=fac(n-1)s=fac(n-1)n n3 3=3 3facto(int n)facto(int n)int s;int s;if(n=0)if(n=0)s=1;s=1;else else s=fac(n-1);s=fac(n-1);s=n s=n*s;s;return(s);return(s);fac(int n)fac(int n)int s;int s;s=fac(n-1)s=fac(n-1)if(n=0)if(n=0)n n2 2=2 2facto(int n)facto(int n)

29、int s;int s;if(n=0)if(n=0)s=1;s=1;else else s=fac(n-1);s=fac(n-1);s=n s=n*s;s;return(s);return(s);n n1 1=1 1 facto(int n)facto(int n)int s;int s;if(n=0)if(n=0)s=1;s=1;else else s=fac(n-1);s=fac(n-1);s=n s=n*s;s;return(s);return(s);n n0 0=0 0facto(int n)facto(int n)int s;int s;if(n=0)if(n=0)s=1;s=1;e

30、lse else s=fac(n-1);s=fac(n-1);s=n s=n*s;s;return(s);return(s);fac(int n)fac(int n)fac(int n)fac(int n)fac(int n)fac(int n)int s;int s;int s;int s;int s;int s;if(n=0)if(n=0)if(n=0)if(n=0)if(n=0)if(n=0)s=fac(n-1)s=fac(n-1)s=fac(n-1)s=fac(n-1)s=1s=1return(return(1 1)return(return(1 1)s=ns=n*s=s=1 1*1

31、1s=ns=n*s=s=2 2*1 1return(return(2 2)return(return(6 6)s=ns=n*s=s=3 3*2 2s=ns=n*s=s=4 4*6 6return(return(2424)123454321递归调用执行过程递归调用执行过程10/10/36第36页比如:给定整数是比如:给定整数是 12345,要求输出,要求输出 54321。这是用这是用递归方法求解递归方法求解非数值问题,非数值问题,递归方法递归方法思绪思绪分析分析:“有明确解法部分有明确解法部分+性质相同小问题性质相同小问题”:(1)输出一个数字,能够做到。输出一个数字,能够做到。(2)输出给定输

32、出给定 N 位整数个位上数字,位整数个位上数字,(3)前前 N-1 位除以十,位除以十,(4)原问题被缩减为原问题被缩减为 N-1 位整数反向输出问题。位整数反向输出问题。(5)假如假如?(结束条件结束条件)执行(执行(6),不然循环再执行(不然循环再执行(2)。)。(6)递归调用结束。递归调用结束。非数值递归方法非数值递归方法分析:分析:反向输出给定整数反向输出给定整数10/10/37第37页1 2 3 4 551 2 3 45 41 2 35 4 31 25 4 3 215 4 3 2 1反向输出(整数反向输出(整数 N)if(N=10)then 输出最终一位;输出最终一位;N 除以除以1

33、0取整取整 NN-1;调用反向输出(调用反向输出(NN-1);else 输出输出 N;最终一位最终一位最终一位最终一位:y=N%10编程时关注:编程时关注:1.怎样化简:本怎样化简:本题化简为一个数字、题化简为一个数字、N-1个数字。个数字。只要问题化简只要问题化简正确,正确,化简后工作化简后工作由递归处理。由递归处理。2.递归结束条件。递归结束条件。递归调用执行过程递归调用执行过程10/10/38第38页 北京理工大学计算机学院北京理工大学计算机学院main()int x;printf(“Enter x:”);scanf(“%d”,&x);int_turn(x);int_turn(n)int

34、 n;if(n=10)printf(“%d”,n%10);int_turn(n/10);else printf(“%d”,n);函数本身调用函数本身调用反向输出给定整数程序反向输出给定整数程序10/10/39第39页汉诺塔问题6464片片片片初始杆初始杆初始杆初始杆中间杆中间杆中间杆中间杆目杆1 1 n n18,446,744,073,709,551,61518,446,744,073,709,551,615次次次次18441844亿亿次。每次亿亿次。每次亿亿次。每次亿亿次。每次1 1微秒,需要微秒,需要微秒,需要微秒,需要6060万年万年万年万年 听说在约十九世纪末欧洲商店中出售一个智力玩具

35、,听说在约十九世纪末欧洲商店中出售一个智力玩具,在一块铜板上有三根杆,最左边杆上自上而下、由小到大在一块铜板上有三根杆,最左边杆上自上而下、由小到大次序串着由次序串着由 64 个圆盘组成塔。个圆盘组成塔。游戏目标是将最左边杆上圆盘,借助最右边杆,游戏目标是将最左边杆上圆盘,借助最右边杆,全部移到中间杆上,条件是一次仅能移动一个盘,且不全部移到中间杆上,条件是一次仅能移动一个盘,且不允许大盘放在小盘上面。允许大盘放在小盘上面。10/10/40第40页 北京理工大学计算机学院北京理工大学计算机学院分析分析A杆杆C C杆杆杆杆B杆杆移动方法:移动方法:1.将上面小片移到将上面小片移到C杆上。杆上。2

36、.将下面大片由将下面大片由A杆移到杆移到B杆上。杆上。3.将将C杆上小片移到杆上小片移到B杆上。杆上。对A杆上全部N个圆盘从小到大次序编号,最小圆盘为1,次之为2号,则最下面圆盘编号为 N。第一步:将问题简化。假设 A杆 上只有 2 个圆盘,即汉诺塔有 2 层,N2。移动过程以下:10/10/41第41页 北京理工大学计算机学院北京理工大学计算机学院A杆杆C C杆杆杆杆B杆杆 将将 A杆上面杆上面 N-1 个盘子,借助个盘子,借助B杆,移到杆,移到C杆上;杆上;将将 A杆杆 上剩下上剩下 N号号 盘子移到盘子移到 B杆杆 上;上;将将 C杆杆 上上 N-1个个 盘子,借助盘子,借助A杆,移到杆

37、,移到B杆上杆上分析分析 第二步,对于一个有第二步,对于一个有 N(N1)个圆盘汉诺塔,将)个圆盘汉诺塔,将N个圆盘分为个圆盘分为两部分:上面两部分:上面N-1个圆盘和最下面个圆盘和最下面N号圆盘。将号圆盘。将“上面上面N-1个圆盘个圆盘”看成一个整体。看成一个整体。第三步,为处理第三步,为处理 N 个圆盘汉诺塔,可按以下方式进行操作:个圆盘汉诺塔,可按以下方式进行操作:10/10/42第42页 北京理工大学计算机学院北京理工大学计算机学院整理分析结果整理分析结果 把第一步中化简问题条件作为递归结束条件,将第三步分析得把第一步中化简问题条件作为递归结束条件,将第三步分析得到算法作为递归算法。到

38、算法作为递归算法。定义函数定义函数movedisc(n,fromneedle,toneedle,usingneedle)。将将 fromneedle 杆上杆上 N 个圆盘,借助个圆盘,借助 usingneedle 杆,移动到杆,移动到 toneedle 杆上。杆上。移动移动N个圆盘递归算法描述以下:个圆盘递归算法描述以下:movedisc(n,fromneedle,toneedle,usingneedle)if(n=1)将将 n 号圆盘从号圆盘从 fromneedle 上移到上移到 toneedle上上;else movedisc(n-1,fromneedle,usingneedle,tone

39、edle)将将 n 号圆盘从号圆盘从 fromneedle 上移到上移到 toneedle上上;movedisc(n-1,usingneedle,toneedle,fromneedle)10/10/43第43页 北京理工大学计算机学院北京理工大学计算机学院汉诺塔问题程序汉诺塔问题程序int i=0;/*移动圆盘数量计数器移动圆盘数量计数器*/main()unsigned n;scanf(%d,&n);movedisc(n,a,b,c);/*将将A上上N个圆盘借助个圆盘借助C将移动到将移动到B上上*/printf(t Total:%dn,i);movedisc(n,fromneedle,tone

40、edle,usingneedle)unsigned n;char fromneedle,toneedle,usingneedle;if(n=1)printf(%2d-(%2d):%c=%cn,+i,n,fromneedle,toneedle);else movedisc(n-1,fromneedle,usingneedle,toneedle);printf(%2d-(%2d):%c=%cn,+i,n,fromneedle,toneedle);movedisc(n-1,usingneedle,toneedle,fromneedle);10/10/44第44页 北京理工大学计算机学院北京理工大学计

41、算机学院程序执行过程程序执行过程当当N=3时,程序递归调用完整执行过程时,程序递归调用完整执行过程在在main函数中函数中 递归调用第一层递归调用第一层 递归调用第二层递归调用第二层 递归调用第三层递归调用第三层 递归递归 递归递归 move(1,a,b,c)输出:输出:1-(1):a=b 返回递归第二层返回递归第二层 输出:输出:2-(2):a=c 调用调用 move(1,b,c,a)输出:输出:3-(1):b=c move(2,a,c,b)返回递归第二层返回递归第二层 返回递归调用第一层返回递归调用第一层move(3,a,b,c)输出:输出:4-(3):a=b move(2,c,b,a)m

42、ove(1,c,a,b)输出:输出:5-(1):c=a 返回递归第二层返回递归第二层 输出:输出:6-(2):c=b 返回返回main函数函数 move(1,a,b,c)输出:输出:7-(1):a=b 返回递归第二层返回递归第二层 返回递归调用第一层返回递归调用第一层10/10/45第45页 北京理工大学计算机学院北京理工大学计算机学院 作函数实参(与变量作实参相同)作函数实参(与变量作实参相同)在主调函数中定义数组在主调函数中定义数组,将数组中某元素,将数组中某元素ai 作为实作为实参,将值传给被调函数形参。参,将值传给被调函数形参。数组作函数参数数组作函数参数有几个情况:有几个情况:一一、

43、数组元素作函数参数、数组元素作函数参数二二、数组名作函数参数、数组名作函数参数1 实参和形参都用数组名。实参和形参都用数组名。2 在主调函数和被调函数中分别定义数组。在主调函数和被调函数中分别定义数组。3 类型必须一致。类型必须一致。4 长度能够不一致。长度能够不一致。5 实参加形参之间不是值传递,而是地址传递,将实参数组起实参加形参之间不是值传递,而是地址传递,将实参数组起始地址传给形参数组(两数组共用内存中部分空间)。始地址传给形参数组(两数组共用内存中部分空间)。数组作函数参数数组作函数参数10/10/46第46页 北京理工大学计算机学院北京理工大学计算机学院#define N 5mai

44、n()int i,j,a N;for(i=0;i N;i+)printf(Enter%2d:,i+1);scanf(%d,&a i );sort(a,N);for(i=0;i N;i+)printf(%d,a i);sort(b,m)int m,b ;int i,j,t;for(i=0;i m-1;i+)for(j=0;j b j+1 )t=b j;b j =b j+1 ;b j+1 =t;a N;实参用数组名实参用数组名形参用数组名形参用数组名数组名作函数参数数组名作函数参数10/10/47第47页 北京理工大学计算机学院北京理工大学计算机学院mainmain函数函数函数函数sortsort

45、函数函数函数函数 a0a0 a1a1 a2a2 a3a3 a4a4 a5a5 数组名就是数组名就是数组名就是数组名就是首元素地址首元素地址首元素地址首元素地址ab形参形参形参形参 b b 实质是实质是实质是实质是一个变量,内一个变量,内一个变量,内一个变量,内容是数组容是数组容是数组容是数组 a a 起始地址起始地址起始地址起始地址对数组名作为参数解释对数组名作为参数解释10/10/48第48页 北京理工大学计算机学院北京理工大学计算机学院8.1.5 8.1.5 外部外部外部外部函数与内部函数函数与内部函数函数与内部函数函数与内部函数8.1.5 外部外部函数与内部函数函数与内部函数 一一.基本

46、概念基本概念函数库:函数库是由系统建立含有一定功效函数集合。库中存函数库:函数库是由系统建立含有一定功效函数集合。库中存放函数名称和对应目标代码,以及连接过程中所需重定位信息。放函数名称和对应目标代码,以及连接过程中所需重定位信息。用户也可依据需要建立自己用户函数库。用户也可依据需要建立自己用户函数库。系统函数又称库函数,它不是系统函数又称库函数,它不是C语言一部分,而是由编译语言一部分,而是由编译程序依据普通用户需要编制并提供用户使用一组程序。程序依据普通用户需要编制并提供用户使用一组程序。库函数:存放在函数库中函数。库函数:存放在函数库中函数。库函数含有明确功效、入口调用参数和返回值。库函

47、数含有明确功效、入口调用参数和返回值。连接程序:将编译程序生成目标码连接起生成可执行文件。连接程序:将编译程序生成目标码连接起生成可执行文件。头文件:也称为包含文件。头文件:也称为包含文件。C语言库函数与用户程序之间进语言库函数与用户程序之间进行信息通信时要使用数据和变量,在使用某一库函数时,都行信息通信时要使用数据和变量,在使用某一库函数时,都要在程序中嵌入(用要在程序中嵌入(用#include)。)。10/10/49第49页 北京理工大学计算机学院北京理工大学计算机学院 二二.Tubro C库函数分为九大类库函数分为九大类1.I/O函数函数 包含各种控制台包含各种控制台I/O、缓冲型文件、

48、缓冲型文件I/O和和UNIX式非缓冲型文件式非缓冲型文件I/O操作。需要包含文件:操作。需要包含文件:stdio.h 比如:比如:getchar,putchar,printf,scanf,fopen,fclose,fgetc,fgets,fprintf,fsacnf,fputc,fputs,fseek,fread,fwrite等。等。10/10/50第50页 北京理工大学计算机学院北京理工大学计算机学院2.字符串、内存和字符函数字符串、内存和字符函数 包含对字符串进行各种操作和对字符进行操作包含对字符串进行各种操作和对字符进行操作函数。函数。需要包含文件:需要包含文件:string.h、mem

49、.h、ctype.h或或 string.h比如:用于检验字符函数:比如:用于检验字符函数:isalnum,isalpha,isdigit,islower,isspace等。等。用于字符串操作函数:用于字符串操作函数:strcat,strchr,strcmp,strcpy,strlen,strstr等。等。10/10/51第51页 北京理工大学计算机学院北京理工大学计算机学院3.数学函数数学函数 包含各种惯用三角函数、双曲线函数、指数和包含各种惯用三角函数、双曲线函数、指数和对数函数等。需要包含文件:对数函数等。需要包含文件:math.h 比如:比如:sin,cos,exp(ex次方),次方),

50、log,sqrt(开平方),(开平方),pow(xy次方)等。次方)等。4.时间、日期和与系统相关函数时间、日期和与系统相关函数 对时间、日期操作和设置计算机系统状态等。对时间、日期操作和设置计算机系统状态等。需要包含文件:需要包含文件:time.h 比如:比如:time返回系统时间;返回系统时间;asctime返回以字返回以字符串形式表示日期和时间。符串形式表示日期和时间。10/10/52第52页 北京理工大学计算机学院北京理工大学计算机学院5.动态存放分配动态存放分配 包含包含“申请分配申请分配”和和“释放释放”内存空间函数。内存空间函数。需要包含文件:需要包含文件:alloc.h 或或

移动网页_全站_页脚广告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 

客服