第2讲-1复习函数课件

上传人:我*** 文档编号:141182640 上传时间:2020-08-05 格式:PPT 页数:32 大小:314KB
返回 下载 相关 举报
第2讲-1复习函数课件_第1页
第1页 / 共32页
第2讲-1复习函数课件_第2页
第2页 / 共32页
第2讲-1复习函数课件_第3页
第3页 / 共32页
第2讲-1复习函数课件_第4页
第4页 / 共32页
第2讲-1复习函数课件_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《第2讲-1复习函数课件》由会员分享,可在线阅读,更多相关《第2讲-1复习函数课件(32页珍藏版)》请在金锄头文库上搜索。

1、1,第五讲 函数,参考书C程序设计,2,本讲主要内容,函数的定义 函数的调用 函数间的数据传递 变量的存储类型 变量的作用范围 内部函数和外部函数,3,函数的定义,语法形式 类型标识符 函数名(形式参数表) 形式参数说明 说明部分 语句 ,4,函数的调用,调用前先说明函数原型: 在调用函数的说明部分按如下形式说明: 类型标识符 被调用函数名 (含类型说明的形参表) 调用形式 函数名(实参) 嵌套调用 C语言不允许嵌套定义,但可以嵌套调用 递归调用 函数直接或间接调用自身,例 1,例 2,例 3,5,例1:求两数之和,main() float add(float x,float y); floa

2、t a,b,c; scanf(%f,%f,运行结果: 输入:3,4 7 输出:sum is 7.000000,a,b,c,x,3,y,4,z,7,7,3,4,6,例2:用递归方法求n!,分析: 1 (n=0,1) 可用递归公式: n!= n (n-1)! (n 1) 算法要点: 定义一个函数fac()求n!,主函数中输入n 的值,调用fac()。,7,例2:用递归方法求n!,float fac(int n) float f; if (n0) printf(n0,data error!); else if (n=0|n=1) f=1; else f=fac(n-1)*n; return(f);

3、,8,例2:用递归方法求n!(续),main() float fac(int n); int n; float y; printf(input a integer number:); scanf(%d, ,运行结果: 输入: 10 输出: 3628800,9,例3:用递归方法求Hanoi问题,题目: 有三根针A、B、C。A针上有64个盘子,盘子大小不等,大的在下,小的在上。要求把这64个盘子从A针移到C针,在移动过程中可以借助B针,每次只允许移动一个盘,且在移动过程中在三根针上都保持大盘在下,小盘在上。,10,例3:用递归方法求Hanoi问题,分析 将n 个盘子从A针移到C针可以分解为下面三个

4、步骤: 1.将A 上n-1个盘子移到 B针上(借助C针); 2.把A针上剩下的一个盘子移到C针上; 3.将n-1个盘子从B针移到C针上(借助A针)。 事实上,上面三个步骤包含两类操作: 1.将n-1个盘子从一个针移到另一个针上(n1),这是一个递归的过程; 2.将1个盘子从一个针上移到另一针上。 于是用两个函数分别实现上面两类操作,用hanoi函数实现第一类操作,用move函数实现第2类操作。,11,例3:用递归方法求Hanoi问题,void move(char getone,char putone) printf(%c-%cn,getone,putone); void hanoi(int n

5、,char one,char two,char three) void move(char getone,char putone); if (n=1) move (one,three); else hanoi (n-1,one,three,two); move(one,three); hanoi(n-1,two,one,three); ,12,例3:用递归方法求Hanoi问题,main() void hanoi(int n,char one,char two,char three); int m; printf(input the number of diskes:); scanf(%d, ,

6、13,例3:用递归方法求Hanoi问题,运行结果: 输入:3 输出:The step to moving 3 diskes: A - - C A - - B C - - B A - - C B - - A B - - C A - - C,14,函数间的数据传递 三种传递方式,返回值 参数 全局变量,15,内部函数和外部函数,内部函数 只能被本文件中其它函数所调用,定义形式:static 类型标识符 函数名(形参表) 外部函数 可以为其它文件调用,定义形式:extern 类型标识符 函数名(形参表)extern缺省时隐含为外部函数 调用文件中也要用extern说明 举例 P182 例8.22,1

7、6,作 业,复习:第八章 P186 8.8, 8.11, 8.15, 8.17,17,函数的返回值,通过 return 语句返回。 return 语句只能把一个返值传递给调用函数。 返回值的类型为定义的函数类型,若 return 语句中表达式类型与函数类型不一致,则转换为函数类型。 返回值可以是数值,也可以是地址。当返值是地址时,应该用指针接受它。 无返回值的函数,定义为 void 类型。,18,函数间的参数传递,在函数被调用时才分配形参的存储单元。 实参可以是常量、变量或表达式。 实参类型必须与形参相符。 传递时是传递参数值,即单向传递。 使用地址作为参数,可以返回函数处理结果。 数组作为参

8、数时的情况。 数组元素作实参,与单个变量一样。 数组名作参数,形、实参数都应是数组名,类型要一样,传送的是数组首地址。,例 4,19,使用全局变量传递数据,在所有函数之外说明的变量是全局变量,它在所有函数中都是可见的。 利用全局变量的这个特性,可以在函数间传递数据,注:变量的类型和作用范围,20,变量的存储类型,auto(自动)型 存放在堆栈区域中。属于一时性存储,其存储空间可以被若干变量多次覆盖使用。 register(寄存器)型 (一般情况下不必这样指定) 存放在CPU的通用寄存器中 long,double,float不能设为register型,因为超过寄存器长度 static(静态)型

9、存放在一般内存区域中,21,变量的作用范围,局部变量 在函数内部说明的变量 可以是: auto型、register型 只能是局部变量 static型 全局寿命、局部可见性 缺省为auto型 全局变量 在所有函数之前说明的变量 可以是: static型只允许在本程序文件中引用 缺省型可以被其它文件中的函数引用 但要在引用函数中用 extern 说明.,例 5,例 6,22,不同类型变量的初始化,auto和register变量若被初始化,则每当进入该程序块后,都执行该变量的初始化赋值功能。 没有进行初始化的auto和register变量,其初值不定,不能直接在程序中使用。 static和全局变量若

10、不初始化,自动赋0。 static和全局变量初始化时必须用常量为其赋初值,auto和register变量初始化时可以用常量或变量赋初值。 static型局部变量的初始化仅执行一次 extern型的变量不能进行初始化,例 7,23,例4:实参与形参之间的值传递,main() int a=5, b=10; void swap(int x,int y); printf(%d,%dn,a,b); swap(a,b); printf(%d,%dn,a,b); ,在内存中,实参单元与形参单元是不同的单元, 因此,在执行一个被调用函数时,形参的值如果发生变化时,并不会改变主调函数的实参的值。,24,例4:实

11、参与形参之间的值传递,void swap(int x,int y) int temp; temp=x; x=y; y=temp; ,运行结果: 5 , 10 5 , 10,25,例5:局部变量的使用范围,main() int i; static int a; register int b; void other(void); i=1;a=10; b=5; printf(-MAIN-n); printf(i:%d a:%d b:%dn,i,a,b); other(); printf(-MAIN-n); printf(i:%d a:%d b:%dn,i,a,b); ,i,a,b为局部变量,只在ma

12、in()函数内有效。,26,例5:局部变量的使用范围,void other(void) int i; static int a; i=16; a=100; printf(-OTHER-n); printf(i:%d a:%dn,i,a); ,i,a为局部变量,只在other()函数内有效。,27,例5:局部变量的使用范围,运行结果:,-MAIN- i:1 a:10 b:5 -OTHER- i:16 a:100 -MAIN- i:1 a:10 b:5,28,例6 全局变量的使用范围,int a; static int b; main() void next(void); a=30; b=100;

13、 printf(a:%d b:%dn,a,b); next(); printf(- a:%d b:%dn,a,b); void next(void) a=a+b; ,a ,b为全局变量,其有效范围为从定义变量的位置开始到本源程序结束。,29,例6 全局变量的使用范围,运行结果: a:30 b:100 a:130 b:100,30,例7 变量的初始化,int i=1; main() static int a; register int b=-10; int c=0; void other(void); printf(“-MAIN-n”); printf(i:%d a:%d b:%d c:%dn,

14、i,a,b,c); c=c+8; other(); printf(-MAIN-n); printf(i:%d a:%d b:%d c:%dn,i,a,b,c); i=i+10; other(); ,i 为全局变量。,a为静态局部变量,全局寿命,局部可见。,b, c为局部变量。,31,例7 变量的初始化,void other(void) static int a=2; static int b; int c=10; a=a+2; i=i+32; c=c+5; printf(-OTHER-n); printf(i:%d a:%d b:%d c:%dn,i,a,b,c); b=a; ,a,b为静态局部变量,全局寿命,局部可见,有继承性。,C为局部自动变量,每次进入都初始化。,32,例7 变量的初始化,i:1 a:0 b:-10 c:0 -MAIN- -OTHER- i:33 a:4 b:0 c:15 -MAIN- i:33 a:0 b:-10 c:8 -OTHER- i:75 a:6 b:4 c:15,运行结果:,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号