《第七章函数》ppt课件

上传人:tia****nde 文档编号:70818970 上传时间:2019-01-18 格式:PPT 页数:90 大小:503.81KB
返回 下载 相关 举报
《第七章函数》ppt课件_第1页
第1页 / 共90页
《第七章函数》ppt课件_第2页
第2页 / 共90页
《第七章函数》ppt课件_第3页
第3页 / 共90页
《第七章函数》ppt课件_第4页
第4页 / 共90页
《第七章函数》ppt课件_第5页
第5页 / 共90页
点击查看更多>>
资源描述

《《第七章函数》ppt课件》由会员分享,可在线阅读,更多相关《《第七章函数》ppt课件(90页珍藏版)》请在金锄头文库上搜索。

1、第七章 函数,7.1概 述 一个较大的程序一般应分为若干个程序模块,每一个模块用来实现一个特定的功能。所有的高级语言中都有子程序这个概念,用子程序来实现模块的功能。在语言中,子程序的作用是由函数来完成的。一个程序可由一个主函数和若干个函数构成。由主函数调用其函数,其它函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。图是一个程序中函数调用的示意图。,main a b c d e f g h h I e g,图7.1, 例71 main() printstar(); *调用printstar函数* print_message();*调用print_message函数* prints

2、tar(); *调用printstar函数* printstar() *printstar函数* printf(“*n”); print_message() *print_message函数* printf(“how do you don”); 程序演示 7_1.c,说明: 1一个源程序文件由一个或多个函数组成。一个源程序文件是一个编译单位,即以源文件为单位进行编译,而不是以函数为单位进行编译。 2C程序的执行从main函数开始,调用其它函数后流程回到main函数,在main函数中结束整个程序的运行。 main函数是系统定义的。,3所有函数都是平行的,即在定义函数时是互相独立的,一个函数并不从

3、属于另一函数,即函数不能嵌套定义,但可以互相调用,但不能调用main函数。 4从用户使用的角度看,函数有两种: (1)标准函数,即库函数。这是由系统提供的,用户不必自己定义这些函数,可以直接使用它们。应该说明,每个系统提供的库函数的数量和功能不同,当然有一些基本的函数是共同的。 (2)用户自己定义的函数,以解决用户的专门需要。,5. 从函数的形式看,函数分两类 (1)无参函数。如例71中的printstar和print_message就是无参函数。在调用无参函数时,主调函数并不将数据传送给被调用函数,一般用来执行指定的一组操作(例如例71那样,以printstar函数的作用就是输出18个星号)

4、。无参函数可以带回或不带回函数值,但一般以不带回函数值的居多。 Ex: int geti( ) int x; scanf(“%d”, ,(2)有参函数。在调用函数时,在主调函数和被调用函数之间有参数传递,也就是说,主调函数可以将数据传给被调用函数使用,被调用函数中的数据也可以带回来供主调函数使用。 Ex1:int max(int a,int b) int x; x=ab?a:b; return x; Ex2: void delay(long a ) int I; for(I=1;I=a;I+); ,72函数定义的一般形式 1无参函数的定义形式 类型标识符 函数名() 说明部分 语句 例71中的

5、printstar和print_message函数都是无参函数。用“类型标识符”指定函数值的类型,即函数带回来的值的类型。无参函数一般不需要带回函数值,因此可以不写类型标识符,例7.1就如此。,2有参函数定义的一般形式 类型标识符 函数名(形式参数表列) 形式参数说明 说明部分 语句 例如: int max (x,y) int x,y; *形式参数说明* int z; *函数体中的说明部分* z=xy?x:y; return(z);,3可以有“空函数”,它的形式为: 类型说明符 函数名() dummy ( ) 调用此函数时,什么工作也不做,没有任何实际作用。在主调函数中写上dummy()表明“

6、这里要调用一个函数”,而现在这个函数没有起作用,等以后扩充函数功能时补充上。,73 函数参数和函数的值 731 形式参数和实际参数 在调用函数时,大多数情况下,主调函数和被调用函数之间有数据传递关系。这就是前面提到的有参函数。在定义函数时函数名后面括弧中的变量名称为形式参数(“形参“),在调用函数时,函数名后面括弧中的表达式称为“实际参数”(简称“实参”)。 例72 main( ) int a,b,c; scanf(”%d,%d”, ,int max(x,y) *定义有参函数max* int x,y; int z : c=max(a,b) zXy?x,y; max(x,y) return(z)

7、; 运行情况如下: int x,y; 7,8 int z; Max is 8 z=xy?x:y return(z); 程序演示 7_2.c,图7.2,关于形参与实参的说明: 1在定义函数中指定的形参变量,在未出现函数调用时,它们并不占内存中的存储单元。只有在发生函数调用时函数max中的形参才被分配内存单元。在调用结束后,形参所占的内存单元也被释放。 程序演示 return.c 2实参可以是常量、变量或表达式,如: max (3,ab); 但要求它们有确定的值。在调用时将实参的值赋给形参变量。 3在被定义的函数中,必须指定形参的类型。 4实参与形参的类型应一致。字符型与整型可以互相通用。,5C语

8、言规定,实参变量对形参变量的传递是“值传递 ”,即单向传递。在内存中,实参单元对形参单元是不同的单元。如图73所示。 a 2 b 3 a 2 b 3 x 2 y 3 x 10 y 15 在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。 因此,在执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数的实参的值。例如,若在执行函数过程中x和y的值变为10和15,而a和b仍为2和3,见图74。 程序演示 return.c,图7.3,图7.4,6 ANSI新标准允许使用另一种方法对形参类型作说明,即在列出“形参表列”时,同时说

9、明形参类型。如: int max (int x,int y) 相当于:int max(x,y) int X,y; 又如: float fun (array,n) int array10,n; 可以写成 f1oat fun (int array10 ,int n) 这两种用法等价,都可以使用。,732函数的返回值 通常,希望通过函数调用使主调函数能得到一个确定的值,这就是函数的返回值。 下面对函数值作一些说明: 1函数的返回值是通过函数中的return语句获得的。 return语句将被调用函数中的一个确定值带回主调函数中去. 一个函数中可以有一个以上的return语句,执行到哪一个return语

10、句,哪一个语句起作用。 return语句后面的括弧也可以不要,如 return z; 它与“return(z)”等价。 return后面的值可以是一个表达式。例如,例72中的函数max可以改写如下: max (x,y) int x,y; return(xy?x: y);,2函数值的类型。既然函数有返回值,这个值当然应属于某一个确定的类型,应当在定义函数时指定函数值的类型。例如: int max(x,y) 函数值为整型 char letter(c1,c2)函数值为字符型 double min(x,y) 函数值为双精度型 注意:1)C语言规定,凡不加类型说明的函数,一律自动按整型处理。 2)在定义

11、函数时对函数值说明的类型一般应该和return语句中的表达式类型一致。,3如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准。对数值型数据,可以自动进行类型转换。即函数类型决定返回值的类型。 例73 将例7.2稍作改动(注意是变量的类型改动)。 main() float a,b;int c; scanf(“%f,%f”, zxy?x:y; return(z); 程序演示 7_3.c,4如果被调用函数中没有return语句,并不带回一个确定的、用户所希望得到的函数值,但实际上,函数并不是不带回值,而只是不带回有用的值,带回的是一个不确定的值。例如,在例71程序中,尽管没有要求

12、printstar和nrintmessase函数带回值,但是如果在程序中出现下面的语句也是合法的:,Main() int a,b,c; a=printstar(); bprint_message(); cprintstar(); printf(:%d,%d,%d”,a,b,c); 程序演示 7_4.c 5 为了明确表示“不带回值”,可以用“void”定义“无类型”(或称“空类型”),例如,例7.1中的定义可以改为: void printstar() void print_message() ,这样,系统就保证不使函数带回任何值,即禁止在调用函数中使用被调用函数的返回值。如果printstsar

13、和print_messag函数定义为void型,则下面的用法就是错误的:a=printstar( ) ; b=print_message( ); 编译时会给出出错信息。 为使程序减少出错,保证正确调用,凡不要求带回函数值的函数,一般应定义为”void”类型。 74函数的调用 741 函数调用的一般形式 函数调用的一般形式为 函数名(实参表列);,如果是调用无参函数则实参表列可以没有,但括弧不能省略. 说明:对实参表求值的顺序并不是确定的,有的系统按自左至右顺序求实参的值,有的系统则按自右至左顺序。许多C版本(例Turbo c和Ms c)是按自右而左的顺序求值; 例74 main( ) int

14、i=2,p; p=f(i,+i) printf(“%d”,p);,int f(a,b) int a,b; int c; if(ab)c=1; else if(a=b)c=0; else c =-1; return(c); 程序演示 7_5.c 运行结果如下: 0,742函数调用的方式 按函数在程序中出现的位置来分,可以有以下三种函数调用方式: 1函数语句。把函数调用作为一个语句。如例71中的printstar ( ); 这时不要求函数带回值,只要求函数完成一定的操作。 2函数表达式,函数出现在一个表达式中,这种表达式称为函数表达式。这时要求函数带回一个确定的值以参加表达式的运算。例如 c=2*

15、max(a,b); 函数max是表达式的一部分,它的值乘2再赋给c. 3函数参数。函数调用作为一个函数的实参。 例如 m=max(a,max(b,c);,其中max(b,c)是一次函数调用,它的值作为max另一次调用的实参。m的值是a,b,c三者最大的。 程序演示 7_6.C 又如 printf (”d”,max (a,b); 也是把max (a,b)作为printf函数的一个参数。 743 对被调用函数的说明 在一个函数中调用另一函数(即被调用函数)需要具备哪些条件呢? 1首先被调用的函数必须是已经存在的函数(是库函数或用户自己定义的函数)。,2如果使用库函数,一般还应该在本文件开头用 inc1ude命令将调用有关库函数时所需用到的信息包含到本文件来。例如, include “stdio.h” 其中”stdio.h”是一个“头文件”. 同样,使用数学库中的函数,应该用 include “mathH” 是头文件所用的后缀,标志头文

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

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