C语言程序设计 (2).ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《C语言程序设计 (2).ppt》由会员分享,可在线阅读,更多相关《C语言程序设计 (2).ppt(52页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第八章第八章 函数函数C语言程序设计 第八章函数C1C语言程序设计 第八章函数C第八章第八章 函数函数函数定义的一般形式函数参数和函数的值函数的调用函数的嵌套和递归调用局部变量和全局变量数组作为函数参数C语言程序设计 第八章函数CC语言程序设计 第八章函数C C语言程序设计 第八章函数C例例1.3void main()int a,b,c;scanf(%d,%d,&a,&b);c=max(a,b);printf(Max=%d,c);int max(int x,int y)int z;if(xy)z=x;else z=y;return(z);5,8 Max=8主主函数函数 子函数子函数函数调用函数
2、调用C语言程序设计 第八章函数C 一个较大的程序一般应分为若干个程序模块,一个较大的程序一般应分为若干个程序模块,每个模块实现一个特定的功能,这些模块称为子每个模块实现一个特定的功能,这些模块称为子程序,在程序,在C C语言中子程序用函数实现语言中子程序用函数实现。mainabca1abb1b2不能被调用不能被调用所有函数都是所有函数都是平行的,不能平行的,不能嵌套定义嵌套定义分为分为:库函库函数和自定义数和自定义函数函数C语言程序设计 第八章函数C8.1 8.1 概述概述例 8.1 简单的函数调用void main()printstar();print_message();printstar
3、();void printstar()printf(“*nn”);void print_message()printf(“Very Good!nn”);运行结果:*Very Good!*主函数主函数 子函数子函数1 1 子函数子函数2 2C语言程序设计 第八章函数Cv 关于函数的几点说明:关于函数的几点说明:(1)(1)复杂的程序通常由多个模块组成。复杂的程序通常由多个模块组成。(2)(2)一个源文件由一个源文件由一个主函数一个主函数和和若干个子函数若干个子函数组成。组成。(3)(3)C C 程序的执行从程序的执行从 main main 函数开始。函数开始。(4)(4)主函数以外的所有的函数都
4、是平行的。主函数以外的所有的函数都是平行的。(5)(5)从用户的角度看从用户的角度看,函数分函数分库函数库函数和和自定义函数自定义函数。(6)(6)从函数形式上看从函数形式上看,函数分函数分无参数函数无参数函数和和有参数函数有参数函数 8.1 8.1 概述概述C语言程序设计 第八章函数C定义定义函数的格式函数的格式类型标识符类型标识符 函数名(形式参数表)函数名(形式参数表)说明部分说明部分 语句语句若无参数,建议写若无参数,建议写void。是被初始化的内部变量,是被初始化的内部变量,寿命和可见性仅限于函寿命和可见性仅限于函数内部。数内部。若不说明类型,一律自若不说明类型,一律自动按整型动按整
5、型 int 处理。处理。int add(int x,int y)int z;z=x+y;return z;void printstar(void)printf(“*n”);没有没有“;”C语言程序设计 第八章函数Cint max(int x,int y)int z;z=(x=y?x:y);return(z);void output()printf(“Hello World!n”);或或 return z;无返回值的函数我们也无返回值的函数我们也可以称之为可以称之为过程过程,一般,一般用过程来显示一些提示。用过程来显示一些提示。int x,y;void blank()空函数空函数C语言程序设计
6、第八章函数C8.3 8.3 函数参数和函数的值函数参数和函数的值8.3.1 形式参数和实际参数形式参数和实际参数v 形式参数:形式参数:在定义函数时在定义函数时函数名后面括号中的变量名函数名后面括号中的变量名v 实际参数:实际参数:在调用函数时在调用函数时函数名后面括号中的参数函数名后面括号中的参数(可以是表达式)(可以是表达式)C语言程序设计 第八章函数C8.3 8.3 函数参数和函数的值函数参数和函数的值 c=max(a,b);(main 函数)函数)(max 函数)函数)max(int x,int y)int z;z=xy?x:y;return(z);void main()int a,b
7、,c;scanf(%d,%d,&a,&b);c=max(a,b);printf(Max is%d,c);int max(int x,int y)int z;z=xy?x:y;return(z);实参实参 形参形参C语言程序设计 第八章函数C关于形参和实参的说明关于形参和实参的说明 形参在函数被调用前不占内存形参在函数被调用前不占内存;函数调用时为形参分配函数调用时为形参分配内存;调用结束,内存释放。内存;调用结束,内存释放。实参可以是常量、变量或表达式。实参可以是常量、变量或表达式。例如:例如:max(3,a+b);在被定义的函数中,必须指定形参的类型。在被定义的函数中,必须指定形参的类型。例
8、如:例如:max(int x,int y);形参与实参类型一致,个数相同。形参与实参类型一致,个数相同。实参变量对形参变量的数据传递是值传递,即实参变量对形参变量的数据传递是值传递,即单向传递单向传递,只能由实参传给形参。只能由实参传给形参。8.3 8.3 函数参数和函数的值函数参数和函数的值C语言程序设计 第八章函数C8.3 8.3 函数参数和函数的值函数参数和函数的值8.3.1 函数的返回值函数的返回值v 形式:形式:return(表达式表达式);或或 return 表达式表达式;v 功能:功能:使程序从被调用函数返回到调用函数中,同使程序从被调用函数返回到调用函数中,同时把返回值带给调用
9、函数。时把返回值带给调用函数。C语言程序设计 第八章函数C1 1、函数的返回值是通过、函数的返回值是通过 returnreturn 语句获得的。语句获得的。2、若无若无return语句,遇结束的语句,遇结束的 时,自动返回调用函数时,自动返回调用函数。8.3 8.3 函数参数和函数的值函数参数和函数的值void output()printf(“Hello World!”);int max(int x,int y)int z;z=xy?x:y;return(z);C语言程序设计 第八章函数C3、如果函数值的类型、如果函数值的类型和和return 语句中表达语句中表达式值类型不一式值类型不一 致,
10、系致,系统会自动转换为统会自动转换为函数函数类型类型。8.3 8.3 函数参数和函数的值函数参数和函数的值int max(float x,float y)float z;z=xy?x:y;return(z);main()float a,b;int c;scanf(%f,%f,&a,&b);c=max(a,b);printf(Max is%dn,c);省略也是省略也是 int 型型1.5,2.5 Max is 2C语言程序设计 第八章函数C8.4.1 函数调用的一般形式函数调用的一般形式v 形式:形式:函数名函数名(实参列表实参列表);或或 函数名函数名();v 实参表求值顺序:实参表求值顺序:
11、因因C版本而不同(版本而不同(Turbo C 自右向左自右向左)C语言程序设计 第八章函数Cvoid main()int a,b,c;scanf(%d,%d,&a,&b);c=max(a,b);printf(Max is%d,c);int max(int x,int y)int z;z=xy?x:y;return(z);实参求值实参求值 由右至左!由右至左!实参到形参,实参到形参,类型顺序一致类型顺序一致未调用时未调用时不占内存不占内存8.3 8.3 函数参数和函数的值函数参数和函数的值C语言程序设计 第八章函数Cmain()int i=2,p;p=f(i,+i);printf(%d,p);i
12、nt f(int a,int b)int c;if(ab)c=1;else if(a=b)c=0;else c=-1;return(c);8.4 8.4 函数的调用函数的调用输出:输出:0main()int i=2,p;p=f(i,i+);printf(%d,p);int f(int a,int b)int c;if(ab)c=1;else if(a=b)c=0;else c=-1;return(c);输出:输出:1p=f(3,3);p=f(3,2);C语言程序设计 第八章函数C8.4.2 函数调用的方式函数调用的方式v 函数语句:函数语句:例例 printstar();v 函数表达式:函数表
13、达式:例例 m=max(a,b)*2;v 函数参数:函数参数:例例 printf(“%d”,max(a,b);m=max(a,max(b,c);总之,表达式可以出现的地方总之,表达式可以出现的地方函数调用都可以出现!函数调用都可以出现!C语言程序设计 第八章函数C8.4.3 对函数的声明对函数的声明v 对被调用函数的要求:对被调用函数的要求:必须是必须是已存在已存在的函数的函数 调用调用库函数库函数需加头文件需加头文件:#include include 用户自定义函数用户自定义函数:需要事先需要事先对被对被调用调用函数作声明函数作声明 例例 int max(int x,int y );注意注意
14、函数定义函数定义和和函数声明函数声明的区别!的区别!C语言程序设计 第八章函数Cvoid main()float a,b,c;scanf(%f,%f,&a,&b);c=add(a,b);printf(“Sum is%fn,c);float add(float x,float y)/*函数的定义函数的定义*/float z;z=x+y;return(z);float add(float x,float y);/*对被调用函数的声明对被调用函数的声明*/被调函数的定义在主函数前可以不加声明被调函数的定义在主函数前可以不加声明C语言程序设计 第八章函数Cmain()调调 max()结束结束max()
15、返回返回保存:保存:返回地址返回地址当前现场当前现场恢复:恢复:主调程序现场主调程序现场返回地址返回地址8.4 8.4 函数的调用函数的调用C语言程序设计 第八章函数Cmain调调函数函数a结束结束a函数函数调函数调函数b返回返回b函数函数返回返回8.5 8.5 函数的嵌套调用函数的嵌套调用嵌套调用嵌套调用v C语言不能嵌套定义函数,但可以嵌套调用函数语言不能嵌套定义函数,但可以嵌套调用函数。C语言程序设计 第八章函数Cvoid main(void)/*主函数主函数*/int a,b;scanf(“%d,%d”,&a,&b);printf(“The result is:%dn”,fun1(a,
16、b);8.5 8.5 函数的嵌套调用函数的嵌套调用int fun1(int x,int y)int z;z=fun2(x)+fun2(y);return(z);int fun2(int m)return(m*m);C语言程序设计 第八章函数C递归调用递归调用v 函数函数直接直接或或间接间接地调用自身,称为递归调用。地调用自身,称为递归调用。f()调调f调调f2调调f1f1()f2()int f(int x)int y,z;z=f(y);.return(2*z);int f1(int x)int y,z;z=f2(y);.return(2*z);int f2(int t)int a,c;c=f1
17、(a);.return(3+c);C语言程序设计 第八章函数Cv分析:分析:1 (n=0,1)递归公式:递归公式:n!=n*(n-1)!(n 1)v 递归过程分两个阶段递归过程分两个阶段 递推:递推:4!=43!3!=32!2!=21!1!=10!0!=1 未知未知 已知已知回归:回归:4!=43!=243!=32!=62!=21!=21!=10!=10!=1未知未知 已知已知C语言程序设计 第八章函数Cvoid main()/*主函数主函数*/float fac(int n);/*函数声明函数声明*/int n;float y;printf(input a integer number:);
18、scanf(%d,&n);y=fac(n);printf(%d!=%10.0f,n,y);float fac(int n)/*被调函数被调函数*/float f;if(n0)printf(n%c”,s,d);有两个盘子时有两个盘子时,我们定义函数我们定义函数hanoi2:hanoi2(char a,char b,char c)move(a,b);move(a,c);move(b,c);/*结论结论,可以通过可以通过hanio2,将两个盘子从任意针移至另一针将两个盘子从任意针移至另一针*/顺序为:源,辅助,目的顺序为:源,辅助,目的 有三个盘子时有三个盘子时,定义函数定义函数hanoi3:han
19、oi3(char a,char b,char c)hanoi2(a,c,b);move(a,c);hanoi2(b,a,c);/*hanoi3可可移动三个盘子移动三个盘子*/C语言程序设计 第八章函数C有四个盘子时有四个盘子时,定义函数定义函数hanoi4:hanoi4(char a,char b,char c)hanoi3(a,c,b);move(a,c);hanoi3(b,a,c);/结论结论:*hanoi4可以将四个盘子从任意一针移至另一针可以将四个盘子从任意一针移至另一针*/推广推广推广推广:hanoin:hanoin(char a,char b,char c)hanoin-1(a,c
20、,b);/*实际程序中不能有实际程序中不能有hanoin-1这样命名的函数这样命名的函数*/move(a,c);hanoin-1(b,a,c);/*可以看出可以看出,n-1是将问题逐步简化的关键是将问题逐步简化的关键,怎样处理怎样处理n-1呢呢?*/既然既然n是一个不断变化的量是一个不断变化的量,可以考虑作为一个函数参数可以考虑作为一个函数参数:hanoi(int n,char a,char b,char c)hanoi(n-1,a,c,b);move(a,c);hanoi(n-1,b,a,c);C语言程序设计 第八章函数C通过上面分析通过上面分析,可以看出可以看出:将将n 个盘子从个盘子从A
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 2 语言程序设计
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内