资源描述:
《第2讲-1复习函数.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第五讲函数参考书《C程序设计》1本讲主要内容函数的定义函数的调用函数间的数据传递变量的存储类型变量的作用范围内部函数和外部函数2函数的定义语法形式类型标识符函数名(形式参数表)形式参数说明{说明部分语句}若无参数,可写void或空。是被初始化的内部变量,寿命和可见性仅限于函数内部。若不说明类型,一律自动按整型处理。3函数的调用调用前先说明函数原型:在调用函数的说明部分按如下形式说明:类型标识符被调用函数名(含类型说明的形参表)调用形式函数名(实参)嵌套调用C语言不允许嵌套定义,但可以嵌套调用递归调用函数直接或间接调用自身例1例2
2、例34例1:求两数之和main(){floatadd(floatx,floaty);floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);printf("sumis%f",c);}floatadd(floatx,floaty){floatz;z=x+y;return(z);}运行结果:输入:3,47输出:sumis7.000000abcx3y4z77345例2:用递归方法求n!分析:1(n=0,1)可用递归公式:n!=n(n-1)!(n>1)算法要点:定义一个函数fac()求n!,主函数中输入n
3、的值,调用fac()。6例2:用递归方法求n!floatfac(intn){floatf;if(n<0)printf("n<0,dataerror!");elseif(n==0
4、
5、n==1)f=1;elsef=fac(n-1)*n;return(f);}7例2:用递归方法求n!(续)main(){floatfac(intn);intn;floaty;printf("inputaintegernumber:");scanf("%d",&n);y=fac(n);printf("%d!=%15.0f",n,y);}运行结果:输入:10
6、输出:36288008例3:用递归方法求Hanoi问题题目:有三根针A、B、C。A针上有64个盘子,盘子大小不等,大的在下,小的在上。要求把这64个盘子从A针移到C针,在移动过程中可以借助B针,每次只允许移动一个盘,且在移动过程中在三根针上都保持大盘在下,小盘在上。ABC9例3:用递归方法求Hanoi问题分析将n个盘子从A针移到C针可以分解为下面三个步骤:1.将A上n-1个盘子移到B针上(借助C针);2.把A针上剩下的一个盘子移到C针上;3.将n-1个盘子从B针移到C针上(借助A针)。事实上,上面三个步骤包含两类操作:1.
7、将n-1个盘子从一个针移到另一个针上(n>1),这是一个递归的过程;2.将1个盘子从一个针上移到另一针上。于是用两个函数分别实现上面两类操作,用hanoi函数实现第一类操作,用move函数实现第2类操作。10例3:用递归方法求Hanoi问题voidmove(chargetone,charputone){printf("%c-->%c",getone,putone);}voidhanoi(intn,charone,chartwo,charthree){voidmove(chargetone,charputone);if(n==
8、1)move(one,three);else{hanoi(n-1,one,three,two);move(one,three);hanoi(n-1,two,one,three);}}11例3:用递归方法求Hanoi问题main(){voidhanoi(intn,charone,chartwo,charthree);intm;printf("inputthenumberofdiskes:");scanf("%d",&m);printf("thesteptomoving%3ddiskes:",m);hanoi(m,'A','B'
9、,'C');}12例3:用递归方法求Hanoi问题运行结果:输入:3输出:Thesteptomoving3diskes:A-->CA-->BC-->BA-->CB-->AB-->CA-->C13函数间的数据传递——三种传递方式返回值参数全局变量14内部函数和外部函数内部函数只能被本文件中其它函数所调用,定义形式:static类型标识符函数名(形参表)外部函数可以为其它文件调用,定义形式:extern类型标识符函数名(形参表)extern缺省时隐含为外部函数调用文件中也要用extern说明举例P182例8.2215作业复习:第八章
10、P1868.8,8.11,8.15,8.1716函数的返回值通过return语句返回。return语句只能把一个返值传递给调用函数。返回值的类型为定义的函数类型,若return语句中表达式类型与函数类型不一致,则转换为函数类型。返回值可以是数值,也可以是地址。当