C语言课件 第9 10章.ppt

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

《C语言课件 第9 10章.ppt》由会员分享,可在线阅读,更多相关《C语言课件 第9 10章.ppt(44页珍藏版)》请在三一办公上搜索。

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

2、in()int x=2,y=3,z;printstar();z=sum(x,y);printf(n%d+%d=%dn,x,y,z);printstar();,9.2 函数的定义,函数定义的一般形式是:函数类型 函数名(类型说明 变量名,类型说明 变量名.)函数体说明:函数名必须符合标识符的命名规则;函数类型规定了函数返回值类型;函数名后面圆括号括起来的部分称为形式参数列表(即形参列表);,【范例9-2】求最大值的函数的定义,int max(int a,int b)int c;c=ab?a:b;return c;,9.2 函数的定义,说明:函数体是由一对花括号“”括起来的语句序列,用于描述函数所

3、要执行的操作。函数体又包含了说明部分和执行部分。还有一类比较特殊的函数是空函数,即函数体内没有语句。如:void empty(),9.2 函数的定义,说明:C程序中所有的子函数都是平行的,它们之间可以相互调用,但是不能嵌套定义;int func_fst(int a,int b)/*第一个函数的定义*/.int func_snd(int c,int d)/*第二个函数的定义*/.在函数定义中,可以包含对其他函数的调用,后者又可以调用另外的函数,甚至自己调用自己,即递归调用。,9.3 函数的返回值及类型,9.3.1 函数的返回值9.3.2 函数的类型,9.3.1 函数的返回值函数的返回值是通过函数

4、中的return语句实现的。return语句有两种格式:return expression;或 return(expression);,【范例9-3】编写cube()函数用于计算x3。,9.3.2 函数的类型在定义函数时,必须指名函数的返回值类型;return语句中表达式的类型应该与函数定义时首部的函数类型是一致的;如果二者不一致,则以函数定义时函数首部的函数类型为准。,【范例9-4】改写范例9-3。,9.3.2 函数的类型如果一个函数不需要返回值时,则将该函数指定为void类型,此时函数体内不必使用return语句.一个函数中可以有一个以上的return语句,但不论执行到哪个 return都

5、将结束函数的调用返回主调函数,即带返回值的函数只能返回一个值。,*,【范例9-6】改写范例9-2。,【范例9-5】编写printdiamond()函数用于输出如下图形。,9.4 函数的参数与传递方式,9.4.1 函数的参数9.4.2 函数参数的传递方式,9.4.1 函数的参数函数的参数有两类:形式参数(简称形参)和实际参数(简称实参)。函数定义时的参数称为形参,函数调用时使用的参数称为实参。,【范例9-7】将两个数由小到大排序输出。,#includeint max(int a,int b)int c;c=ab?a:b;return c;void main()int x,y;printf(请输入

6、两个整数:);printf(%d和%d的最大值为:%dn,x,y,max(x,y);,9.4.1 函数的参数说明:定义函数时,必须说明形参的类型,只能是简单变量或数组,不能是常量或表达式;函数被调用前,形参不占用内存的存储单元;调用以后,形参才被分配内存单元,函数调用结束后,形参所占用的内存也将被回收,被释放;实参可以是常量、变量,其它构造数据类型或表达式;实参的个数、出现的顺序和实参的类型应该与函数定义中形参表的设计一一对应。,9.4.2 函数参数的传递方式实参对形参的数据传递是“值传递”,即单向传递。【范例9-8】使用函数交换两个变量的值。,9.5 函数的调用,9.5.1 函数调用方式9.

7、5.2 函数的声明9.5.3 函数的 嵌套调用9.5.4 函数的递归调用,9.5.1 函数调用方式函数调用的一般形式有两种:1.函数语句:函数名(实参表列);或 函数名();如:swap(x,y);2.函数表达式:如:m=max(a,b);m=3*max(a,b);printf(“Max is%d”,max(a,b);,【范例9-9】编写一个函数,求任意两个整数的最小公倍数。,不要求函数带返回值,必须有返回值,9.5.2 函数的声明函数声明采用函数原型的方法;有参函数声明形式为:函数类型 函数名(形参列表);无参函数的声明形式为:函数类型 函数名();注 意:(1)函数声明包含了函数的首部和一

8、个分号“:”,函数体不用写。(2)有参函数声明时的形参列表只需要把参数类型给出就可以,如:int power(int,int);(3)函数声明可以放在所有函数的前面,也可以放在主调函数内被调函数之前。,【范例9-10】编写一个函数,求半径为r的球的体积。球的半径r由用户输入。,9.5.3 函数的嵌套调用函数之间的关系是平行的,在函数定义时不能嵌套定义;但是C语言允许进行嵌套调用。,范例9-11,9.5.4 函数的递归调用在调用一个函数的过程中,又直接或者间接地调用了该函数本身,这种形式称为函数的递归调用,这个函数就称为递归函数。递归函数分为直接递归和间接递归两种:1、直接递归就是函数在处理过程

9、中又直接调用了自己,如:01 int func(int a)02 03 int b,c;04 05 c=func(b);06 07,9.5.4 函数的递归调用2、如果函数p调用调用函数q,而函数q反过来又调用函数p,就称为间接递归。如:,9.5.4 函数的递归调用【范例9-12】用递归方法求n!(n0)。【范例9-13】用递归法求Fibonacci数列。,9.6 内部函数和外部函数,9.6.1 内部函数9.6.2 外部函数,9.6.1 内部函数在一个源文件中定义的函数只能被本文件中的函数调用,而不能被同一源程序其它文件中的函数调用,这种函数称为内部函数。定义内部函数的一般形式是:static

10、类型说明符 函数名()例如:static int f(int a,int b);/*内部函数前面加static关键字*/,9.6.2 外部函数外部函数在整个源程序中都有效,只要在定义函数时,前面加上extern关键字即可定义的一般形式为:extern 类型说明符 函数名(形参表)例如:extern int f(int a,int b),范例9-15,9.7 Main函数,C程序的执行总从main函数开始;注意:main函数可以调用其他函数,但其他函数不能调用main函数。main函数也不能调用自己。main函数可以带有两个参数,其一般形式是:int main(int argc,char*arg

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

12、与全局变量,10.1.1 局部变量10.1.2 全局变量,10.1.1 局部变量局部变量就是在函数内部或者块内定义的变量。局部变量只在它的函数内部或块内部有效;例如: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 局部变量说明:主函数main中定义的变量(m,n)也只在主函数中有效,并不是因为在主函数中定义而在整个文件或程序中有效。因为主函数也是一个函数,它与其它函数是平行关系。不同函数中可以使用相同的变量名,它们代表不同的变量,之间互不

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

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

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

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

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号