C语言案例教程:函数.ppt_第1页
C语言案例教程:函数.ppt_第2页
C语言案例教程:函数.ppt_第3页
C语言案例教程:函数.ppt_第4页
C语言案例教程:函数.ppt_第5页
已阅读5页,还剩108页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、本章的要点,函数的定义和调用函数的递归调用变量的范围主要内容,8.1概述8。函数定义的一般形式。功能参数和函数值8。函数调用8。函数的嵌套调用。函数的递归调用。数组作为函数参数8.8局部变量和全局变量8。变量存储类别8.10内部函数和外部函数8.1概述,一个程序可以把一个较大的程序分成几个程序模块,每个模块用来实现一个特定的功能。用子程序实现高级语言模块的功能。子程序由函数完成。函数之间的调用关系是:主函数调用其他函数,其他函数也可以相互调用。同一个函数可以被一个或多个函数调用任意多次。示例8.1首先给出一个简单的函数调用示例# include void main()void print st

2、ar();/*向printstar函数声明*/void print _ message();/*声明print_message函数*/print star();*调用printstar函数* print_message()。/*调用print_message函数*/print star();*调用printstar函数*/,void printstar() *定义printstar函数* printf(* * * * * * * * * * * * * * * * * * n);无效打印消息()*定义打印消息功能*打印(您好!n);运行如下:* * * * * * * * * * * * *

3、* * * * *您好!* * * * * * * * * * * * * * * *,描述:(1)一个程序由一个或多个程序模块组成,每个程序模块作为一个源程序文件。对于较大的程序,程序内容通常放在几个源文件中,然后一个C程序由几个源文件组成。这使得单独编写和编译变得容易,并提高了调试效率。一个源程序文件可以被多个C程序共享。(2)源程序文件由一个或多个函数和其他相关内容(如命令行、数据定义等)组成。)。源程序文件是一个编译单元。当一个程序被编译时,它是由源程序文件而不是函数编译的。(3)程序的执行从主功能开始。如果在主函数中调用了其他函数,则在调用之后,进程返回到主函数,并且整个程序在主函数

4、中运行。(4)所有功能都是并行的,也就是说,在定义功能时,它们是分开执行的,并且相互独立。一个函数不从属于另一个函数,也就是说,函数不能嵌套和定义。函数可以互相调用,但是主函数不能被调用。主要功能由系统调用。(5)从用户的角度来看,有两种功能:标准功能,即库函数。这是由系统提供的,因此用户不必自己定义这些功能,而是可以直接使用它们。不同的C系统提供的库函数在数量和功能上有所不同,但许多基本功能是相同的。用户定义的函数。解决用户的特殊需求。(6)从函数的形式来看,有两种类型的函数:非参数函数。无参数函数通常用于执行一组指定的操作。调用非参数函数时,主音函数不会将数据传递给被调用的函数。参数函数。

5、当主音函数调用被调用函数时,它通过参数将数据传递给被调用函数。8。函数定义的一般形式,8.2.1非参数函数的一般形式:类型标识符函数名()语句部分,8.2.2参数函数定义的一般形式:类型标识符函数名(形式参数表列)语句部分,例如:(int,int /*函数体中的声明部分*?返回();8.2.3空函数,定义空函数的一般形式是:类型标识符函数名(),例如: (),当主音函数调用空函数时,它只表示这里调用了一个函数,但函数本身什么也不做,等等。这将在以后扩展函数函数时添加。8。功能参数和函数值,8。形式参数和实际参数,形式参数:函数名后括号中的变量名称为“形式参数”(缩写为“形式参数”)。实际参数:

6、在主音函数中调用一个函数时,函数名后括号中的参数(可以是表达式)称为“实际参数”(简称“实际参数”)。函数返回值:返回后括号中的值作为函数返回的值(称为函数返回值)。主音功能和被叫功能之间存在数据传输关系。为了在不同的函数之间传递数据,可以使用以下方法:参数:通过形式参数和实际参数返回值;使用return语句返回计算结果:全局变量:外部变量,示例8。调用函数# includewoid () int max (int,int)时的数据传输。/*函数声明*/int,scanf(,);(,);printf(,);int max(int,int )*定义参数函数max * int?返回();操作如下:

7、两个函数中的数据可以通过函数调用进行关联。实际参数中形式参与的描述:(1)当没有函数调用时,定义函数中指定的形式参数不占用内存中的存储单元。只有当函数调用发生时,函数max中的参数才被分配给存储单元。调用结束后,参数占用的存储单元也被释放。(2)参数可以是常数、变量或表达式,例如:max(,);但是它们需要有确定的值。调用时将参数的值赋给形式参数。(3)在定义的函数中,必须指定参数的类型。(4)实际参与参数的类型应该相同,或者赋值应该兼容。(5)值传递:从实际参数到形式参数的数据传递是单向的“值传递”,只能从实际参数传递到形式参数,不能从形式参数传递回实际参数。当调用函数时,存储单元被分配给参

8、数,并且对应于实际参数的值被传递给参数。在调用之后,参数单元被释放,并且实际的参数单元保持原始值。8.3.2函数返回值,是主音函数通过函数调用得到的定值。例如,在:例8。max(,)的值是5。赋值语句将这个函数值赋给变量。描述:(1)函数的返回值是通过函数中的返回语句获得的。一个函数中可以有多个return语句。哪个返回语句被执行,哪个语句起作用。return语句后的括号也可以省略,例如,“return;相当于“返回();”返回后的值可以是表达式。例如: (int,int)返回(?);(2)函数的返回值应该属于某种类型。定义函数时指定返回值的类型。例如,在:下是三个函数的第一行:int max

9、(float,float) /*函数值是整数*/char字母(char c1,char c2) /*函数值是字符类型*/double min(int,int) /*函数值是双精度类型*/。注意:任何没有类型描述的函数都将被自动视为整数。(3)定义函数时指定的函数类型通常应该与返回语句中的表达式类型一致。如果函数值的类型与返回语句中表达式的值不一致,则以函数类型为准。对于数字数据,可以自动执行类型转换。也就是说,函数类型决定返回值的类型。(4)对于不返回值的函数,该函数应定义为“无类型”(或“空类型”)加“空”。此时,返回语句不能出现在函数体中。示例8。返回值类型不同于函数类型# include

10、 void main() int (float,float);浮动,intscanf(,);(,);printf(,);int max(浮点,浮点)浮点;/* z是实变量*/?返回();运行情况如下:最大值为,8。函数调用,8.1函数调用的一般形式,函数调用的一般形式是:函数名(自变量表列),这意味着: (1)如果调用一个没有参数的函数,自变量表列可以省略,但括号不能省略。(3)如果参数表列包含多个参数,则评估参数的顺序不确定。一些系统从左到右计算参数值,而另一些系统从右到左。(2)如果参数表列包含多个参数,这些参数用逗号分隔。实际参与参数的数量应该相等,并且类型应该匹配。实际参与的参数按顺序

11、对应,并一个接一个地传输数据。示例8.4参数评估#的顺序包括void main () int f (int a,int b);/*函数声明*/int i=2,p;p=f(i,I);/*函数调用*/printf(%dn,p);int f(int a,int b) /*函数定义*/int c;如果(ab)c=1;否则,如果(a=b)c=0;否则c=-1;返回(c);如果实参数的值是从左到右计算的,则函数调用等效于(,),如果实参数的值是从左到右计算的,则等效于(3),对于函数调用,int i=2,p;p=f(i,I);8.4.2函数调用方式,函数语句将函数调用作为一条语句。此时,该函数不需要返回值

12、,只需要完成某些操作。函数表达式函数出现在表达式中,称为函数表达式。此时,要求函数返回一个确定的值来参与表达式的运算。例如,(*,);根据函数在程序中出现的位置,有三种方法调用函数:函数参数函数调用被视为函数的实际参数。例如, m=最大值(a,最大值(b,c);Max (b,c)是一个函数调用,它的值作为Max的另一个调用的参数。m的值是a、b和C中最大的.8.4.3对于被调用函数的声明和原型,在一个函数中调用另一个函数(被调用函数)有什么要求?1.要调用的第一个函数必须是现有函数(库函数或用户定义函数)。但是这个条件还不够。3.如果使用用户定义的函数,并且该函数的位置在调用函数(即主音函数)

13、的后面,则被调用的函数应该在主音函数中声明。2.如果您使用库函数,您还应该在这个文件的开头使用#include命令来“包含”将库函数调用到这个文件中所需的信息。功能原型的一般形式是: 1。函数类型函数名称(参数类型1,参数类型2);2.函数类型函数名称(参数类型1、参数名称1、参数类型2、参数名称2);声明的功能是通知编译系统函数名、函数参数个数和参数类型,以便编译系统正确识别函数并检查调用是否合法。注:函数的“定义”与“声明”的区别:函数的定义是指函数的建立,包括指定函数名、函数值类型、参数及其类型、函数体等。它是一个完整而独立的功能单元。函数声明是通知编译系统函数的名称、函数类型以及形式参

14、数的类型、数量和顺序,以便系统在调用函数时可以对照它进行检查。示例8。声明被调用的函数#包括void main () float add (float x,float y);*声明被调用的函数add * float a,b,c;scanf(f,f,a,b);cadd(a,b);printf(总和为f n,c);浮点加法(浮点,浮点)*函数头*浮点;/*函数体*/z;返回(z);示例8声明了被调用的函数# include float add(float,float) *函数头* float/*函数体*/z;返回(z);无效主()浮动a、b、c;scanf(f,f,a,b);cadd(a,b);p

15、rintf(总和为f n,c);8。函数的嵌套调用。嵌套定义意味着当一个函数被定义时,它的函数体包含另一个函数的完整定义。例8。用弦截法求出方程f(x)=x3-5x2 16x-80=0的根。1.取两个不同的点x1和x2。如果f(x1)和f(x2)的符号相反,则间隔(x1,x2)中必须有一个根。如果f(x1)和f(x2)有相同的符号,x1和x2应该改变,直到f(x1)和f(x2)有不同的符号。请注意,x1和x2的值不应相差太大,以确保间隔中只有一个根(x1,x2)。2.连接两点(x1,f(x1)和(x2,f(x2),这条线(即弦)在X处与X轴相交。如果f(x)和f(x1)有相同的符号,那么根必须

16、在(x,x2)的区间内,并且x将被认为是新的x1。如果f(x)和f(x2)有相同的符号,这意味着根在区间(x1,x)中,x被作为新的x2。重复步骤(2)和(3),直到f(x)是一个非常小的数字,如10-6。N-S流程图,几个函数:1。用函数f(x)表示X的函数:x3-5x2 16x-80。2.调用xpoint (x1,x2)来查找(x1,f (x1)和(x2,f(x2)的连接线与x轴之间的交点x的坐标。3.用函数调用根(x1,x2)来寻找(x1,x2)区间的实根。显然,函数xpoint在执行根函数的过程中使用,而f函数在执行xpoint函数的过程中使用。包括包括float f(float x) *定义实现f (x) x3-5x2 16x-80 * float的函

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论