C程序设计第三版函数省公共课一等奖全国赛课获奖课件.pptx
《C程序设计第三版函数省公共课一等奖全国赛课获奖课件.pptx》由会员分享,可在线阅读,更多相关《C程序设计第三版函数省公共课一等奖全国赛课获奖课件.pptx(119页珍藏版)》请在咨信网上搜索。
第八章第八章第1页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 28.18.1概述概述 一个较大程序可分为若干个程序模块程序模块,每一个模块用来实现一个特定功效。在高级语言中用子程序子程序实现模块功效。子程序由函数来完成。一个程序可由一个主函数和若干个其它函数组成。由主函数调用其它函数,其它函数也能够相互调用。由主函数调用其它函数,其它函数也能够相互调用。同一个函数能够被一个或多个函数调用任意屡次。同一个函数能够被一个或多个函数调用任意屡次。函数间调用关系函数间调用关系第2页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 3#include void main()void printstar();/*对对printstar函数申明函数申明*/void print_message();/*对对print_message函数申明函数申明*/printstar();*调用调用printstar函数函数*print_message();/*调用调用print_message函数函数*/printstar();*调用调用printstar函数函数*/例例8.18.1先举一个函数调用简单例子先举一个函数调用简单例子第3页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 4void printstar()*定义定义printstar函数函数*printf(*n);void print_message()*定义定义print_message函数函数*printf(How do you do!n);运行情况以下:运行情况以下:*How do you do!How do you do!*第4页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 5 说明:(1)一个程序由一个或多个程序模块组成,每一个程序模块作为一个源程序文件。对较大程序,一般不希望把全部内容全放在一个文件中,而是将他们分别放在若干个源文件中,再由若干源程序文件组成一个C程序。这么便于分别编写、分别编译,提高调试效率。一个源程序文件可认为多个C程序公用。第5页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 6(2 2)一个源程序文件由一个或多个函数以及其它相关内容(如命令行、数据定义等)组成。一个源程序文件是一个编译单位,在程序编译时是以源程序文件为单位进行编译,而不是以函数为单位进行编译。(3 3)程序执行是从函数开始,如是在函数中调用其它函数,在调用后流程返回到函数,在函数中结束整个程序运行。第6页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 7(4 4)全部函数都是平行,即在定义函数时是分别进行,是相互独立。一个函数并不隶属于另一函数,即函数不能嵌套定义。函数间能够相互调用,但不能调用函数。函数是系统调用。第7页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 8(5 5)从用户使用角度看,函数有两种:标标准准函函数数,即库函数。这是由系统提供,用户无须自己定义这些函数,能够直接使用它们。应该说明,不一样C系统提供库函数数量和功效会有一些不一样,当然许多基本函数是共同。用用户户自自己己定定义义函函数数。用以处理用户专门需要。第8页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 9(6 6)从函数形式看,函数分两类:无无 参参 函函 数数。如 例 8.1中 printstar和print_message就是无参函数。在调用无参函数时,主调函数不向被调用函数传递数据。无参函数普通用来执行指定一组操作。比如,例8程序中printstar函数。有有参参函函数数。在调用函数时,主调函数在调用被调用函数时,经过参数向被调用函数传递数据,普通情况下,执行被调用函数时会得到一个函数值,供主调函数使用。第9页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 108.函数定义普通形式函数定义普通形式 8.2.1.8.2.1.无参函数定义普通形式无参函数定义普通形式无参函数定义普通形式无参函数定义普通形式 定义定义无参函数无参函数普通形式为普通形式为:类型标识符类型标识符函数名函数名()()申明部分申明部分 语句部分语句部分 在定义函数时要用“类型标识符”指定函数值类型,即函数带回来值类型。例8.中printstar和print_message函数为void类型,表示不需要带回函数值。第10页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 118.2.2.有参函数定义普通形式有参函数定义普通形式 定义定义有参函数有参函数普通形式为普通形式为:类型标识符类型标识符函数名函数名(形式参数表列)(形式参数表列)申明部分申明部分 语句部分语句部分 比如:比如:(int,int);/*函数体中申明部分*?;();第11页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 128.2.3 空函数空函数 定义定义空函数空函数普通形式为普通形式为:类型标识符类型标识符函数名函数名()()比如:比如:()()调用此函数时,什么工作也不做,没有任何实际作用。在主调函数中写上“();”表明“这里要调用一个函数”,而现在这个函数没有起作用,等以后扩充函数功效时补充上。第12页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 138.函数参数和函数值函数参数和函数值 8 8.形式参数和实际参数形式参数和实际参数形式参数和实际参数形式参数和实际参数 在前面提到有参函数中,在定义函数时函数名后面括弧中变量名称为“形式参数”(简称“形参形参”),在主调函数中调用一个函数时,函数名后面括弧中参数(能够是一个表示式)称为“实际参数”(简称“实参实参”)。return后面括弧中值()作为函数带回值(称函数返回值函数返回值)。第13页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 14在不一样函数之间传递数据,能够使用法:参数:经过形式参数和实际参数返回值:用return语句返回计算结果全局变量:外部变量大多数情况下,主调函数和被调用函数之间有数据传递关系。第14页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 15#include#include void void()()int max(int int max(int,int int);/*/*对函数申明对函数申明*/*/int int,;,;scanf scanf(,);(,);(,);(,);printf printf(,);,);例例8.8.调用函数时数据传递调用函数时数据传递 第15页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 16int max(int int max(int,int int)*定义有参函数定义有参函数max*max*int int;?;return return();();运行情况以下:,第16页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 17经过函数调用,使两个函数中数据发生联络经过函数调用,使两个函数中数据发生联络 第17页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 18关于形参加实参说明:关于形参加实参说明:(1)在定义函数中指定形参,在未出现函数调用时,它们并不占内存中存放单元。只有在发生函数调用时,函数中形参才被分配内存单元。在调用结束后,形参所占内存单元也被释放。(2)实参能够是常量、变量或表示式,如:(,);但要求它们有确定值。在调用时将实参值赋给形参。第18页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 19(3)在被定义函数中,必须指定形参类型(见例8.2程序中“(,);(,);”)。(4)实参加形参类型应相同或赋值兼容。例8中实参和形参都是整型。假如实参为整型而形参x为实型,或者相反,则按第3章介绍不一样类型数值赋值规则进行转换。比如实参值a为3.5,而形参x为整型,则将实数3.5转换成整数3,然后送到形参b。字符型与整型能够相互通用。第19页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 20(5)在语言中,实参向对形参数据传递是“值传递”,单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不一样单元。第20页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 21在调用函数时,给形参分配存放单元,并将实参对应值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。所以,在执行一个被调用函数时,形参值假如发生改变,并不会改变主调函数实参值。比如,若在执行函数过程中和值变为和,而和仍为和。第21页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 228.3.2 8.3.2 函数返回值函数返回值通常,希望经过函数调用使主调函数能得到一个确定值,这就是函数返回值函数返回值。比如,例8.中,(,)值是,(,)值是5。赋值语句将这个函数值赋给变量。关于函数返回值一些说明:关于函数返回值一些说明:(1)(1)函数返回值是经过函数中函数返回值是经过函数中returnreturn语句取得。语句取得。第22页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 23假如需要从被调用函数带回一个函数值供主调函数使用,被调用函数中必须包含return语句。假如不需要从被调用函数带回函数值能够不要return语句。一个函数中能够有一个以上return语句,执行到哪一个return语句,哪一个语句起作用。return语句后面括弧也能够不要,如如:“:“return ;”;”等价于等价于“return();();”return语句将被调用函数中一个确定值带回主调函数中去。见图8.2中从return语句返回箭头。第23页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 24return后面值能够是一个表示式。比如,例8中函数能够改写成:(int,int)(?););(2)(2)函数返回值应该属于某一个确定类型,函数返回值应该属于某一个确定类型,在在定义函数时指定函数返回值类型定义函数时指定函数返回值类型。第24页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 25比如比如:下面是下面是3 3个函数首行:个函数首行:int max(float,float)/*函数值为整型*/char letter(char c1,char c2)/*函数值为字符型*/double min(int,int)/*函数值为双精度型*/在语言中,凡不加类型说明函数,自动按整型处理。例8.中函数首行函数类型int能够省写,用Turbo C 2.0编译程序时能经过,但用Turbo C 3.0编译程序时不能经过,因为C+要求全部函数都必须指定函数类型。所以,提议在定义时对全部函数都指定函数类型。第25页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 26(3 3)在定义函数时指定函数类型普通应该和在定义函数时指定函数类型普通应该和returnreturn语句中表示式类型一致。语句中表示式类型一致。假如函数值类型和return语句中表示式值不一致,则以函数类型为准。对数值型数据,能够自动进行类型转换。即函数类型决定返回值类型。(4 4)对于不带回值函数,应该用对于不带回值函数,应该用“void”“void”定义定义函数为函数为“无类型无类型”(或称(或称“空类型空类型”)。这么,)。这么,系统就确保不使函数带回任何值,即禁止在调系统就确保不使函数带回任何值,即禁止在调用函数中使用被调用函数返回值。此时在函数用函数中使用被调用函数返回值。此时在函数体中不得出现体中不得出现returnreturn语句。语句。第26页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 27例例 8.8.返回值类型与函数类型不一样返回值类型与函数类型不一样#include void main()()int(float,float);float,;,;int;scanf(,);(,);(,);(,);printf(,);,);int max(float,float)float;/*z为实型变量为实型变量*/?;return();();运行情况以下:,Max is 第27页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 288.8.函数调用函数调用 8.8.函数调用普通形式函数调用普通形式函数调用普通形式函数调用普通形式函数调用普通形式为函数调用普通形式为:函数名函数名(实参表列)(实参表列)假如实参表列包含多个实参,则各参数间用逗号隔开。实参加形参个数应相等,类型应匹配。实参加形参按次序对应,一一传递数据。假如是调用无参函数,则“实参表列”能够没有,但括弧不能省略。第28页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 29假如实参表列包含多个实参,对实参求值次序并不是确定,有系统按自左至右次序求实参值,有系统则按自右至左次序。许多版本是按自右而左次序求值,比如Tubro+。第29页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 30例例 8 8 实参求值次序实参求值次序#include void main()int f(int a,int b);/*函数申明函数申明*/int i=2,p;p=f(i,+i);/*函数调用函数调用*/printf(%dn,p);第30页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 31int f(int a,int b)/*函数定义函数定义*/int c;if(ab)c=1;else if(a=b)c=0;else c=-1;return(c);第31页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 32假如按自左至右次序求实假如按自左至右次序求实参值,则函数调用相当于参值,则函数调用相当于(,)(,)假如按自左至右次序求实假如按自左至右次序求实参值,则函数调用相当于参值,则函数调用相当于(3,),)对于函数调用对于函数调用 int i=2,p;p=f(i,+i);第32页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 338.8.函数调用方式函数调用方式函数语句函数语句把函数调用作为一个语句。如例8.1中printstar(),这时不要求函数带回值,只要求函数完成一定操作。函数表示式函数表示式函数出现在一个表示式中,这种表示式称为函数表示函数表示式式。这时要求函数带回一个确定值以参加表示式运算。比如:*(,);(,);第33页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 34函数参数函数参数函数调用作为一个函数实参。比如:m=max(a,max(b,c);其中max(b,c)是一次函数调用,它值作为max另一次调用实参。m值是a、b、c三者中最大者。又如:printf(%d,max(a,b);也是把max(a,b)作为printf函数一个参数。函数调用作为函数参数,实质上也是函数表示式形式调用一个,因为函数参数原来就要求是表示式形式。第34页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 358.对被调用函数申明和函数原型对被调用函数申明和函数原型(1)首先被调用函数必须是已经存在函数(是库函数或用户自己定义函数)。但光有这一条件还不够。8.对被调用函数申明和函数原型对被调用函数申明和函数原型第35页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 36(3)假如使用用户自己定义函数,而该函数位置在调用它函数(即主调函数)后面(在同一个文件中),应该在主调函数中对被调用函数作申明对被调用函数作申明。(2)假如使用库函数,还应该在本文件开头用命令将调用相关库函数时所需用到信息“包含”到本文件中来。第36页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 37函数原型普通形式为函数原型普通形式为(1)(1)函数类型函数类型 函数名函数名(参数类型参数类型1 1,参数,参数类型类型2)2);(2)(2)函数类型函数类型 函数名函数名(参数类型参数类型1 1,参数,参数名名1 1,参数类型,参数类型2 2,参数名,参数名2)2);第37页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 38“申明申明”一词原文是delaration,过去在许多书中把它译为“说明”。申明作用申明作用是把函数名、函数参数个数和参数类型等信息通知编译系统,方便在碰到函数调用时,编译系统能正确识别函数并检验调用是否正当。(比如函数名是否正确,实参加形参类型和个数是否一致)。第38页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 39注意:注意:函数函数“定义定义”和和“申明申明”不是一回不是一回事事。函数定义函数定义是指对函数功效确实立,包含指定函数名,函数值类型、形参及其类型、函数体等,它是一个完整、独立函数单位。而函数申明函数申明作用则是把函数名字、函数类型以及形参类型、个数和次序通知编译系统,方便在调用该函数时系统按此进行对照检验。第39页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 40#include void main()()float add(float x,float y););*对被调用函数对被调用函数add申明申明*float a,b,c;scanf(f,f,a,b););cadd(a,b);printf(sum is f n,c););float add(float,float)*函数首部函数首部*float;/*函数体函数体*/z;return(z););例例8 对被调用函数作申明对被调用函数作申明第40页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 41假如假如 被调用函数定义出现在主调函数之前,能够无须加以申明。因为编译系统已经先知道了已定义函数相关情况,会依据函数首部提供信息对函数调用作正确性检验。假如假如 被调用函数定义出现在主调函数之前,能够无须加以申明。因为编译系统已经先知道了已定义函数相关情况,会依据函数首部提供信息对函数调用作正确性检验。第41页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 42改写例改写例 8.#include float add(float,float)*函数首部函数首部*float;/*函数体函数体*/z;return(z););void main()()float a,b,c;scanf(f,f,a,b););cadd(a,b);printf(sum is f n,c););第42页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 438.函数嵌套调用函数嵌套调用嵌套定义就是在定义一个函数时,其函数体内又包含另一个函数完整定义。语言不能嵌套定义函数,但能够嵌套调用函数,也就是说,在调用一个函数过程中,又调用另一个函数。第43页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 44第44页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 45例例 8.8.用弦截法求方程用弦截法求方程 f(x)=x3-5x2+16x-80=0 f(x)=x3-5x2+16x-80=0 根根 第45页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 46(1)取两个不一样点x1,x2,假如f(x1)和f(x2)符号相反,则(x1,x2)区间内必有一个根。假如f(x1)与f(x2)同符号,则应改变x1,x2,直到f(x1)、f(x2)异号为止。注意x1、x2值不应差太大,以确保(x1,x2)区间内只有一个根。(2)连接(x1,f(x1)和(x2,f(x2)两点,此线(即弦)交x轴于x。方法:方法:第46页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 47(3)(3)若f(x)与f(x1)同符号,则根必在(x,x2)区间内,此时将x作为新x1。假如f(x)与f(x2)同符号,则表示根在(x1,x)区间内,将x作为新x2。(4)(4)重复步骤(2)和(3),直到 f(x)为止,为一个很小数,比如 10-6.此时认为 f(x)0 第47页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 48N-S流程图流程图 第48页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 49分别用几个函数来实现各部分功效分别用几个函数来实现各部分功效:(1)用函数f(x)代表x函数:x3-5x2+16x-80.(2)用函数调用xpoint(x1,x2)来求(x1,f(x1)和 (x2,f(x2)连线与x轴交点x坐标。(3)用函数调用root(x1,x2)来求(x1,x2)区间 那个实根。显然,执行root函数过程中要用 到函数xpoint,而执行xpoint函数过程中要用 到f函数。第49页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 50 float f(float x)*定义函数,以实定义函数,以实 现现f(x)x3-5x2+16x-80*;=(-.)*+.)*-.;();();第50页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 51float xpoint(float x1,float x2)*定义定义xpoint函数,求出弦与函数,求出弦与x轴交点轴交点*/;=(*()()-*()()()()-();();();();第51页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 52float root(float,float)/*定义定义root函数,求近似根函数,求近似根*/,;,;();();do (,);(,);();();if(*)/*()与与()同符号同符号*/;while()().););();();第52页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 53 void main()()主函数主函数float,;,;do printf(,:);,:);scanf(,);(,);();();();();while(*););(,);(,);printf(root of equation is .n,);运行情况以下:运行情况以下:,:,root of equation is 第53页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 548函数递归调用函数递归调用 在在调调用用一一个个函函数数过过程程中中又又出出现现直直接接或或间间接接地地调调用用该该函函数数本本身身,称称为为函函数数递递归归调调用用。语语言言特特点之一就在于允许函数递归调用。比如:点之一就在于允许函数递归调用。比如:(int),;,;();();return(*););第54页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 55第55页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 56例例 8 有个人坐在一起,问第个人多少岁?有个人坐在一起,问第个人多少岁?他说比第个人大岁。问第个人岁数,他说比第他说比第个人大岁。问第个人岁数,他说比第个人大岁。问第个人,又说比第个人大岁。个人大岁。问第个人,又说比第个人大岁。问第个人,说比第个人大岁。最终问第个人,问第个人,说比第个人大岁。最终问第个人,他说是岁。请问第个人多大。他说是岁。请问第个人多大。()()()()()()()()()()()()()()()()()()能够用数学公式表述以下:能够用数学公式表述以下:()()()()()()()第56页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 57能够用一个函数来描述上述递归过程:能够用一个函数来描述上述递归过程:int age(int)*求年纪递归函数求年纪递归函数*int;*用作存放函数返回值变量用作存放函数返回值变量*if()();else ();();return();();用一个主函数调用用一个主函数调用age函数,求得第函数,求得第5人年纪。人年纪。#include void main()()(,();,();运行结果以下:运行结果以下:第57页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 58例例8.8.用递归方法求!用递归方法求!求!也能够用递归方法,即!等于求!也能够用递归方法,即!等于!,而!,而!。!。可用下面递归公式表示:可用下面递归公式表示:!(,)(,)()!()!()()第58页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 59例例 8.8.(汉诺)塔问题(汉诺)塔问题。这。这是一个古典数学问题,是一个用递归方法解题是一个古典数学问题,是一个用递归方法解题经典例子。问题是这么:古代有一个梵塔,塔经典例子。问题是这么:古代有一个梵塔,塔内有内有3 3个座个座A A、B B、C C,开始时座上有个盘,开始时座上有个盘子,盘子大小不等,大在下,小在上(见图子,盘子大小不等,大在下,小在上(见图8 8)。有一个老和尚想把这个盘子从)。有一个老和尚想把这个盘子从座移到座,但每次只允许移动一个盘,且座移到座,但每次只允许移动一个盘,且在移动过程中在在移动过程中在3 3个座上都一直保持大盘在下,个座上都一直保持大盘在下,小盘在上。在移动过程中能够利用座,要求小盘在上。在移动过程中能够利用座,要求编程序打印出移动步骤。编程序打印出移动步骤。第59页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 60第60页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 61为便于了解,我们先分析将座上个盘子移到座上过程:(1)将座上个盘子移到座上(借助);(2)将座上个盘子移到座上;(3)将座上个盘子移到座上(借助)。其中第()步能够直接实现。第步又可用递归方法分解为:将上个盘子从移到;将上个盘子从移到;将上个盘子从移到。第()步能够分解为:将上个盘子从移到上;将上个盘子从移到上;将上个盘子从移到上。将以上综合起来,可得到移动3个盘子步骤为,。第61页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 62由上面分析可知:将个盘子从座移到座能够分解为以下3个步骤:(1)将上个盘借助座先移到座上。(2)把座上剩下一个盘移到座上。(3)将个盘从座借助于座移到座上。第62页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 63程序以下:程序以下:#include void main()void hanoi(int n,char one,char two,char three);/*对对hanoi函数申明函数申明*/int m;printf(input the number of diskes:);scanf(“%d”,&m);printf(The step to moveing%d diskes:n,m);hanoi(m,A,B,C);第63页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 64void hanoi(int n,char one,char two,char three)/*定义定义hanoi函数函数,将个盘从将个盘从one座借助座借助two座,移座,移到到three座座*/void move(char x,char y);/*对对move函数申明函数申明*/if(n=1)move(one,three);else hanoi(n-1,one,three,two);move(one,three);hanoi(n-1,two,one,three);void move(char x,char y)/*定义定义move函数函数*/printf(“%c-%cn,x,y);第64页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 65运行情况以下:运行情况以下:input the number of diskes:3 The steps to noving 3 diskes:第65页计算机科学与技术系计算机科学与技术系 Department of Computer ScienceDepartment of Computer Science 668.数组作为函数参数数组作为函数参数8.7.1 8.7.1 数组元素作函数实参数组元素作函数实参数组元素作函数实参数组元素作函数实参因因为为实实参参能能够够是是表表示示式式,而而数数组组元元素素能能够够是是表表示示式式组组成成部部分- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 第三 函数 公共课 一等奖 全国 获奖 课件
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文