版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、7.1 函数是什么函数是什么7.2 函数的定义和调用函数的定义和调用7.3 函数的嵌套调用和递归调用函数的嵌套调用和递归调用7.4 数组作为函数参数数组作为函数参数7.5 变量的作用域和生存期变量的作用域和生存期P1687.1 函数是什么函数是什么假设程序的功能比较多,规模比较大,把一切的程序代码都写在一个主函数中,就会使主函数变得庞杂、头绪不清,使阅读和维护程序变得困难。P168有时程序中要多次实现某一功能,就需求多次反复编写实现此功能的程序代码。这使程序冗长,不精炼。7.1 函数是什么函数是什么P168采用“组装的方法简化程序设计过程事先编好一批函数实现各种不同的功能用到什么函数就直接装运
2、用就可以这就是模块化的程序设计7.1 函数是什么函数是什么P168函数就是功能(Function)每一个函数用来实现一个特定的功能函数的名字应反映其代表的功能7.1 函数是什么函数是什么P168在设计一个较大的程序时,往往把它分为假设干个程序模块,每一个模块包括一个或多个函数,每个函数实现一个特定的功能。7.1 函数是什么函数是什么P168一个程序可由一个主函数和假设干个其他函数构成。由主函数调用其他函数,其他函数也可以相互调用。同一个函数可以被一个或多个函数调用恣意多次7.1 函数是什么函数是什么P1687.1 函数是什么函数是什么P168mainabcfghdeie除了可以运用库函数外,还
3、可以编写一些身手域或本单位常用到一些公用函数,供身手域或本单位的人员运用。、在程序设计中要擅长利用函数,可以减少各人反复编写程序段的任务量,同时可以方便地实现模块化的程序设计。7.1 函数是什么函数是什么P168阐明:阐明:(1) 一个程序由一个或多个程序模块组一个程序由一个或多个程序模块组成,每一个程序模块作为一个源程序文件成,每一个程序模块作为一个源程序文件。对于较大的程序,普通不把一切内容全。对于较大的程序,普通不把一切内容全放在一个源程序文件中,而是将它们分别放在一个源程序文件中,而是将它们分别放在假设干个源文件中,由假设干个源程放在假设干个源文件中,由假设干个源程序文件组成一个序文件
4、组成一个C程序。这样便于分别编程序。这样便于分别编写、分别编译,提高伐试效率。一个源程写、分别编译,提高伐试效率。一个源程序文件可以为多个序文件可以为多个C程序所调用。程序所调用。阐明:阐明:(2) 一个源程序文件由一个或多个函数以一个源程序文件由一个或多个函数以及其他有关内容组成。一个源程序文件是及其他有关内容组成。一个源程序文件是一个编译单位,在程序编译时是以源程序一个编译单位,在程序编译时是以源程序文件为单位进展编译的,而不是以函数为文件为单位进展编译的,而不是以函数为单位进展编译的。单位进展编译的。阐明:阐明:(3) 不论不论main函数出如今什么位置,总函数出如今什么位置,总是从是从
5、main函数开场执行。假设在函数开场执行。假设在main函函数中调用其他函数,在调用后流程前往到数中调用其他函数,在调用后流程前往到main函数,在函数,在main函数中终了整个程序函数中终了整个程序的运转。的运转。阐明:阐明:(4) 一切函数都是平行的,即在定义函数一切函数都是平行的,即在定义函数时是分别进展的,是相互独立的。一个函时是分别进展的,是相互独立的。一个函数并不从属于另一个函数,即函数不能嵌数并不从属于另一个函数,即函数不能嵌套定义。函数间可以相互调用,但不能调套定义。函数间可以相互调用,但不能调用用main函数。函数。main函数是由系统调用的函数是由系统调用的。阐明:阐明:
6、(5) 从用户运用的角度看,函数有两种。从用户运用的角度看,函数有两种。库函数,它是由系统提供的,用户不用本库函数,它是由系统提供的,用户不用本人定义而直接运用它们。应该阐明,不同人定义而直接运用它们。应该阐明,不同的的C言语编译系统提供的库函数的数量和言语编译系统提供的库函数的数量和功能会有一些不同,当然许多根本的函数功能会有一些不同,当然许多根本的函数是共同的。是共同的。用户本人定义的函数。它是用以处理用户用户本人定义的函数。它是用以处理用户专门需求的函数。专门需求的函数。阐明:阐明:(6) 从函数的方式看,函数分两类。从函数的方式看,函数分两类。 无参函数。函数没有参数,普通用来无参函数
7、。函数没有参数,普通用来执行固定的一组操作。无参函数可以带回执行固定的一组操作。无参函数可以带回或不带回函数值,但普通以不带回函数值或不带回函数值,但普通以不带回函数值的居多。的居多。 有参函数。在调用函数时,要给出实有参函数。在调用函数时,要给出实参。主调函数在调用被调用函数时,经过参。主调函数在调用被调用函数时,经过参数向被调用函数传送数据,普通情况下参数向被调用函数传送数据,普通情况下,执行被调用函数时会得到一个函数值,执行被调用函数时会得到一个函数值,供主调函数运用。供主调函数运用。7.2 函数的定义和调用函数的定义和调用7.2.1 为什么要定义函数7.2.2 函数定义7.2.3 函数
8、的调用7.2.4 对被调用函数的声明和函数原型P170C言语要求,在程序中用到的一切函数,言语要求,在程序中用到的一切函数,必需必需“先定义,后运用先定义,后运用指定函数名字、函数前往值类型、函数指定函数名字、函数前往值类型、函数实现的功能以及参数的个数与类型,将实现的功能以及参数的个数与类型,将这些信息通知编译系统。这些信息通知编译系统。7.2.1 为什么要定义函数为什么要定义函数P170指定函数的名字,以便以后按名调用指定函数的名字,以便以后按名调用指定函数类型,即函数前往值的类型指定函数类型,即函数前往值的类型指定函数参数的名字和类型,以便在调指定函数参数的名字和类型,以便在调用函数时向
9、它们传送数据用函数时向它们传送数据指定函数的功能。这是最重要的,这是指定函数的功能。这是最重要的,这是在函数体中处理的在函数体中处理的7.2.1 为什么要定义函数为什么要定义函数P170假设程序中要调用库函数,只需用假设程序中要调用库函数,只需用#include指令把有关的头文件包含到指令把有关的头文件包含到本文件模块中即可。本文件模块中即可。假设想运用库函数中没有的函数,需求假设想运用库函数中没有的函数,需求程序设计者在程序中本人定义。程序设计者在程序中本人定义。7.2.1 为什么要定义函数为什么要定义函数P1707.2.2 函数定义函数定义1.怎样定义无参函数函数名后面圆括号中空的,没有参
10、数定义无参函数的普通方式为: 类型名 函数名 函数体 P171包括声明部分和包括声明部分和语句部分语句部分指定函数指定函数值的类型值的类型7.2.2 函数定义函数定义1.怎样定义无参函数函数名后面圆括号中空的,没有参数定义无参函数的普通方式为: 类型名 函数名 函数体 P171表示不需求表示不需求带回函数值带回函数值void7.2.2 函数定义函数定义2. 怎样定义有参函数定义有参函数的普通方式为: 类型标识符 函数名方式参数表列 函数体 P1717.2.2 函数定义函数定义2. 怎样定义有参函数 int max (int x,int y) int z; if(xy) z=x; else z=
11、y; return(z); P171求求x和和y二者二者中大者中大者7.2.3 函数的调用函数的调用1.调用无参函数的方式 函数名() 如print_star()2. 调用无参函数的方式 函数名实参表列如max(a,b)P172假设有多个假设有多个参数,用逗参数,用逗号隔开号隔开例7.2 输入两个整数,输出二者中的大者。要求在主函数中输入两个整数,用一个函数max求出其中的大者,并在主函数中输出此值。#include int max(int x,int y) int z; if (xy) z=x; else z=y; return(z); 参数类型参数类型函数类型函数类型定义函数定义函数定义函
12、数内定义函数内运用的变量运用的变量 c=max(a,b); main函数函数int max(int x, int y) max函数函数 int z; z=xy?x:y; return(z); #include void main() int max(int x,int y); int a,b,c; printf(please input two number:); scanf(“%d,%d,&a,&b); c = max(a,b); printf(“max is %dn,c); int max(int x,int y) int z; if (xy) z=x; else z=y; return(
13、z); 方式参数方式参数实践参数实践参数函数调用的过程:在定义函数中指定的形参,在未出现函数在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元。调用时,它们并不占内存中的存储单元。在发生函数调用时,函数在发生函数调用时,函数max的形参被暂的形参被暂时分配内存单元。时分配内存单元。2a3bxy23实参实参形参形参函数调用的过程:2a3bxy23实参实参形参形参调用终了,形参单元被释放调用终了,形参单元被释放实参单元仍保管并维持原值,没有改动实参单元仍保管并维持原值,没有改动假设在执行一个被调用函数时,形参的值假设在执行一个被调用函数时,形参的值发生改动,不会改动主调函数的实
14、参的值发生改动,不会改动主调函数的实参的值调用函数的方式:按函数在程序中出现的位置来分,可以有按函数在程序中出现的位置来分,可以有以下以下3种函数调用方式种函数调用方式. 函数语句函数语句调用没有前往值的函数,函数调用单独作调用没有前往值的函数,函数调用单独作为一个语句为一个语句 如例如例7.1中的中的“print_star();调用函数的方式:按函数在程序中出现的位置来分,可以有按函数在程序中出现的位置来分,可以有以下以下3种函数调用方式种函数调用方式. 函数表达式函数表达式函数出如今一个表达式中,这种表达式称函数出如今一个表达式中,这种表达式称为函数表达式为函数表达式 如例如例7.2中的中
15、的“c=max(a,b);调用函数的方式:按函数在程序中出现的位置来分,可以有按函数在程序中出现的位置来分,可以有以下以下3种函数调用方式种函数调用方式. 函数参数函数参数函数调用作为一个函数的实参函数调用作为一个函数的实参 如如printf (%d, max (a,b);7.2.4 对被调用函数的声明对被调用函数的声明和函数原型和函数原型P175在一个函数中调用另一个函数需求具备如在一个函数中调用另一个函数需求具备如下条件:下条件:(1) 被调用函数必需是曾经定义的函数被调用函数必需是曾经定义的函数是库函数或用户本人定义的函数。是库函数或用户本人定义的函数。(2) 假设运用库函数,应该在本文
16、件开头假设运用库函数,应该在本文件开头加相应的加相应的#include指令。指令。(3) 假设运用本人定义的函数,而该函数假设运用本人定义的函数,而该函数的位置在调用它的函数后面,应该进展函的位置在调用它的函数后面,应该进展函数声明数声明7.2.4 对被调用函数的声明对被调用函数的声明和函数原型和函数原型P175函数原型的普通方式有两种:函数原型的普通方式有两种:如如 int max(int x,int y); int max(int,int);原型阐明可以放在文件的开头,这时本文原型阐明可以放在文件的开头,这时本文件中一切函数都可以运用此函数件中一切函数都可以运用此函数7.3 函数的嵌套调用
17、和递归调用函数的嵌套调用和递归调用P1777.3.1 函数的嵌套调用函数的嵌套调用7.3.2 函数的递归调用函数的递归调用7.3.1 函数的嵌套调用函数的嵌套调用调用一个函数的过程中,又可以调用另一个函数P1777.3.1 函数的嵌套调用函数的嵌套调用P177main函数函数调用调用a函数函数终了终了a函数函数调用调用b函数函数b函数函数7.4 数组作为函数参数数组作为函数参数7.4.1 数组元素作函数实参7.4.2 数组名作函数参数P1847.4.1 数组元素作函数实参数组元素作函数实参 由于实参可以是表达式,而数组元素可以是表达式的组成部分,因此数组元素可以作为函数的实参。P1857.4.
18、2 数组名作函数参数数组名作函数参数P186希望在函数中处置整个数组的元素时,可希望在函数中处置整个数组的元素时,可以用数组名作为函数实参以用数组名作为函数实参留意,此时只是将数组的首元素的地址传留意,此时只是将数组的首元素的地址传送给所对应的形参,因此对应的形参该当送给所对应的形参,因此对应的形参该当是指针变量是指针变量(见第见第8章章)。例例7.7 有有10个学生成果,用一个函数求全个学生成果,用一个函数求全体学生的平均成果。体学生的平均成果。解题思绪:解题思绪:在主函数中定义一个实型数组在主函数中定义一个实型数组score,将输,将输入的入的10个学生成果存放在数组中个学生成果存放在数组
19、中设计函数设计函数average,用来求学生平均成果,用来求学生平均成果需求把数组有关信息传送给需求把数组有关信息传送给average函数函数采取用数组名作为实参,把数组地址传给采取用数组名作为实参,把数组地址传给average函数,在该函数中对数组进展处函数,在该函数中对数组进展处置置#include void main() float average(float array10); float score10,aver; int i; printf(input 10 scores:n); for(i=0;i10;i+) scanf(%f,&scorei); aver=average(sco
20、re); printf(average score is %5.2fn,aver); 数组名作实参数组名作实参float average(float array10) int i; float aver,sum=array0; for(i=1;i10;i+) sum=sum+arrayi; aver=sum/10; return(aver); 与与score共占同一存储单元共占同一存储单元实参、形参都是实参、形参都是float型型相当于相当于score0相当于相当于scorei7.5 变量的作用域和生存期变量的作用域和生存期7.5.1 变量的作用域-部分变量和全局变量7.5.2 变量的存储方式
21、和生存期7.5.3 作用域和生存期的小结P1921 部分变量在函数和复合语句内定义的变量,称为内部变量或部分变量只在本函数或复合语句内范围内有效(从定义点开场到函数或复合语句终了)在此函数或复合语句以外是不能运用这些变量的P1922 全局变量一个程序可以包含一个或假设干个源程序文件(即程序模块),而一个源文件可以包含一个或假设干个函数在函数之外定义的变量是外部变量,也称为全局变量(或全程变量)全局变量的有效范围为从定义变量的位置开场到根源文件终了,在此范围内可以为本文件中一切函数所共用2 全局变量在一个函数中既可以运用本函数中的部分变量,又可以运用有效的全局变量。假设在同一个源文件中,外部变量
22、与部分变量同名,那么在部分变量的作用范围内,外部变量被“屏蔽了,即它不起作用,此时部分变量是有效的。7.5.2 变量的存储方式和生存期变量的存储方式和生存期变量的生存期:变量值存在的时间变量的两种存储方式:静态存储方式和动态存储方式静态存储方式是指在程序运转期间由系统分配固定的存储空间的方式动态存储方式是在程序运转期间根据需求进展动态的分配存储空间的方式P1957.5.2 变量的存储方式和生存期变量的存储方式和生存期全局变量采用静态存储方式,在程序开场执行时给全局变量分配存储区,程序执行终了释放。在程序执行过程中它们占据固定的存储单元,而不是动态地进展分配和释放。P1957.5.2 变量的存储
23、方式和生存期变量的存储方式和生存期在函数中定义的变量,在函数调用开场时分配动态存储空间,函数终了时释放这些空间。在程序执行过程中,这种分配和释放是动态的。P1957.5.2 变量的存储方式和生存期变量的存储方式和生存期每一个变量和函数都有两个属性:数据类型和数据的存储类别数据类型,如整型、浮点型等存储类别指的是数据在内存中存储的方式(如静态存储和动态存储)P1951.auto声明自动变量(auto变量)函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量),都属于此类在调用该函数时,系统给这些变量分配存储空间,在函数调用终了时就自动释放这些存储空间。因此这类部分变量称为自动变量。自动变
24、量用关键字auto作存储类别的声明int f(int a) auto int b,c=3; 可以省略可以省略2. static声明静态变量以下情况需求指定static存储类别:希望函数中的部分变量值在函数调用终了后不消逝而继续保管原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数调用终了时的值。这时就运用关键字static指定该部分变量为“静态部分变量。对静态部分变量的阐明:1静态部分变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运转期间都不释放。而自动变量即动态部分变量属于动态存储类别,占动态存储区空间而不占静态存储区空间,函数调用终了后即释放对静态部分变量的阐明:2对静态部分变量是在编译时赋初值的,即只赋初值一次,在程序运转时它已有初值。以后每次调用函数时不再重新赋初值而只是保管上次函数调用终了时的值。而对自动变量赋初值,不是在编
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广东东莞市麻涌镇大盛小学招聘产假代课英语教师1人考试参考题库及答案解析
- 2026年校招:西藏建工建材集团面试题及答案
- 2026年校招:销售代表真题及答案
- 2026年污水处理及其再生利用行业现状及前景展望报告及未来五至十年智能体与场景落地
- 2026年贵阳市工商资产经营管理有限公司人员招聘考试题库及答案详解
- 2026年中石化安徽石油分公司人员招聘笔试参考题库及答案详解
- 2026年乐器批发行业商业模式研究报告及未来五至十年政策红利与合规路径
- 2026年国网湖北省电力有限公司人员招聘考试参考试题及答案详解
- 2026年云南省城市建设投资集团有限公司人员招聘笔试参考试题及答案详解
- 2026年噪声与振动控制服务行业战略咨询报告及未来五至十年研发投入与专利布局
- 旋风分离器设计计算表-自动计算版(带公式自动计算版)
- 26版一上语文全册每课一练(含答案)
- 警棍盾牌操图文教材
- 2026年少先队辅导员技能大赛考试题库(含答案)
- 医务科医疗质量改进与安全管理工作计划
- 工业仿真软件基础教程245
- 2026年工伤事故预防培训试题及答案
- 实施指南(2026)《JBT 7364-2014倍速输送链和链轮》
- 医院临床科研能力提升
- 三腔二囊管的护理查房
- 《理解媒介:论人的延伸》阅读札记
评论
0/150
提交评论