第7章_函数2

上传人:野鹰 文档编号:2656022 上传时间:2017-07-26 格式:PPT 页数:114 大小:551.50KB
返回 下载 相关 举报
第7章_函数2_第1页
第1页 / 共114页
第7章_函数2_第2页
第2页 / 共114页
第7章_函数2_第3页
第3页 / 共114页
第7章_函数2_第4页
第4页 / 共114页
第7章_函数2_第5页
第5页 / 共114页
点击查看更多>>
资源描述

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

1、,第七章,函数调用,本章要点,函数的概念函数的定义与调用函数的递归调用 变量的作用域函数的作用域,主要内容,7.1 函数概述 7.函数定义的一般形式 7.函数参数和函数的值 7.函数的调用 7.函数的嵌套调用,主要内容,7.6 函数的递归调用 7.7 数组作为函数参数 7.8 变量的作用域-局部变量和全局变量 7.9 变量的存储方式和生存期 7.10 关于变量的声明和定义 7.11 内部函数和外部函数,7.1 函数概述,一个程序可由一个主函数和若干个其他函数构成。一个较大的程序可分为若干个程序模块,每一个模块用来实现一个特定的功能。在高级语言中用子程序实现模块的功能。子程序由函数来完成。 函数

2、间的调用关系:由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。,例7.1函数调用的简单例子# include void main() void printstar(); /*对printstar函数声明*/ void print_message(); /*对print_message函数声明*/ printstar(); *调用printstar函数* print_message(); /*调用print_message函数*/ printstar(); *调用printstar函数*/ ,void printstar() *定义printstar函数

3、* printf(* * * * * * * * * * * * * * * *n);void print_message() *定义print_message函数* printf(How do you do!n); ,运行情况如下:* * * * * * * * * * * * * * * *How do you do!* * * * * * * * * * * * * * * *,说明: 1.一个程序由一个或多个程序模块组成,每一个程序模块作为一个源程序文件。对于较大的程序,通常将程序内容分别放在若干个源文件中,再由若干源程序文件组成一个C程序。这样便于分别编写、分别编译,提高调试效率。一

4、个源程序文件可以为多个C程序公用。,说明: 2. 一个源程序文件由一个或多个函数以及其他有关内容(如命令行、数据定义等)组成。一个源程序文件是一个编译单位,在程序编译时是以源程序文件为单位进行编译的,而不是以函数为单位进行编译的。,说明: 3. 程序的执行是从main函数开始的,如果在main函数中调用其他函数,在调用后流程返回到main函数,在main函数中结束整个程序的运行。,说明: 4. 所有函数都是平行的,即在定义函数时是分别进行的,是互相独立的。一个函数并不从属于另一函数,即函数不能嵌套定义。函数间可以互相调用,但不能调用main函数。main函数是系统调用的。,说明:5.从用户使用

5、的角度看,函数有两种: 标准函数,即库函数。这是由系统提供的,用户不必自己定义这些函数,可以直接使用它们。不同的C系统提供的库函数的数量和功能会有一些不同,但许多基本的函数是共同的。 用户自己定义的函数。用以解决用户的专门需要。,说明:6. 从函数的形式看,函数分两类: 无参函数。无参函数一般用来执行指定的一组操作。在调用无参函数时,主调函数不向被调用函数传递数据。有参函数。主调函数在调用被调用函数时,通过参数向被调用函数传递数据。,7. 函数定义的一般形式 7.2.1. 为什么要定义函数,C语言规定,在程序中用到的所有函数,必须“先定义,后使用”。定义函数包括以下几个内容:指定函数的名字,以

6、便以后按名调用。指定函数的类型,函数值的类型。指定函数的参数的名字和类型,以便在调用函数时向它们传递数据。对无参函数不需要这项。指定函数应当执行什么操作,也就是函数是做什么的,即函数的功能。这是最重要的。,7. 函数定义的一般形式 7.2.1. 为什么要定义函数,对于C编译系统提供的库函数,是由编译系统事先定义好的,程序设计者不必自已定义,只需#include命令把有关的头文件包含到本文件模块中即可。 例如,在程序中若用到数学函数(如sqrt,fabs,sin,cos等),就必须在本文件模块的开头写上: #include ,7. 函数定义的一般形式7.2.2 怎样定义无参函数,定义无参函数的一

7、般形式为:类型标识符函数名() 声明部分 语句部分 ,7. 函数定义的一般形式7.2.3 怎样定义有参函数,定义有参函数的一般形式为:类型标识符函数名(形式参数表列) 声明部分 语句部分 ,例如: (int ,int ) ;/ *函数体中的声明部分*?; return(); ,7. 函数定义的一般形式7.2.4 定义空函数,定义空函数的一般形式为:类型标识符函数名() 例如:void dummy() ,主调函数调用空函数时,只表明这里要调用一个函数,但函数本身什么工作也不做等,以后扩充函数功能时补充上。,7. 函数参数和函数的值7.形式参数和实际参数,形式参数:函数名后面括弧中的变量名称为“形

8、式参数”(简称“形参”);实际参数:主调函数中调用一个函数时,函数名后面括弧中的参数(可以是一个表达式)称为“实际参数”(简称“实参”);函数返回值:return后面的括弧中的值作为函数带回的值(称函数返回值)。,主调函数和被调用函数之间有数据传递的关系。在不同的函数之间传递数据,可以使用的方法有:参数:通过形式参数和实际参数返回值:用return语句返回计算结果全局变量:外部变量,例7.输入两个整数,要求用一个函数求出其中的大者,并在主函数中输出此值。 #include void () int max(int ,int ); /* 对函数的声明 */ int ,; scanf(,); (,)

9、; printf( ,); ,int max(int ,int )*定义有参函数max * int ; ?; return(); ,运行情况如下:, ,通过函数调用,可使两个函数中的数据发生联系。,关于形参与实参的说明:,1. 在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元。只有在发生函数调用时,函数max中的形参才被分配内存单元。在调用结束后,形参所占的内存单元也被释放。,2. 实参可以是常量、变量或表达式,例如: max(,);但要求它们有确定的值。在调用时将实参的值赋给形参。,3.在被定义的函数中,必须指定形参的类型。,4.实参与形参的类型应相同或赋值兼容。,5.

10、 实参向形参的数据传递是单向“值传递”,只能由实参传给形参,而不能由形参传回来给实参。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。,7. 函数参数和函数的值7.3.2 函数的返回值,函数的返回值是通过函数调用使主调函数得到的确定值。例如:例8.中,max(,)的值是,max(,)的值是5。赋值语句将这个函数值赋给变量。,说明: 1.函数的返回值是通过函数中的return语句获得的。一个函数中可以有一个以上的return语句,执行到哪一个return语句,哪一个语句起作用。return语句后面的括弧也可以不要例如: “ret

11、urn ;” 等价于 “return ();”return后面的值可以是一个表达式。例如: (int ,int ) return(?:); ,2. 函数的返回值应当属于某一个确定的类型,在定义函数时指定函数返回值的类型。例如:下面是3个函数的首行:int max(float ,float ) /* 函数值为整型 */char letter(char c1,char c2) /* 函数值为字符型 */ double min(int ,int ) /* 函数值为双精度型 */,注意:凡不加类型说明的函数,自动按整型处理。,3.在定义函数时指定的函数类型一般应该和return语句中的表达式类型一致。

12、如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准。对数值型数据,可以自动进行类型转换。即函数类型决定返回值的类型。,4.对于不带回值的函数,应当用“void”定义函数为“无类型”(或称“空类型”)。此时在函数体中不得出现return语句。,例 7. 返回值类型与函数类型不同# include void main() int (float ,float ); float ,; int ; scanf(,); (,); printf( ,); int max(float ,float ) float ; /* z为实型变量 */ ?; return(); ,运行情况如下:,

13、Max is ,7. 函数的调用 7.4.1 函数调用的一般形式,函数调用的一般形式为: 函数名(实参表列),说明:1.如果是调用无参函数,则“实参表列”可以没有,但括弧不能省略。2.如果实参表列包含多个实参,则各参数间用逗号隔开。实参与形参的个数应相等,类型应匹配。实参与形参按顺序对应,向形参传递数据。,如果实参表列包括多个实参,对实参求值的顺序并不是确定的,有的系统按自左至右顺序求实参的值,有的系统则按自右至左顺序。例如: (,+); 若的原值为,在 VC+ 6.0环境下运行的结果不是“3,4”,而为“4,4”。因为按自右而左顺序,先求+i得4,再向左进行,此时的i已是4了。 如果想输出3

14、和4,应写成: i=3; j=i+; printf(”%d,%d”,i,j);,7. 函数的调用7.4.2 函数调用的方式,函数语句把函数调用作为一个语句。这时不要求函数带回值,只要求函数完成一定的操作。,函数表达式函数出现在一个表达式中,这种表达式称为函数表达式。这时要求函数带回一个确定的值以参加表达式的运算。例如:*(,);,按函数在程序中出现的位置来分,可以有以下三种函数调用方式:,函数参数函数调用作为一个函数的实参。例如: m = max (a , max ( b , c ) ) ;其中max ( b , c )是一次函数调用,它的值作为max另一次调用的实参。m的值是a、b、c三者中的最大者。,7. 函数的调用 7.4.3 对被调用函数的声明和函数原型,

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

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

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