资源描述:
《第五章 模块化程序设计_函数ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第5章模块化程序设计5.1概述5.2函数定义的一般形式5.3函数参数和函数的值5.4函数的调用5.5函数的嵌套调用5.6函数的递归调用5.7局部变量和全局变量5.8动态存储变量与静态存储变量5.9内部函数和外部函数5.10编译预处理5.11“文件包含”处理5.12条件编译第5章模块化程序设计在进行程序设计时,程序员总是将复杂的问题进行分解,化整为零。编写一段小程序就能解决一个小问题,然后将这些小程序拼装起来就能解决非常大而复杂的问题。在C中,这些小程序统称为函数。在C中,由系统提供的函数放在函数库中供用户选用,以减少重复编写程序模
2、块的工作量。所有函数都是平行的,相互独立不能嵌套,但可以相互调用。C函数分标准函数(库函数)和自定义函数。C函数本身分有参函数和无参函数。5.1概述5.2函数定义的一般形式1.无参函数的定义形式类型标识符函数名(){说明部分;语句;}无参函数一般不需要返回函数值,可以省略类型标识符。2.有参函数的定义形式类型标识符函数名(形式参数表)形式参数说明;{说明部分;语句;}例:intmax(x,y)intx,y;/形式参数说明/{intz;/函数体中的说明部分/z=x>y?x:y;return(z);}类型说明符函数名()
3、{}“空函数”什么操作也不做。其作用是在此处留一函数的位置,以便将来扩充功能之用。函数名也在将来换取实际的函数名。这两行可以写成一行:intmax(intx,inty)3.“空函数”5.3函数参数和函数的值1.形式参数和实际参数例5.1从键盘输入两个数,输出其中较大的一个。main(){inta,b,c;scanf(“%d,%d”,&a,&b);c=max(a,b);/a,b为实际参数/printf(“Maxis%d”,c);}max(x,y)/x,y为形式参数/intx,y;{intz;z=x>y?x:y;return(
4、z);}注意:形参变量在被调用前不占用存储单元;在被调用结束后,形参所占存储单元亦被释放。实参可以是常量、变量或表达式。必须指定形参类型,且必须与实参的类型一致。实参对形参的数据传递是“值传递”。即单向传递,不能逆传。可以在形参表中直接说明形参类型。如:intmax(intx,inty);floatfun(inta[10],intn);2.函数的返回值函数的返回值是通过return语句获得的。当不需返回函数值时,可省去return语句。return语句的后面可以有括号,也可以没有。如:returnz;return(
5、z);return语句的后面可以是变量,也可以是表达式。如:return(x>y?x:y);return语句返回值的类型应与该函数的类型一致。否则以函数类型为准。若函数中没有return语句,则该函数被调用后也会带回不确定的值。{inta,b,c;a=printstar();b=print_message();c=printstar();printf(“%d,%d,%d”,a,b,c);}输出的a,b,c的值将是各个被处理的字符串的长度。为了明确表示不需要函数返回值,可以用“void”定义函数为“无类型”。此时,不得使
6、用a=printstar()之类的语句。凡不需要返回值的函数,一般均定义为“void”类型。如:均为处理字符串的函数且均没有return语句。5.4函数的调用1.函数调用的一般形式函数名(实参表)说明:对于无参函数,尽管没有“实参表”,但也不得省略括号。“实参表”中的参数之间用逗号分开。实参与形参之间的个数及类型必须一一对应。对实参求值的顺序是自左至右还是自右至左,视具体的系统而定。TurboC和MSC是按自右至左的顺序求值。例5.2main(){inti=2,p;p=f(i,++i);printf(“%d”,p);}in
7、tf(a,b);inta,b;{intc;if(a>b)c=1;elseif(a==b)c=0;elsec=–1;return(c);}输出结果:0注意:这里是按自右至左求值的,相当于fun(3,3)。若按自左至右求值,则相当于fun(2,3),则输出为–1。先执行++i使i的值为3再将i的值3传递给bb的值为3然后将i的值3传递给aa的值为3,2.函数调用的方式调用函数,可以有如下三种方式:将函数调用作为一个语句。如:printf(“MSCpragramming”);gets(s);将被调用的函数写在表达式中。如:c=2m
8、ax(a,b);注意:被调用函数max必须有确定的返回值。将函数调用作为一个函数的实参。如:m=max(max(a,b),c);3.对被调用函数的说明在一个函数中调用另一个函数时:如果被调函数为库函数,则应在文件开头用“#include”命令声