资源预览内容
第1页 / 共49页
第2页 / 共49页
第3页 / 共49页
第4页 / 共49页
第5页 / 共49页
第6页 / 共49页
第7页 / 共49页
第8页 / 共49页
第9页 / 共49页
第10页 / 共49页
亲,该文档总共49页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
C语言程序设计 第八章 函数,8-2,主要内容,8.1 函数的定义和调用 8.2 变量的存储类型及作用域 8.3 函数的数据传递,8-3,概述,函数函数是C语言程序的基本结构。C语言提供了许多函数。 它包括: I/O函数 数学函数 字符串函数、字符函数函数 时间(转换和操作)函数 接口函数 动态地址分配函数 目录函数 过程控制函数 字符屏幕和图形功能函数等。用户可以根据需要选择使用。这一类函数称为库函数。库函数函数的引用的方法很简单,这里不赘述。,8-4,概述,库函数库函数是由编译系统提供的现成函数。以前用过的scanf, printf, getchar等都是库函数。在编写C程序时,尽可能多用库函数,以提高编程效率和质量。要调用某个库函数,需在程序的头部用包含命令(#include)将说明该函数原型的头文件包含进本程序中。使用库函数应注意以下几个问题: 函数的功能; 参数的数目、顺序和类型; 函数返回值类型; 需要使用的包含文件。,8-5,概述,常用的库函数,8-6,8.1 函数的定义和调用,函数的定义函数的定义就是创造、编制函数。函数的定义过程就是编制函数的过程。 函数定义的格式,数据类型 函数名( 形参类型1 形参1,形参类型n 形参n) 说明语句;可执行语句;return(表达式) ; ,例如:int myfun(int x, int y) int z;if(xy)z=x;z=y;return(z); ,8-7,8.1 函数的定义和调用,函数定义的说明 函数返回类型:若函数无返回值,或返回整型值, 可省略数据类型说明。 形参: 形参是函数接收外部数据的单向通道。函数调用时, 调用函数的实参将其数据传递给形参。 函数可以有多个或0个形参,各形参之间用逗号隔开。 形参可以是变量、指针或数组等; 形参不能是常量和表达式。形式参数是局部变量。作用域、生命期为函数体内。 函数名:函数名的命名规则同标识符的命名规则,8-8,8.1 函数的定义和调用,return语句:如果函数有返回值,则函数的最后一条语句就是 return语句。返回的意义是: 使流程返回主调函数,宣告函数的一次执行结束,在调用期间所分配的变量单元被撤消。 送函数值到调用表达式中。有些函数有返回值,有些函数没有返回值。 return语句的使用格式是:return;或者 return (表达式);或者 return 表达式;,8-9,8.1 函数的定义和调用,注意 return后的表达式的值类型必须与函数类型相同; 如果函数类型为空(void)类型,则函数体中可以不使用return语句,或使用不带参数的return。 一个函数允许有一个或多个return语句,流程执行到其中一个 return时即返回主调函数。如果有多个return语句,每个return后面的表达式的类型应相同。 如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准。对数值型数据自动进行类型转换。 被调用函数中没有return语句,则函数带回一个不确定的值。建议用void标记函数的类型,则系统可保证函数不带回任何值,即禁止在调用函数中使用被调用函数的返回值。,8-10,8.1 函数的定义和调用,C语言准许定义“空函数”。例如: dummy( ) 调用此函数, 什么工作也不做。它表明有一个函数, 尚未有具体的内容, 待以后将功能补充上去。一般在系统开发初期, 一些没开发出来的部分用此方法。,8-11,8.1 函数的定义和调用,函数的引用函数定义好后,便可以在表达式中使用。 函数引用的格式函数名(实参表列) 实参的作用是在程序发生函数调用时, 将其数据传递给函数的形参, 即向函数传送数据。,int fun1(x1,y1) int z;z = x1 +y1;return( z ); void main( ) int s,x=2,y=6;s = fun1(x,y); printf (“%d”, s); ,运行结果:8,8-12,8.1 函数的定义和调用,实参与形参的关系 实参与形参的个数要相等。多个实参时要用逗号隔开。 实参与形参的数据类型相一致。 实参与形参的数据的传递是单向。即实参传给形参。同时是按排列顺序依次对应传递。 实参名与形参名可以相同,也可以不相同。 函数返回 如果函数需要返回值, 就用返回值带回调用函数的处理结果。返回值用赋值语句赋给主函数中的变量, 以接收其返回值。 返回值和接受返回值的变量的类型必须一致。,8-13,8.1 函数的定义和调用,函数调用 实参和形参的个数、类型和顺序必须一致。 实参可以是常量、变量名、数组名、数组元素或表达式。在调用函数前, 必须先定义。,8-14,8.1 函数的定义和调用,函数调用的形式在C语言中, 凡是能调用变量或表达式的地方, 均可调用函数。假设已定义了一个函数,即:我们有如下三种形式调用: 函数调用语句形式,如:a=max(s1,s2);这就是函数调用语句, 简称函数语句。 在表达式中引用,如:例: y=max(x1,x2) / max(y1,y2); 函数调用函数,如:y=abs(max(rand( ),rand( ); / 其中rand( ) 为随机函数。,int max(x,y) int x,y; int z;z=(xy)? x:y;return(z); ,8-15,8.1 函数的定义和调用,函数的声明如果定义的函数在使用之后,则函数必须在使用前先声明。目的是告诉编译程序该函数返回值的数据类型, 以便编译程序能够检查对函数的调用是否正确,会不会发生错误的类型转换等。 函数说明的格式数据类型 函数名( 形参类型 形参,); 函数声明注意的问题 被调用函数的声明放在源文件头, 则该声明对整个源文件都有效,int f1( ); int f2( ); main( ) f1( );f2( ); ,int f1( ) .f2( ); int f2( ) ,函数f1中没有对函数f2进行说明,其引用是错误的。,main( ) int f1( ); int f2( );f1( );f2( ); ,8-16,8.1 函数的定义和调用,如果被调用函数在调用函数内部声明, 则该声明仅对该调用函数有效。如果被调用函数是在函数外声明, 则该声明对以后的所有调用都有效。,void main( ) float max(float a, float b, float c );float x,y,z,m;scanf(“%f %f %f”,8-17,8.1 函数的定义和调用,如果调用函数和被调用函数是在同一个源文件中, 而且程序中被调用函数是在调用函数之前已定义, 此时可以省略被调用函数的声明。,float max(float a, float b, float c) /先定义 float result;result=a;if(resultb) result=b;if(result0;n-) product*=n;return(product); void main() int n;printf(“请输入一个整数:“);scanf(“%d“, ,运行结果:请输入一个整数:6 n! = 7.200000e+002,8-23,8.1 函数的定义和调用,函数的嵌套调用C函数不能嵌套定义,但允许嵌套调用,即被其他函数调用的函数可以调用另一个函数。请看示意图:,void main() int i;i = num1(); ,int num2() ,8-24,8.1 函数的定义和调用,嵌套调用示例:计算 s = 1!+2!+3!+ + 20! = ? 思路:编写一个主函数和两个子函数, 嵌套调用。,#include void main() double sum(int n) ;printf(“s = %-12.5len“, sum(20) ); double sum(int n) double fa(int k) , s=0;int i;for (i=1; i=n; +i) s = s + fa(i) ;return s; double fa ( int k ) int i; double t;t = 1;for ( i = 1; i=k; +i) t*=i ;return t; ,运行结果: S = 2.56133e+018,8-25,8.1 函数的定义和调用,函数的递归调用所谓函数的递归调用,就是函数直接或间接地调用自己。在设计递归函数时应当考虑到递归的终止条件。递归过程不应无限制地进行下去,不应该出现无终止的递归调用,而只应出现有限次数的、有终止的递归调用。当调用若干次以后,就应当到达递归调用的终点得到一个确定值,然后进行回代,回代的过程是从一个已知值推出下一个值。实际上这是一个递推过程。递归总是由两部分组成的:递归方式和递归终止条件。 递归三要素 递归形式 递归规则 递归终结条件,8-26,8.1 函数的定义和调用,#include float fa(int n) float t;if (n= 1 | n=0) t =1 ;else t= n* fa(n-1) ;return t ; void main() int i ;scanf(”%d” , ,说明: 递归包括“回推”和“递归” 需有结束递归过程的条件,8-27,8.1 函数的定义和调用,4 * fa(3),3 * fa(2),
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号