C语言课件 第9 10章

上传人:汽*** 文档编号:588991701 上传时间:2024-09-09 格式:PPT 页数:44 大小:358.01KB
返回 下载 相关 举报
C语言课件 第9 10章_第1页
第1页 / 共44页
C语言课件 第9 10章_第2页
第2页 / 共44页
C语言课件 第9 10章_第3页
第3页 / 共44页
C语言课件 第9 10章_第4页
第4页 / 共44页
C语言课件 第9 10章_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《C语言课件 第9 10章》由会员分享,可在线阅读,更多相关《C语言课件 第9 10章(44页珍藏版)》请在金锄头文库上搜索。

1、第9章 函数 o 函数的概述o 函数的定义o 函数的返回值与类型o 函数的参数与传递方式o 函数的调用o 内部函数和外部函数o Main函数9.1 函数的概述9.1.1 什么是函数9.1.2 函数的分类9.1.1 什么是函数函数是C程序基本的组成单位。 C源程序A.cB.cabcdeefgdf范例9-19.1.2 函数的分类1. 从函数定义的角度,可以将函数分为标准函数和用户自定义函数2. 从有无返回值的角度,可以将函数分为有返回值函数和无返回值函数 3. 从函数的形式看,可以分为有参函数和无参函数。 #includevoid printstar( ) printf(*); int sum(i

2、nt a,int b) return a+b;void main() int x=2,y=3,z; printstar(); z=sum(x,y); printf(n%d+%d=%dn,x,y,z); printstar(); 9.2 函数的定义o函数定义的一般形式是:函数类型函数类型 函数名(函数名( 类型说明类型说明 变量名变量名,类型说明,类型说明 变量名变量名. ) 函数体函数体o说明: 函数名必须符合标识符的命名规则; 函数类型规定了函数返回值类型; 函数名后面圆括号括起来的部分称为形式参数列表(即形参列表);【范例9-2】 求最大值的函数的定义 int max(int a,int

3、b) int c; c=ab?a:b; return c;9.2 函数的定义o说明: 函数体是由一对花括号“”括起来的语句序列,用于描述函数所要执行的操作。函数体又包含了说明部分和执行部分。 还有一类比较特殊的函数是空函数,即函数体内没有语句。 如:void empty() 9.2 函数的定义o说明: C程序中所有的子函数都是平行的,它们之间可以相互调用,但是不能嵌套定义;int func_fst(int a,int b) /*第一个函数的定义*/ . int func_snd(int c,int d) /*第二个函数的定义*/ . . 在函数定义中,可以包含对其他函数的调用,后者又可以调用另

4、外的函数,甚至自己调用自己,即递归调用。 9.3 函数的返回值及类型9.3.1 函数的返回值9.3.2 函数的类型9.3.1 函数的返回值o函数的返回值是通过函数中的return语句实现的。oreturn语句有两种格式:return expression; 或 return (expression); 【范例9-3】 编写cube()函数用于计算x3。9.3.2 函数的类型o在定义函数时,必须指名函数的返回值类型;oreturn语句中表达式的类型应该与函数定义时首部的函数类型是一致的;o如果二者不一致,则以函数定义时函数首部的函数类型为准。【范例9-4】 改写范例9-3。9.3.2 函数的类型

5、o如果一个函数不需要返回值时,则将该函数指定为void类型,此时函数体内不必使用return语句 .o一个函数中可以有一个以上的return语句,但不论执行到哪个 return都将结束函数的调用返回主调函数,即带返回值的函数只能返回一个值。* * *【范例9-6】 改写范例9-2。【范例9-5】 编写printdiamond()函数用于输出如下图形。9.4 函数的参数与传递方式9.4.1 函数的参数9.4.2 函数参数的传递方式9.4.1 函数的参数o函数的参数有两类:形式参数(简称形参)和实际参数(简称实参)。o函数定义时的参数称为形参,函数调用时使用的参数称为实参。【范例9-7】 将两个数

6、由小到大排序输出。#includeint max(int a,int b) int c; c=ab?a:b; return c; void main() int x,y; printf(请输入两个整数:); printf(%d和%d的最大值为:%dn,x,y,max(x,y);9.4.1 函数的参数o说明: 定义函数时,必须说明形参的类型,只能是简单变只能是简单变量或数组,不能是常量或表达式量或数组,不能是常量或表达式; 函数被调用前,形参不占用内存的存储单元;调用以后,形参才被分配内存单元,函数调用结束后,形参所占用的内存也将被回收,被释放; 实参可以是常量、变量,其它构造数据类型或表达常量

7、、变量,其它构造数据类型或表达式式; 实参的个数、出现的顺序和实参的类型应该与函数定义中形参表的设计一一对应。 9.4.2 函数参数的传递方式o实参对形参的数据传递是“值传递”,即单向传递 。o【范例9-8】 使用函数交换两个变量的值。2x3y2a3b实参形参2x3y3a2b实参形参9.5 函数的调用9.5.1 函数调用方式9.5.2 函数的声明9.5.3 函数的 嵌套调用9.5.4 函数的递归调用9.5.1 函数调用方式o函数调用的一般形式有两种:1. 函数语句 :函数名 (实参表列);或 函数名();如:swap(x,y); 2. 函数表达式:如:m=max(a,b); m=3*max(a

8、,b); printf(“Max is %d”,max(a,b) ; 【范例9-9】 编写一个函数,求任意两个整数的最小公倍数。 不要求函不要求函数带返回数带返回值值必须有必须有返回值返回值9.5.2 函数的声明o函数声明采用函数原型的方法;n有参函数声明形式为:函数类型 函数名 (形参列表);n无参函数的声明形式为:函数类型 函数名();o注 意:(1)函数声明包含了函数的首部和一个分号“:”,函数体不用写。(2)有参函数声明时的形参列表只需要把参数类型给出就可以,如:int power(int,int);(3)函数声明可以放在所有函数的前面,也可以放在主调函数内被调函数之前。 【范例9-1

9、0】 编写一个函数,求半径为r的球的体积。球的半径r由用户输入。9.5.3 函数的嵌套调用o函数之间的关系是平行的,在函数定义时不能嵌套定义;o但是C语言允许进行嵌套调用。范例9-11main函数fun1函数fun2函数调用fun1函数调用fun2函数main结束fun1函数结束fun2函数结束9.5.4 函数的递归调用o在调用一个函数的过程中,又直接或者间接地调用了该函数本身,这种形式称为函数的递归调用,这个函数就称为递归函数。o递归函数分为直接递归和间接递归两种:1、直接递归就是函数在处理过程中又直接调用了自己,如:01 int func(int a)02 03 int b,c;04 05

10、 c=func(b);06 07 func函数开始调用func函数func函数结束9.5.4 函数的递归调用2、如果函数p调用调用函数q,而函数q反过来又调用函数p,就称为间接递归。如:int func1(int a) int b,c; c=func2(b); int func2(int x) int y,z; z=func1(y); func1函数开始调用func2函数func1函数结束func2函数开始调用func1函数func2函数结束9.5.4 函数的递归调用【范例9-12】 用递归方法求n!(n0)。【范例9-13】 用递归法求Fibonacci数列。fac(5)输出fac(5)ma

11、infac函数n=4m=fac(3)*4fac(4)=24fac函数n=3m=fac(2)*3fac(3)=6fac函数n=2m=fac(1)*2fac(2)=2fac函数n=1m=1fac(1)=1fac函数n=5m=fac(4)*5fac(5)=1209.6 内部函数和外部函数9.6.1 内部函数9.6.2 外部函数9.6.1 内部函数o在一个源文件中定义的函数只能被本文件中的函数调用,而不能被同一源程序其它文件中的函数调用,这种函数称为内部函数。o定义内部函数的一般形式是: static 类型说明符 函数名()o例如:static int f(int a,int b); /*内部函数前面

12、加static关键字*/ 9.6.2 外部函数o外部函数在整个源程序中都有效,只要在定义函数时,前面加上extern关键字即可o定义的一般形式为:extern 类型说明符 函数名(形参表) o例如:extern int f(int a,int b) 范例9-159.7 Main函数pC程序的执行总从main函数开始;p注意: main函数可以调用其他函数,但其他函数不能调用main函数。main函数也不能调用自己。 main函数可以带有两个参数,其一般形式是:int main(int argc,char *argv ) 函数体 范例9-169.8 综合应用用截弦法求方程的根 【范例9-17】

13、编写一个程序,实现用截弦法求方程x3-5x2+16x-80=0在区间-3,6内的根。 范例9-17x1x2xf(x)f(x2)f(x1)x1f(x1)9.10 跟我上机1编写函数prime,判断给定的整数x是否为素数,在主函数输入一个整数,输出是否是素数。2. 编写函数,求 (其中m,n由用户输入)。3. 编写函数,根据整型参数m的值,计算下列公式的值:4用递归法反序输出一个正整数的各位数值,如输入4532,应输出2354。第10章 函数中的变量 o 局部变量与全局变量o 变量的存储类别10.1 局部变量与全局变量10.1.1 局部变量10.1.2 全局变量 10.1.1 局部变量o局部变量就

14、是在函数内部或者块内定义的变量。局部变量只在它的函数内部或块内部有效;o例如: int func(int a,int b) /*函数func1*/ double x,y; main() int m,n; 变量a,b,x,y只在func函数内有效 变量m,n只在main函数内有效 10.1.1 局部变量o说明: 主函数main中定义的变量(m,n)也只在主函数中有效,并不是因为在主函数中定义而在整个文件或程序中有效。因为主函数也是一个函数,它与其它函数是平行关系。 不同函数中可以使用相同的变量名,它们代表不同的变量,之间互不干扰。 在一个函数内部,还可以在复合语句(块)中定义变量,这些变量只在本

15、复合语句中有效。 10.1.1 局部变量o说明: 如果局部变量的有效范围有重叠,则有效范围小的优先 ,如:void main() int a,b,c; int c; c=a+b; 局部变量c优先a,b,c在此范围有效范例10-1 10.1.2 全局变量o在函数之外定义的变量称为全局变量,又称外部变量 。 o例如: int a=2,b=5;/*全局变量*/int f1()/*定义函数f1*/ .double c,d;/*全局变量*/void f2()/*定义函数f2*/ .main()/*主函数*/ .int e,d; /*全局变量*/e,f的作用域c、d的作用域a、b的作用域范例10-2 10

16、.1.2 全局变量o注 意:当局部变量与全局变量同名时,在局部变量的作用范围内,全局变量不起作用,即局部变量优先。o在实际使用过程中,建议不在必要时不要使用全局变量。范例10-310.2 变量的存储类别10.2.1 自动类型(auto)10.2.2 寄存器类型(register)10.2.2 静态类型(static)10.2.2 外部类型(extern)10.2.1 自动类型(auto) o自动类型关键字:auto。其一般形式为:auto 类型 变量名;o例如:int func1(int a) auto int b,c=3; 10.2.2 寄存器类型(register) o寄存器类型变量的存储

17、单元被分配在寄存器当中,用关键字register说明,其一般形式为:register 类型 变量名;o例如:register int a;o注意: 寄存器类型的变量不宜过多; 变量的长度应该与通用寄存器的长度相当,一般为int型或char型; 寄存器变量的定义通常是不必要的。范例10-410.2.3 静态类型(static) o静态类型的变量占用静态存储区,用static关键字来说明,其一般形式为:static 类型 变量名;o例如:static int a;o静态类型又分为静态局部变量和静态全局变量。 10.2.3 静态类型(static) 1、静态局部变量o定义在函数内的静态变量称为静态局

18、部变量。o说明: 静态局部变量的生存期是整个程序的运行期间; 静态局部变量具有局部变量的性质,即其作用域是局限在定义它的本函数体内的,但其值仍然存在,因为存储空间并未释放。 静态局部变量的赋初值的时间是在编译阶段,并且只被赋初值一次,即使它所有的函数调用结束,也不释放存储单元。范例10-5打印1到5的阶乘 10.2.3 静态类型(static) 2、静态全局变量o在定义全局变量时前面加上关键字static,就是静态全局变量。o静态全局变量的特点是: 其作用范围(即作用域)是定义它的程序文件,而不是整个程序; 静态全局变量的生存期是整个程序运行期间; 使用静态全局变量的好处是同一程序的两个不同的

19、源程序文件中可以使用相同名称的变量名,而互不干扰。范例10-610.2.4 外部类型(extern) o在任何函数之外定义的变量都叫做外部变量。外部变量通常用关键字extern说明。其一般形式为:extern 类型 变量名;o例如:extern int a; extern double k;o在一个文件中定义的全局变量缺省为外部的,即extern关键字可以省略。但是如果其他文件如果要使用这个文件中定义的全局变量,必须在使用前用“extern”作外部声明。外部声明通常放在文件的开头。 范例10-710.3 综合应用计算该日是该年的第几天 【范例10-8】 编写程序,给出年、月、日,计算该日是该年的第几天。10.5 跟我上机 编写一个函数,使输入的字符串反序存放,并在主函数中输入和输出字符串。要求该函数与主函数不在同一个文件中。

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

最新文档


当前位置:首页 > 办公文档 > 工作计划

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