C语言程序设计教程课件第6章.ppt

上传人:m****u 文档编号:14506615 上传时间:2024-08-01 格式:PPT 页数:36 大小:694.50KB
下载 相关 举报
C语言程序设计教程课件第6章.ppt_第1页
第1页 / 共36页
C语言程序设计教程课件第6章.ppt_第2页
第2页 / 共36页
C语言程序设计教程课件第6章.ppt_第3页
第3页 / 共36页
C语言程序设计教程课件第6章.ppt_第4页
第4页 / 共36页
C语言程序设计教程课件第6章.ppt_第5页
第5页 / 共36页
C语言程序设计教程课件第6章.ppt_第6页
第6页 / 共36页
C语言程序设计教程课件第6章.ppt_第7页
第7页 / 共36页
C语言程序设计教程课件第6章.ppt_第8页
第8页 / 共36页
C语言程序设计教程课件第6章.ppt_第9页
第9页 / 共36页
C语言程序设计教程课件第6章.ppt_第10页
第10页 / 共36页
C语言程序设计教程课件第6章.ppt_第11页
第11页 / 共36页
C语言程序设计教程课件第6章.ppt_第12页
第12页 / 共36页
C语言程序设计教程课件第6章.ppt_第13页
第13页 / 共36页
C语言程序设计教程课件第6章.ppt_第14页
第14页 / 共36页
C语言程序设计教程课件第6章.ppt_第15页
第15页 / 共36页
C语言程序设计教程课件第6章.ppt_第16页
第16页 / 共36页
C语言程序设计教程课件第6章.ppt_第17页
第17页 / 共36页
C语言程序设计教程课件第6章.ppt_第18页
第18页 / 共36页
C语言程序设计教程课件第6章.ppt_第19页
第19页 / 共36页
C语言程序设计教程课件第6章.ppt_第20页
第20页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、1主要内容主要内容6.1 函数的定义与返回值6.2 函数的调用6.3 变量的作用域与生存期6.4 函数间的数据传递6.5 嵌套调用与递归调用2学习目标学习目标v掌握函数的定义和类型。v掌握函数的调用。v了解变量的存储域和生存期。v了解变量的存储类别。v掌握函数间的数据传递。v掌握函数的嵌套调用和递归调用。36.1 函数的定义和返回值函数的定义和返回值 6.1.1 函数的定义 函数定义的传统形式是:类型标识符 函数名(形式参数表)形式参数说明内部数据说明语句int sum(x,y)int x,int y;int z;z=x+y;return z;4现代格式是:类型标识符 函数名(形参说明 形参1

2、,形参说明 形参2,)内部数据说明语句int sum(int x,int y)int z;z=x+y;return z;56.1.2 函数的返回值 函数的值是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值,例如调用正弦函数取得正弦值。函数的值只能通过return语句返回主调函数。return语句的一般形式为:return 表达式;或者为:return(表达式);该语句的功能是计算表达式的值,并返回给主调函数。在函数中允许有多个return语句,但每次调用只能有一个return语句被执行,因此只能返回一个函数值。6函数定义及返回值举例。#includefloat sum(fl

3、oat x,float y)float z;z=x+y;return(z);void show()printf(nfinish);main()float a,b,c;printf(please input x and y:);scanf(%f,%f,&a,&b);c=sum(a,b);printf(sum is%f,c);show();运行时输入1.0,2.0并回车,可得到结果:sum is 3.000000finish76.1.3 函数的分类(1)从函数定义的角度看,函数可分为库函数和用户定义函数两种。1)库函数。2)用户定义函数。(2)从函数有无返回值看,又可把函数分为有返回值函数和无返回

4、值函数两种。1)有返回值函数。2)无返回值函数。(3)从主调函数和被调函数之间数据传送的角度看又可分为无参函数和有参函数两种。1)无参函数。2)有参函数。86.2 函数的调用函数的调用 6.2.1 函数的调用 1函数的调用形式在在C语言中,有参函数调用的一般形式如下:函数名(实际参数表)对无参函数调用时形式为:函数名()实际参数表中的参数可以是常数、变量或其他构造类型数据及表达式。各实参之间用逗号分隔。9(1)函数表达式。函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数是有返回值的。例如:z=sum(x,y)是一个赋值表达式,把sum的返回值赋予变量z。(2

5、)函数语句。函数调用的一般形式加上分号即构成函数语句。例如:printf(%D,a);scanf(%d,&b);都是以函数语句的方式调用函数。(3)函数实参。函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送,因此要求该函数必须是有返回值的。例如:printf(%d,sum(x,y);即是把max调用的返回值又作为printf函数的实参使用。10【例6-2】函数求值的顺序。#includemain()int i=8;printf(%dn%dn%dn%dn,+i,-i,i+,i-);如按照从右至左的顺序求值。运行结果应为:8778如对printf语句中的+i,-i,

6、i+,i-从左至右求值,结果应为:9889 112形式参数和实际参数函数的参数分为形参和实参两种。形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。形参和实参的功能是作数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。实际参数和形式参数的关系可以由下图形象地说明。main函数fun函数x1ab12y2(实参)(形参)12函数的形参和实参具有以下特点:(1)形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数

7、调用结束返回主调函数后则不能再使用该形参变量。(2)实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值、输入等办法使实参获得确定值。(3)实参和形参在数量上、类型上、顺序上应严格一致,否则会发生类型不匹配的错误。(4)函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。136.2.2 库函数的调用 1文件包含对每一类库函数,在使用前都应该在源程序的开头包含相应的头文件名。如程序中对每一类库函数,在

8、使用前都应该在源程序的开头包含相应的头文件名。如程序中调用了字符串函数,就要在程序调用之前包含以下命令:调用了字符串函数,就要在程序调用之前包含以下命令:#include该命令以#include开头,后面跟相应的头文件名,头文件名除了可以用尖括号括起来,双引号也是允许的。#includestring.h也是正确的。2库函数的调用形式库函数的一般调用形式是:库函数的一般调用形式是:函数名(参数表)库函数的调用可以通过6.2.1节介绍的三种调用形式调用。(1)函数表达式,例如:y=sin(x);(2)函数语句,例如:printf(i like football);(3)函数实参,例如:printf

9、(the result is%f,sin(x);146.2.3 函数的声明以及位置对函数调用的影响 1位置对函数调用的影响函数定义的位置会影响函数的作用域。一个函数的作用域是从其定义位置函数定义的位置会影响函数的作用域。一个函数的作用域是从其定义位置起,直到源程序的末尾。因此,被调用函数的定义位置将影响函数能否被起,直到源程序的末尾。因此,被调用函数的定义位置将影响函数能否被直接调用。直接调用。以下几种情况是可以直接调用的:如果被调函数的返回值是整型或字符型时,可以不对被调函数作说明,而直接调用。这时系统将自动对被调函数返回值按整型处理。当被调函数的函数定义出现在主调函数之前时,在主调函数中也

10、可以不对被调函数再作说明而直接调用。对库函数的调用不需要再作说明,但必须把该函数的头文件用include命令包含在源文件前部。在其他情况下,如果定义靠前的函数要调用位置靠后的函数,必须对函数进行函数的声明。152函数的声明所谓函数的声明,是指向编译系统提供函数必要的信息:函数名,函数所谓函数的声明,是指向编译系统提供函数必要的信息:函数名,函数的类型,函数参数的个数、类型及排列次序,以便编译系统对函数的调的类型,函数参数的个数、类型及排列次序,以便编译系统对函数的调用进行检查。有参函数声明的一般形式为:用进行检查。有参函数声明的一般形式为:类型标识符 函数名(类型标识符 形参1,类型标识符 形

11、参2,);例如:float sum(float a,int b)float c;c=a+b;return c;这个函数定义的声明为:float sum(float x,int y);166.2.4 内部函数与外部函数 一个C程序的各个函数可以存放在同一个源文件中,也可以分别放在不同的源文件中。C程序中的内部函数与外部函数的区别就是相对于源文件的“内”与“外”。根据一个C函数能否被其他源文件中的函数所调用,C函数的存储类型可分为外部型(extern)和静态型(static)两种,默认的存储类型为extern。能被其他源文件中的函数所调用的函数,称为外部函数;反之,不能被其他源文件中函数调用的函数

12、,称为内部函数。内部函数可以保证函数的范围只局限在本文件之内,这样可以有效避免其他文件中同名函数的干扰。外部函数可以让其他文件在对函数进行外部声明后调用此函数,这样就不必在本文件内再定义实现相同功能的函数,从而简化了程序。176.3 变量的作用域与生存期变量的作用域与生存期 6.3.1 变量的作用域 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了。这种变量有效性的范围称为变量的作用域。不仅对于形参变量,C语言中所有量都有自己的作用域。变量说明的方式不同,其作用域也不同。C语言中的变量按作

13、用域范围可分为两种,即局部变量和全局变量。186.3.2 局部变量与全局变量 1局部变量局部变量也称为内部变量。局部变量是在函数内进行定义说明的。其作用域仅限于函数内,离局部变量也称为内部变量。局部变量是在函数内进行定义说明的。其作用域仅限于函数内,离开该函数后再使用这种变量是非法的。开该函数后再使用这种变量是非法的。【例6-3】局部变量的作用域。#includeint f1(int a,int b)int c;c=a+b;return c;int f2(int x,int y)int z;z=x*y;return z;main()int m,n;m=f1(3,4);n=f2(3,4);pri

14、ntf(m=%d,n=%d,m,n);在函数f1内定义了三个变量,a,b为形参,c为一般变量。在 f1的范围内a,b,c有效,或者说a,b,c变量的作用域限于f1内。同理,x,y,z的作用域限于f2内。m,n的作用域限于main函数内。192全局变量全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,而属于一个源程序文件。其作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明。只有在函数内经过说明的全局变量才能使用。全局变量的说明符为extern。但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。【例6-5】输入一个立方体的长、宽、高,计算立方体的体积和

15、三个面的面积。#includefloat s1,s2,s3;float vs(float a,float b,float c)float v;v=a*b*c;s1=a*b;s2=b*c;s3=a*c;return v;main()float v,l,w,h;printf(input length,width and heightn);scanf(%f,%f,%f,&l,&w,&h);v=vs(l,w,h);printf(v=%f s1=%f s2=%f s3=%fn,v,s1,s2,s3);输入:1.0,2.0,3.0结果为:vs=6.000000 s1=2.000000 s2=6.00000

16、0 s3=3.000000 206.3.3 变量的生存期 变量在调用时必须分配内存单元(或寄存器),所以变量就有生存时间的问题。变量什么时候分配内存单元(或寄存器),什么时候释放内存单元(或寄存器),都是值得考虑的问题。这样就引入了变量的生存期的概念。变量从开始分配内存单元(或寄存器)到释放所分配的内存单元(或寄存器)的期间被称为变量的生存期。变量按其生存期可分为动态存储变量和静态存储变量。216.3.4 动态存储变量与静态存储变量 静态存储变量通常是在变量定义时就分配好存储单元并一直保持不变,直至整个程序结束。全局变量即属于此类存储方式。动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放。典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配,调用函数完毕立即释放。如果一个函数被多次调用,则反复地分配、释放形参变量的存储单元。从以上分析可知,静态存储变量是一直存在的,而动态存储变量则时而存在时而消失。226.3.5 变量的存储类型 存储属性registerautoexternstatic存储位置寄存器内存作用域局部全局局部

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

当前位置:首页 > 教育教学/培训 > 电大函授

copyright@ 2008-2021 八斗文库网站版权所有

经营许可证编号:湘ICP备2022012878号