函数的定义与调用

上传人:j****9 文档编号:54307604 上传时间:2018-09-10 格式:PPT 页数:166 大小:368.50KB
返回 下载 相关 举报
函数的定义与调用_第1页
第1页 / 共166页
函数的定义与调用_第2页
第2页 / 共166页
函数的定义与调用_第3页
第3页 / 共166页
函数的定义与调用_第4页
第4页 / 共166页
函数的定义与调用_第5页
第5页 / 共166页
点击查看更多>>
资源描述

《函数的定义与调用》由会员分享,可在线阅读,更多相关《函数的定义与调用(166页珍藏版)》请在金锄头文库上搜索。

1、第7章 函数,7.1 函数的定义与调用 7.2 函数的嵌套调用和递归调用 7.3 数组作为函数参数 7.4 内部变量与外部变量 7.5 内部函数和外部函数 7.6 变量的动态存储与静态存储简介,7.1 函数的定义与调用,在C语言中,从用户使用的角度看,函数可分为库函数和用户自定义函数两种。C语言提供了极为丰富的库函数,如前面各章例题中反复用到的scanf()、printf()、getchar()等函数均属于库函数。这类函数是由系统提供并定义好的,不必用户再去定义,用户只需掌握函数的功能,并学会正确调用这些函数即可。,尽管C语言本身提供了众多的库函数,但与实际应用的需要相比,还是远远不够,因此,

2、C语言允许用户按需要定义和编写自己的函数。对于用户自定义函数,不仅要在程序中定义函数本身,即定义函数功能,而且在主调函数中,还必须对被调用函数进行声明。下面将对用户自定义函数进行详细说明。,7.1.1 函数的定义 1引例 【例7.1】 定义一个函数,用于求两个数中的大数。 main() int max(int n1,int n2); /*声明max()函数*/int num,num1,num2; printf(“Input two integer numbers:n“); scanf(“%d,%d“,&num1,&num2);,num=max(num1,num2); /*调用max()函数*/

3、 printf(“max=%dn“, num); getch(); /*使程序暂停,按任一键继续*/ int max(int n1,int n2) /*定义max()函数*/ return (n1n2?n1:n2); ,程序运行情况如下:Input two integer numbers:12 ,34 /* 输入 */max=34本例程序由main()和max()两个函数构成。在本案例中,max()函数的返回值是一个整型数,它带两个整型参数,它们的具体值是由main()函数在调用时传送过来的。在max()函数体中的return语句,把所求得的函数值返回给main()函数。为了说明方便,通常将本

4、例中的main()函数称为主调函数,而把max()函数称为被调函数。,【例7.2】 输出一个文本信息框。 void fun1(void) /*定义fun1()函数*/ printf(“* * * * * * * * * * * * * *n“); void fun2(void) /*定义fun2()函数*/ printf(“* How do you do! *n“); main() fun1(); /*调用fun1()函数*/fun2(); /*调用fun2()函数*/fun1(); /*再次调用fun1()函数*/,程序运行结果如下:* * * * * * * * * * * * * * *

5、 * * * * How do you do! * * * * * * * * * * * * * * * * * * *本例程序由fun1()、fun2()和main()三个函数构成。fun1()函数和fun2()函数既没有返回值,也没带参数,其功能就是完成一个操作过程,即输出一串文本信息。,2函数定义的一般形式任何函数1、函数定义的一般形式任何函数(包括主函数main()的定义都是由函数首部和函数体两部分组成。其一般形式如下:类型名 函数名(参数定义表) 声明部分;执行部分;,其中,第一行为函数首部,用来说明函数返回值的类型、函数名以及函数所需参数的类型和名称;花括号中的部分为函数体,由声

6、明部分和执行部分组成,声明部分用来声明执行部分中用到的变量和函数,执行部分用来描述函数完成的具体操作。,根据函数是否需要参数,可将函数分为无参函数和有参函数两种。下面分别予以说明。(1) 无参函数定义的一般形式:类型名 函数名(void) 声明部分;执行部分;无参函数即函数没有参数,因此,函数首部的“参数定义表”可以缺省(但括号不能缺省),也可以用“void”表示。如【例7.2】中的fun1()和fun2()均为无参函数。,(2) 有参函数定义的一般形式:类型名 函数名(类型名 参数名,类型名 参数名2) 说明部分;执行部分;有参函数在其参数定义表中定义了所需的每一个参数的类型和名称。每一个参

7、数单独定义,参数定义之间用逗号(,)隔开。如【例7.1】中的max()函数就是一个有参函数:在函数首部定义了函数返回值的类型为int,函数名为max,参数n1和n2均为int类型;函数体完成的功能为:选出n1和n2中较大的一个数作为函数值返回。,调用有参函数时,主调函数将赋予这些参数实际的值。为了与主调函数提供的实际参数区别开,将自定义函数说明部分定义的参数称为形式参数,简称形参,而将主调函数提供的参数称为实际参数,简称实参。有参函数若无返回值,则其首部的类型标识符也用“void”表示。,3说明(1) 除main()函数外,函数名和形参名都是由用户命名的标识符,要求符合标识符的命名规则。(2)

8、 函数定义不允许嵌套。在语言中,所有函数(包括主函数main( )都是平行的。在一个函数的函数体内,不能再定义另一个函数,即不能嵌套定义。如【例7.1】和【例7.2】都体现了这一点。,(3) 可以定义空函数。所谓空函数,是指既无参数又无函数体的函数。其一般形式为void 函数名(void) 例如:void dummy(void) 就是定义了一个空函数dummy()。调用空函数时,什么操作也不做,没有任何实际作用。通常,在程序设计中,将未编写好的功能模块暂时用一个空函数占一个位置,便于将来扩充。,(4) 在旧版本的语言中,参数定义表允许放在函数首部的第二行单独指定。例如,【例7.1】中的max(

9、) 函数可写成以下形式:int max(n1,n2)int n1,n2; return (n1n2?n1:n2); 在新标准中,不允许缺省参数定义表,请读者在程序设计和阅读其他参考书时注意。,(5) 主函数main()的函数名main是系统定义的。main()函数若无参数也可以用“void”表示,main()函数无返回值,其类型也可以表示为“void”,即main()函数的首部可表示为:void main(void)。(6) 当一个源程序由多个函数构成时,必须有一个惟一的main()函数。main()函数在源程序中的位置可以任意,程序的执行总是从main()函数开始,最终从main()函数结束

10、。如【例7.1】中,main()函数在其他函数之前;【例7.2】中,main()函数在其他函数之后。main()函数也可以在其他函数中间。,7.1.2 函数的返回值与函数类型函数的返回值就是调用函数求得的函数值。C语言中的函数兼有其他语言中的函数和过程两种功能,从这个角度看,又可把函数分为有返回值函数和无返回值函数两种。有返回值函数相当于其他语言中的函数,而无返回值函数则相当于其他语言中的过程。函数类型就是函数定义首部的类型名时所定义的类型,即函数返回值的类型。,1函数返回值与return语句函数的返回值是通过函数中的return语句来获得的。return语句的格式如下:return 表达式;

11、 或 return (表达式); 或 return;return语句的功能:返回主调函数,并将“表达式”的值带回给主调函数。,当程序执行到函数体的return语句时,程序的流程就返回到主调函数中调用该函数处,并将“表达式”的值作为函数值带回到调用处。例如,【例7.1】中的max()函数,其中的“return (n1n2?n1:n2);”语句的功能就是返回到main()函数的“num=max(num1,num2);”语句中,并将表达式“n1n2?n1:n2”的值作为函数值赋给num变量。,无参函数和有参函数都可以有返回值,有返回值函数中必须有return语句,并可根据需要有多个return语句,

12、如【例7.1】中的max()函数可改写为int max(int n1,int n2) if (n1n2) return n1;else return n2; 其功能与【例7.1】中的max()函数完全一样。无参函数和有参函数也都可以没有返回值,无返回值函数的末尾可以有一个不带表达式的return语句,或缺省return语句。如【例7.2】中的fun1()和fun2()函数都缺省了return语句。,【例7.3】 分别计算1100的累加和与110的累乘积。 void add(int k) int i,s=0;for (i=1;i=k;i+) s+=i;printf(“1+2+3+%d=%dn“,

13、k,s); return; void fact(int k) int i,p=1;,for (i=1;i=k;i+) p*=i;printf(“%d!=%dn“,k,p); return; main() int m=100,n=10; add(m);fact(n); 程序运行结果如下: 1+2+3+100=5050 10!=24320,【例7.4】 分别计算1100的累加和与110的累乘积。 int add() int i,s=0;for (i=1;i=100;i+) s+=i;return s; int fact() int i,p=1;for (i=1;i?x:y;return z; 程序运行情况如下: Input two float numbers:3.6,5.8 max=5该例中,max()函数的定义缺省了类型名,系统默认为int类型。return语句中的表达式z为float类型,其值5.8自动转换为整数5返回给main()函数中的“c=max(a,b);”语句并赋给变量c。,

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

最新文档


当前位置:首页 > 生活休闲 > 科普知识

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