




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第十讲 函数与变量,7.1 函数的概念 7.2 函数的定义 7.3 函数参数和函数值 7.4 函数的调用,7.1 函数的概念,函数是C语言程序的组成部分,C语言程序的功能可以通过函数之间的调用来实现。 C语言函数分为两类: (1)标准函数:系统提供的已设计好的函数。 (2)用户定义的函数:用户自己编写的用来解决具体问题的函数。,说明: (1)一个源程序文件由一个或多个函煤炭九组成。一个源程序文件是一个编译单位,即以源文件为单位进行编译。 (2)一个C程序由一个或多个源程序文件组成。 (3)C和程序的执行从main函数开始,调用其它函数流程回到main函数,在main函数中,结束整个程序的运行。
2、Main函数是系统定义的。 (4)所有函数都是平行的,即在定义函数时,是互相独立的,一个函数并不从属于另一个函数,即函数不能嵌套定义,但可以互相调用,但不能调用main函数。 (5)从函数的形式看,函数分两种: (a)无参函数:主调函数并不将数据传送给被调用函数。 (b)有参函数:在调用函数时,在主调函数和被调函数之间有参数传递,也就是说,主调函数可以将数据传送给被调用函数使用,被调用函数中的数据也可以带回来供主调函数使用。,例7.1 main( ) p1(); p2(); p1(); p1 printf(“* * * * * *n”); p2 printf(“Welcomen”); 运行结果
3、: * * * * * * Welcome * * * * * *,7.1 函数的定义,7.2.1 无参函数的定义 类型标识符 函数名() 说明部分 语句 说明: 用“类型标识符”指定函数值的类型,即函数带回的值的类型。C语言默认返回值的类型是整型。,7.2.2 有参函数的定义,类型标识符 函数名(形式参数表列) 形式参数说明 说明部分 语句,说明: (1)函数类型标识符:指出return语句返回的值的类型,它可以是C中代任意合法的数据类型。 (2)函数名:应是一个标识符。函数名后的一对圆括号是函数的象征。 (3)形式参数表列:是写在圆括号中的一组变量名,称为形式参数,形式参数之间用逗号分隔。
4、无参函数,圆括号内为空。 (4)形式参数说明:是对形式参表列中的每一个形式参数所作的类型说明,应写在用花括号 括起来的孙函数体的前面。 (5)函数体:用 括起来的部分,函数体是由说明部分和语句部分组成的。,例如: Int max(x,y); int x,y ; /*形式参数说明*/ int z; /*函数体中的说明部分*/ 函数体 z=xy?x:y; return(z) ,7.3函数参数和函数值,7.3.1 形式参数和实际参数 在调用函数时,大多数情况下,主调函数和被调函数之间有数据传递关系。 在定义函数时,函九名后面括号中变量名称为“形式参数”,简义“形参”。 在调用函数时,函数名后面括号中
5、的表达式称为“实际参数”,简称“实参”。,例7.2求二数中较大数。,main int a,a,c; scanf(“%d,%d”, ,max(x,y) int x,y ; int z; z=xy?x:y; return(z); ,关于形参与实参的说明: (1)在定义函数中指定的形参变量,在末出现函数调用时,它们并不占内存中的存储单元。只有发生函数调用时函数max中的形参才被分配内存单元。调用结束后,形参所占用的内存单元也同时被释放。 (2)实参可以是常量、变量或表达式,如:max(3,a+b);但要求它们有确定的值。在调用时将实参的值赋给形参变量(如果形参是数组名,则传递的是数组首地址,而不是变
6、量的值)。 (3)在定义的函数中,必须指定形参的类型。,(4)实参与形参的类型应一致。只有字符型和整型可以互相通用。 (5)实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元。 在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍然保留并维持原值,形参的值如果发生改变,并不会改变主调函数的实参值。 (6)ANSI新标准允许使用另一种方法对形参类型说明,即在列出“形参表列”中同时说明形参类型。 如:int max(int x,int y),7.3.2 函数的返回
7、值 函数的返回值是由return语句传递的。 格式:return(表达式); 或 return 表达式; 功能:用return语句从函数中退出,返回到调用它的程序中。该语句有两重作用: (1)从函数中退出,返回到调用它的程序中。 (2)向调用程序返回一个值。,说明: (1)一个函数中可以有多个return 语句,当执行到某个return语句时,程序的控制流程返回到调用函数,并将return语句中的表达式的值作为函数值带回。 (2)若函数体内没有return语句,就一直执行到函数体的末尾,然后返回调用函数。这时带回一个不确定的函数值。 (3)若确时不要求带回函数值,则应瘵函数定义为void类型。
8、 (4)return语句中的表达式的类型与函数值的类型一致。若不一致,则以函数值的类型为准,对数型数据,可以自动进行类型转换。,7.4 函数的调用,7.4.1 函数调用的一般形式 格式:函数名(实参表列); 函数调用语句的执行过程:首先计算每个实参表达式的值,并把此值存入所对应的形参单元中,然后把执行流程转入函数体中,执行函数体中的语句,函数体执行完之后,将返回到调用此函数的程序的下一条语句,继续去执行。 当执行到函数体的右花括号或return语句时,表示函数体执行完成,这时将返回到主调程序中。,说明: (1)如果是无参函数,则没有实参表列,但括弧不能省略。 (2)如果实参表列包含多个实参,则
9、各参间用逗号隔开。实参与形参的个数应相等,类型应一致。实参与形参应一一对应,转递数据。 (3)对实参表求值的并不是确定的,系统是按自右向左的顺序求值。,7.4.2 函数调用方式 按函数在程序中的位置来分,可以有以下三种调用方式: (1)函数语句。把函数调用作为一个语句。例如: P1( ); 这时不要求函数带回值,只要求函数完成一定的操作。 (2)函数表达式。函数出现在一表达式中,这种表达式称为函数表达式。这时要求函数带回一个确定的值以参加表达式的计算。例如: C=2*max(a,b); (3)函数参数。函数调用作为一个函数的实参。例如: M=max(a,max(a,b); 其中max(b,c)
10、是一次函数调用,它的值作为max另一次调用的实参。M的值是a,b,c最大者。,7.4.3 对被调用函数的说明 在一个函数中调用另一个被调函数,需要具备的条件: (1)首先被调函数必须是已经存在的函数。 (2)如果使用库函数,一般还应在本文件开头用#include命令将调用有关库函数时所需用的信息包含到本文件中来。 (a)输入输出库函数:#include “stdio.h”使用输入输出函数。 (b)数学库函数:#include”mach.h”使用数学函数。,(3)如果使用用户自己定义的函数,而且该函数与调用它的函数(即主调函数)在同一个文件中,一般还应该在主调函数中对被调函数的返回值的类型作说明。这种类型说明的一般形式为: 类型标识符 被函数函数名( ); 对被调用的函数的说明,在以下几种情况下可以省略: (a)如果函数的值(函数的返回值)是整型或字符型,可以不进行说明,系统对它们自动按整型说明。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论