版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第八章函数,本章学习重点函数的分类函数的定义函数的调用和宣言函数的实际参与形参照局部变量和全局变量的嵌套调用,8.1函数的定义,函数是习语言的基本构成单位,是模块计程仪编程的主要组成部分。 模块化用户针织面料是实现某种功能的程序段,通常作为函数来实现。8.1.1函数的分类,按定义的类型分为:主函数、库函数、用户定义函数。 主函数:主函数的调用名为main (),是习语言中最主要的函数,在习语言中是唯一的。 库函数:库函数通常由编译系统开发者制作、封装并嵌入习语言编译系统中。 用户定义函数:用户定义函数是用户定义执行特定功能的程序段,用户定义函数通常也称为子函数。 2根据是否会返还值,可以分为返
2、还值型函数和没有返还值的型函数。8.1.1函数的分类,返还值类型函数:返还值类型函数在定义时需要指定返还值的类型。 例如,int max ()段没有返回类型函数。 必须在函数名称前面加上void指定符,以指示没有返回类型函数。 根据三个函数是否有参数,根据函数是否有参数来区分它们。 引用函数:函数的定义和调用始终具有包含输入参数的函数。 无参数函数:函数的定义和调用中无参数的函数类型。8.1.2函数的定义,函数定义的一般表现形式是:类型指定符函数名(形状参照表列)计程仪程序体函数构成的程序计程仪结构,函数名1 (参数表列)程序体1,8.1.2函数的定义,作为无返还值函数定义返还值型的函数定义函
3、数类型指定符使用void。 例如,void test () printf (“thisisafunctiontestn”); 2返还值函数在定义包含返还值的函数定义时,可以使用void以外的数据类型。 函数使用return语句返回数值。 例如,01i nt sum () 0.2定0.3 int I=0、sum=0; 0.4威利(i10 ) 0.5 0.6和; 0.7 0.8回复和; 0.9,8.1.2函数的定义,3引数函数的定义,在使用函数时有时需要函数以外的变量和数值,在这种情况下需要使用函数的参数传达到函数的体内。 例如,01intmax (入口a,入口b ) 0.2 03if (ab )
4、 0.4返回a; 0.5电子0.6返回b; max 0.7函数确定两个整型数据a和b的大小,并返回较大的值。8.2函数的调用和宣言,通过函数定义后的调用来执行。 通常,在调用函数时,必须首先声明函数。8.2.1函数的调用,在定义之后,可以从其本身或其他函数本身进行调用。 函数调用的一般表现是,函数名(实参照表列)中函数名是函数定义的函数名,在此将函数称为被调用函数。 示例8.1 SubFuncCalcMaxVal.c设计返回int类型的函数max,计算主调用函数的两个变量的大小,并返回较大的一个。 两个数相同时,数据打印相同的信息。 例分析: 1子函数max的定义2函数头3形参照,8.2.1函
5、数的调用,4函数调用语句5 plum计程仪的入口6 plum的执行自定义函数可以在plum中多次调用,使用不同的实际参数,结果不同。 由于函数具有良好的模块管理功能和反复调用功能,广泛应用于解决堆计程仪中的实际问题。 实训8.1计算数学分割函数,数学分割函数P(m,n )由2个部分构成,mn时P(m,n )的值为0。 编制计程仪程序,在牛鼻子板上输入m和n的值,使用子函数计算阶乘,调用该函数实现数学函数的计算。 1需求分析:需求1 :计算分段数学函数的值需求2 :设计步骤子函数factorial,用于计算阶乘。 2对技术应用需求1,使用ifelse分支语句实现分阶段的数学函数计算。对于需求2,
6、设计一个名为factorial的子函数。 此函数包含一个返还值类型为double的波形参数,用于防止返还值值太大而导致值向上溢出。 源计程仪列: SubFuncCalcPartsFunction.c,8.2.2函数的声明,1函数声明的一般形式函数声明应该放在调用函数之前,其一般表示形式为:类型识别符函数名(类型识别符1形参数名1,类型识别符2形参数名2,); 也可以省略形状参数名称,仅保留类型标识符。 类型识别符函数名称(类型识别符1、类型识别符2 ),例如int min(int a,int b )或int min(int,int )、8.2.2函数的声明,两个函数声明的位置函数声明的作用通常
7、将函数声明布置在函数的开头,因为编译系统中定义的子函数被调用例如,函数调用语句int callback_test(int a,int b ) /关函数声明字void main()/主函数a=callback_test(x,y) /函数调用语句int callback_test(int a,int b ) /函数的定义函数设计一个名为overturnsequen的函数。 函数的功能是计算m的值。 其中n是从形状参数传递的。 3如果一个文件中不存在需要对多文件系统进行函数声明调用的函数及其自身的函数,则必须使用函数声明在编译pull计程仪柱时查找该函数,以便正确执行pull计程仪柱。实训8.2对圆
8、周率pi进行近似计算,作成计程仪方案,用公式计算圆周率pi,定义子函数计算pi,将该子函数保存在单独的文件中,将计算出的pi的值输出到主函数。 要确定pi的精度,请输入n的值。 1需求分析:需求1 :计算的值需求2 :通过调用数学库函数sqrt计算pi的值需求3 :输入n的值来确定pi的精确度需求4 :定义的子函数在另一个文件中声明需求5 :子函数并在declare.h文件中定义。 2 .对于技术应用需求1,定义子函数calc _ pi (双函数n ),计算等式的值。 对于需求2,从子函数calc _ pi (双n )调用sqrt函数。 需求3通过在主函数中输入n的值来确定pi的精确度。 在要
9、求4中,将子函数定义在单独的文件中,并将其命名为Calc_pi.c。 在要求5中,将创建一个名为declare.h的新文件,将子函数Calc_pi(double n )的声明放在更改文件中,并将标头文件包含在主函数所属的文件中。8.2.3函数的参数、1函数的波形参数仅出现在被调函数中,与在函数内定义的变量类似,可以在函数内的任何位置使用。 然而,形状引用仅能够用于本函数的体内,并且不能够用于其它函数。 2函数的实参实参仅出现在基调函数中。 通常,实际参数是能够作为数值计算的变量或公式,也可以是指针、数组名、函数等。 在调用3函数时的实参形参数函数调用时,主调函数将实参数的值传递给被调函数的形参
10、数,实现从主调函数向被调函数的数据传送。8.2.3函数的参数、函数调用时的实际参数和形状参数之间的值传递过程如下图所示:例8.3 ExchangeTwoValueInSubFunc.c设计了函数,命名为ExchangeValue,函数的作用是8.2.3函数的参数,例8.3 ExchangeValue ()函数调用时的m和n以及a和b的内存结构的变化图:8.3局部变量和全局变量,局部变量的范围在函数内被限定定,即变量的定义和使用在函数内如以下计程仪程序所示,0.1信道测试1 (信道c ) 0.2 0.3 int a,b; 0.4 0.5 0.6互连测试2 (互连) 0.7 0.8互连x,y; 0
11、.9 1.0 1.1;主() 1.2 1.3 14int f1=10,f2=12,res=0; 15v=测试1 (w ) 1.6 RES=测试2 (f1,F2 ) 1.7 1.8下一个=0; 下一个1.9 : 2.0 2.1 2.2、形参照c、变量a和b的范围仅用于函数test1 ()的内部。形状参数m和n、变量x和y的范围仅在函数test2()内部使用。变量w、vf1、f2和res的范围仅在函数main ()内部使用。变量next的范围、8.3局部变量和全局变量,例如8.4 PartVariable.c在函数内部定义了函数int cal(int m,int n ),在函数内部定义了内部变量m
12、n和nm,并计算m和n之间的差。 要引用、8.3.2全局变量或其它文件中的全局变量,必须声明全局变量。 声明全局变量的一般表示法为: extern类型识别符变量名称1全局变量的定义和声明全局变量可以在程序计程仪之前定义、在程序计程仪程序的中间定义、在程序计程仪程序之前定义,但如果在程序计程仪程序的中间定义,则可以声明变量如果示例8.4 OutVariable.c函数使用全局变量,则必须将全局变量的定义放在该函数之前。 否则,在函数中使用之前必须声明全局变量。 在一个自定义函数中自增两个全局变量,一个在函数之后定义,使用使用前声明的变量。8.3.2全局变量、2全局变量的范围全局变量可以使用任何函
13、数,当在各函数中变更这些个的变量时,该变量的值发生变化,影响其他函数使用该变量。 示例8.5 OutVariableControl.c在习语言中经常使用两个变量的值交换,但在示例8.3中不能使用子函数交换变量的值。 设计子函数exchange ()并在此函数中交换两个全局变量的值。 3全局变量的命名全局变量和局部变量的名称相同时,全局变量在局部变量范围内不起作用。8.4函数的嵌套调用和递归,习语言可以用一个函数调用另一个函数。 此方法称为函数的嵌套调用。 图显示了函数的嵌套调用的示意图。 例如8.6 ReCallbackFunc.c确定三个数字中的最大值有很多种方法,并且使用嵌套函数调用也是其
14、中一种方法,它设计两个函数,确定三个数字的最大值,并且使用嵌套函数调用来实现。 汉诺塔男同性恋也称为圆盘男同性恋,游戏方法有三个柱a、b和c,其中柱a从大到小通过n个中有孔的圆盘,通过柱b,要求将这n个圆盘移动到柱c,一次一个盘而且,在任何时候大盘子都不能出来,小碟子在下面的情况下,做成计程仪柱,实现n个碟子移动的汉诺塔移动方法方案计程仪柱设计。 1需求分析:需求1 :移动盘时的移动方法需求2 :移动n盘时的移动方法2技术应用需求1,只移动盘,将该盘从a移动到c的方法是AC。 在需求2中,在n个盘需要移动的情况下,首先考虑将上面的n-1个盘移动到b的方法,如果有将上面的n-1个盘用c移动到b的方法,则最下面的盘可以用需求1的方法将盘移动到c,接着用同样的方法将b的n-1个盘用a移动到c。 原代码: Hanoi.c,8.5数组作为函数参数,示例8.7checkarraycompcomponent.c有字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年广安职业技术学院单招职业适应性测试参考题库及答案解析
- 2026年甘肃卫生职业学院单招职业适应性考试备考试题及答案解析
- 2026年哈尔滨幼儿师范高等专科学校单招职业适应性考试参考题库及答案解析
- 2026年德阳城市轨道交通职业学院单招职业适应性测试参考题库及答案解析
- 2026年泉州医学高等专科学校单招职业适应性考试模拟试题及答案解析
- 期末考试总结23篇
- 2026年黑龙江建筑职业技术学院单招职业适应性考试模拟试题及答案解析
- 2026年唐山幼儿师范高等专科学校单招职业适应性测试模拟试题及答案解析
- 2026年辽宁民族师范高等专科学校单招职业适应性考试模拟试题及答案解析
- 2026年河南工业和信息化职业学院单招职业适应性考试模拟试题及答案解析
- 2025年榆林市住房公积金管理中心招聘(19人)备考笔试试题及答案解析
- 2025年金属非金属矿山(地下矿山)安全管理人员证考试题库含答案
- 2025秋苏教版(新教材)小学科学三年级上册知识点及期末测试卷及答案
- 2025年及未来5年中国非晶合金变压器市场深度分析及投资战略咨询报告
- 用友U8企业全面信息化解决方案
- 施工现场安全检查制度
- 旅游规划与开发(第五版)课件 第九章 旅游公共服务体系规划
- 2024年南网能源公司招聘笔试参考题库含答案解析
- 安徽恒光聚氨酯材料有限公司年产2000吨双吗啉基乙基醚技改项目环评报告
- 围产期母婴感染B族链球菌的防治及专家共识防治指南PPT课件院内培训
- 双梁桥式起重机设计毕业设计说明书
评论
0/150
提交评论