C语言课件:第八章函数.ppt
《C语言课件:第八章函数.ppt》由会员分享,可在线阅读,更多相关《C语言课件:第八章函数.ppt(38页珍藏版)》请在三一办公上搜索。
1、1,第 8 章 函数,2,在进行程序设计时,程序员总是将复杂的问题进行分解,化整为零。编写一段小程序就能解决一个小问题,然后将这些小程序拼装起来就能解决非常大而复杂的问题。在 C 中,这些小程序统称为函数。,在 C 中,由系统提供的函数放在函数库中供用户选用,以减少重复编写程序模块的工作量。,所有函数都是平行的,相互独立不能嵌套,但可以相 互调用。,C 函数分标准函数(库函数)和自定义函数。,C 函数本身分有参函数和无参函数。,8.1 概述,第 8 章 函数,3,8.2 函数定义的一般形式,1无参函数的定义形式,类型标识符 函数名()说明部分;语句;,无参函数一般不需要返回函数值,可以省略类型
2、标识符。,2有参函数的定义形式,类型标识符 函数名(形式参数表)形式参数说明;说明部分;语句;,4,例:int max(x,y)int x,y;/形式参数说明/int z;/函数体中的说明部分/z=xy?x:y;return(z);,类型说明符 函数名(),“空函数”什么操作也不做。其作用是在此处留一函数的位置,以便将来扩充功能之用。函数名也在将来换取实际的函数名。,3“空函数”,5,8.3 函数参数和函数的值,1形式参数和实际参数,例8.2 从键盘输入两个数,输出其中较大的一个。main()int a,b,c;scanf(“%d,%d”,6,注意:,形参变量在被调用前不占用存储单元;在被调用
3、结束 后,形参所占存储单元亦被释放。,实参可以是常量、变量或表达式。,必须指定形参类型,且必须与实参的类型一致。,实参对形参的数据传递是“值传递”。即单向传递,不 能逆传。,可以在形参表中直接说明形参类型。,如:,int max(int x,int y);,float fun(int a10,int n);,7,2函数的返回值,函数的返回值是通过return语句获得的。当不需返 回函数值时,可省去return语句。,return语句的后面可以有括号,也可以没有。,如:,return z;return(z);,return语句的后面可以是变量,也可以是表达式。,如:,return(x y?x:y
4、);,return语句返回值的类型应与该函数的类型一致。否则以函数类型为准。,8,若函数中没有return语句,则该函数被调用后也会带 回不确定的值。,int a,b,c;a=printstar();b=print_message();c=printstar();printf(“%d,%d,%dn”,a,b,c);,输出的a,b,c的值将是各个被处理的字符串的长度。,为了明确表示不需要函数返回值,可以用“void”定义 函数为“无类型”。此时,不得使用 a=printstar()之 类的语句。,凡不需要返回值的函数,一般均定义为“void”类型。,如:,9,8.4 函数的调用,1函数调用的一般
5、形式,函数名(实参表),说明:,对于无参函数,尽管没有“实参表”,但也不得省略 括号。,“实参表”中的参数之间用逗号分开。,实参与形参之间的个数及类型必须一一对应。,对实参求值的顺序是自左至右还是自右至左,视具体 的系统而定。Turbo C 和 MS C 是按自右至左的顺 序求值。,10,例8.4main()int i=2,p;p=f(i,+i);printf(“%d”,p);int f(a,b);int a,b;int c;if(a b)c=1;else if(a=b)c=0;else c=1;return(c);,输出结果:0,b 的值为3,a 的值为3,11,2函数调用的方式,调用函数,
6、可以有如下三种方式:,将函数调用作为一个语句。,如:,printf(“MS C programming”);,gets(s);,将被调用的函数写在表达式中。,如:,c=2 max(a,b);,注意:被调用函数 max 必须有确定的返回值。,将函数调用作为一个函数的实参。,如:,m=max(max(a,b),c);,3对被调用函数的说明,在一个函数中调用另一个函数时:,如果被调函数为库函数,则应在文件开头用“#include”命令 声明相应的“头文件”。,如:,#include“stdio.h”#include“math.h”,12,如果被调函数为自定义函数且其定义在主调函数定义之后,则 应在主
7、调函数中说明其类型。,类型标识符 被调函数名();,如:float add();,其语句形式为:,如果被调函数为自定义函数且其定义在主调函数定义之前,则 在主调函数中可不必说明其类型。因为编译程序已知道其类型,如果被调函数的值是整型或字符型,可不必说明类型,系统自 动按整型说明。,如果在所有被调函数定义之前、在文件的开头、在函数的外部 已对被调函数作了类型说明,则在各主调函数中可不必说明其 类型。,如:,char letter();float f();int i();main(),/主调函数中不必说明它所调用的函数的类型/,13,例:编程求11999之间的数 m,而 m、m2 和 m3 均是回
8、文数。,如:m=11、m2=121、m3=1331,。,#include“stdio.h”main()long int m;for(m=11;m1000;m+)if(fun(m),14,8.5 函数的嵌套调用,C 语言函数的定义都是相互平行、独立的,不能嵌套定义。但可以嵌套调用函数。所谓函数的嵌套调用就是在被调用的函数中又调用另外的函数。,Main()x=root(x1,x2);/*调用root函数*/,Float root(float y1,float y2)y1=f(x);/*调用f 函数*/,15,8.6 函数的递归调用,自己调用自己,递归一次,分配一次存储单元,返回时,一层一层返回;,
9、2 递归程序示例,1 递归的概念,递归分为:直接递归:函数中自己调用自己;间接递归:在调用其他函数中调用自己。,16,例8.7 有5人排成一队,从最后一人开始,其年龄均比 前面的人大2岁,而最前面的人年龄是10岁,问 最后一人的年龄是多少岁?,main(),age(5),age(4)+2,age(n)n=5,age(3)+2,age(n)n=4,age(2)+2,age(n)n=3,age(1)+2,age(n)n=2,age(1),age(n)n=1,age(1)=10,age(2)=12,age(3)=14,age(4)=16,age(5)=18,输出age(5),age(n)int n;
10、int c;if(n=1)c=10;else c=age(n1)+2;return(c);,main()printf(“%dn”,age(5);,运行结果:18,17,函数的递归调用利用了堆栈技术。在本例中:,Age(5),Age(51)+2,Age(41)+2,Age(31)+2,Age(21)+2,10+2=12,12+2=14,14+2=16,16+2=18,18,Age(21)+2,Age(31)+2,Age(41)+2,Age(51)+2,Age(5),Age(5),Age(51)+2,Age(41)+2,Age(31)+2,Age(21)+2,入栈,出栈,出栈结果,18,例:把一非
11、零的整数倒序打印,main()int aa();int n;scanf(“%d”,19,例:读入一串字符,并倒序打印,main()char abc();abc();char abc()char ch;scanf(“%c”,20,例:求两个数的最大公约数,main()int gcd(a,b);int n,m;scanf(“%d%d”,21,8.7 数组作为函数参数,1数组元素作函数实参,用法与变量参数相同,是单向传递,即“值传递”方式。,例:,main()y=fun(a0,a1.a2);float fun(float a,float b,float c)float sum,aver;sum=a+
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课件 第八 函数
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6504370.html