版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 第第5 5章章 函数函数模块化程序设计模块化程序设计 基本思想:将一个大的程序按功能分割成一些小模块基本思想:将一个大的程序按功能分割成一些小模块, , 特点:特点:各模块相对独立、功能单一、结构清晰、接口简单各模块相对独立、功能单一、结构清晰、接口简单控制了程序设计的复杂性控制了程序设计的复杂性提高元件的可靠性提高元件的可靠性缩短开发周期缩短开发周期避免程序开发的重复劳动避免程序开发的重复劳动易于维护和功能扩充易于维护和功能扩充 开发方法开发方法: : 自上向下自上向下, ,逐步分解,分而治之逐步分解,分而治之函数分类函数分类 从用户角度从用户角度标准函数(库函数):由系统提供标准函数(库
2、函数):由系统提供用户自定义函数用户自定义函数(1 1)在程序中要调用某个库函数,则要用预处理命令 # #includeinclude将该函数所在的头文件包含到程序中(2 2)要正确使用一个库函数,取得预期的结果,程序设计人员需要准确理解库函数,函数的功能描述和函数原型。使用使用库函数库函数应注意:应注意:1 1、函数功能、函数功能2 2、函数参数的数目和顺序,及各参数意义和类型、函数参数的数目和顺序,及各参数意义和类型3 3、函数返回值意义和类型、函数返回值意义和类型4 4、需要使用的包含文件、需要使用的包含文件5.2 5.2 函数的定义与调用函数的定义与调用5.2.1 5.2.1 函数定义
3、函数定义类型说明类型说明 函数名(含类型说明的形式参数表)函数名(含类型说明的形式参数表) 说明部分说明部分 执行部分执行部分 int add(int x, int y) int z; z=x+y; return(z);例5.1 输入两个正整数m,n(mn),计算从m个元素中任取n个元素的组合数。计算公式为:在该问题的求解中,需要三次计算阶乘值:如果有一个函数可以提供求阶乘的功能,调用三次就可以解决问题了。可以自行编写求阶乘的函数。函数编写如下:long fac(int x) int i; long f =1; for(i=1;i=x;i+) f=f*i; return (f);1主调函数与被
4、调函数main函数是一个程序的执行入口程序的执行是从main函数开始的其它函数必须由main函数调用才能得到执行。mainabcdef 图5.1 函数调用关系示意图1.1.形式参数与实际参数形式参数与实际参数形式参数:在函数定义的函数首部,函数名后的括号中说明的变量,简称形参。形参的个数可以有多个,多个形参之间用逗号隔开。实在参数:函数被调用时,在调用处给出对应的参数,简称实参,实参往往是具有明确值的常量、变量或表达式等。在编译程序时,系统并不给形参分配内存空间。在函数被调用时,形式参数才临时占有存储空间,并从对应的实在参数获得值。main() int a=10, b=24 ,sum; sum
5、=add(a, b); printf(”sum= %dn,sum);int add(int x,int y) int z; z=x+y; return(z);2函数值的返回在函数体中,对形式参数接收的数据进行具体操作,并应该在函数体的最后将处理结果返回给主调函数。返回处理结果必须采用returnreturn语句完成。returnreturn语句的形式: returnreturn (表达式);或或 return 表达式;return语句执行后,程序将退出被调函数,被调函数携带函数值返回主调函数,在主调函数中继续执行。int add(int x,int y) int z; z=x+y; retur
6、n(z); 1 1无参函数与无返回值的函数(1 1)无参函数函数的定义中可以没有形式参数,称为无参函数。int printstar( ) printf(*n); return 1;(2)无返回值的函数函数返回值的类型应定义为void,即表示“空类型”,在函数体中,return语句可以省略。void swap(int x,int y ) int temp; temp=x; x=y; y=temp; 例5.2 设计一个函数,其功能是分解并打印出参数x的各个素数因子。如:36=1*2*2*3*3。void divisor(int x) int i; printf(%d=1,x); for(i=2;i
7、n) c=fac(m)/(fac(n)*fac(m-n); printf(c(%d,%d)=%dn,m,n,c); else printf(input data errorn);对在程序中除main之外的所有函数进行原型说明int cmn(int m,int n);long fac(int x)main() /*main函数*/ int m,n,c; long fac(int x) /*fac函数*/ int i; long f=1; int cmn(int m,int n);/*cmn函数*/ 1 1 根据函数有无返回值,可以将调用方式分为两种 (1 1)对于有返回值的函数的调用,通常作为表
8、达式的一部分。 定义一个max函数,其功能是返回两个值中的大数 用max(a,max(b,c)这样的函数调用得到a,b,c三者中的大者。 可以看到,一次函数调用能够作为另一次函数调用的实参。 (2 2)对于无返回值的函数,函数的调用通常作为一个语句 对于例5.2所示的函数可以给出如下的main函数进行调用: void divisor(int x); /* 函数原型说明 */ main() int n; printf(input n:); scanf(%d,&n); divisor(n); 1 函数的调用过程函数调用过程是使函数得到执行的过程,有以下步骤: (1 1)根据函数名找到被调函
9、数,若没找到,系统将报告出错信息。 (2 2)计算实在参数的值。 (3 3)将实在参数的值传递给形式参数。 (4 4)中断在主调函数中的执行,转到被调函数的函数体中开始执行。 (5 5)遇到return语句或函数结束的花括号时,返回主调函数。 (6 6)从主调函数的中断处继续执行 1 1 参数的结合问题参数的结合问题在函数调用时,将实参值传给对应的形参注意 (1)实参的个数和形参的个数应该相等 (2)实参与形参的应该在顺序上一一对应, (3)实参的类型一般应该与对应形参的类型相同 (4)C语言中实参与形参的结合是一种传值方式 将实参的值拷贝一份传递给对应的形参 (5)如形参的值发生改变,不影响
10、实参的值。例例5.35.3 参数结合示例。int change(int x,int y);main() int a,b,m; printf(input two data:); scanf(%d %d,&a,&b); m=change(a,b); printf(a=%d b=%d m=%d,a,b,m);int change(int x,int y) x+; y-; return x*y;3535xy main函数 change函数44b a5.3 5.3 变量作用域变量作用域所谓变量的作用域,是指一个变量有效的范围根据变量作用范围不同,变量分为局部变量和全局变量5.3.1 5.
11、3.1 局部变量局部变量所谓局部变量,是指定义在一个程序块(函数)中的变量1 1局部变量的定义位置及作用域 在函数体的开始处。 在复合语句的开始处 它的作用范围只是定义它的程序块2 2对于局部变量的补充说明对于局部变量的补充说明(1 1)不同函数中的变量可以同名,它们互不影响(2 2)形式参数也属于局部变量(3 3)main函数中定义的变量也只能在main函数中有效(4 4)main函数中,不能引用其他函数中定义的局部变量3 3局部变量的初始值与初始化局部变量的初始值与初始化自动变量定义时所分配的存储单元中原来存放的值就是该变量的初始值,是一个不确定的值变量在必要时必须先赋值,后引用。所谓变量
12、的初始化就是在定义变量的同时,给该变量一个确定的值。 如: int i,s=0; for (i=1;i1)(n-1)! (n1)可以看出,这是一个递归的定义。按公式可编程如下:可以看出,这是一个递归的定义。按公式可编程如下:# #includeincludelong fac(int n); long fac(int n); / /* * 求阶乘函数原型声明求阶乘函数原型声明 * */ /main()main() int n; long y; int n; long y; printf(ninput a integer number:n); printf(ninput a integer number:n); scanf(%d,&n); scanf(%d,&n); if (n0) printf(data errorn); if (n0) printf(data errorn); else else y=fac(n); y=fac(n); printf(%d!=%ld,n,y); printf(%d!=%ld,n,y); long fac(int n)long fac(int n) long f; long f; if(n=1) f=1; if(n=1) f=1;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025租房合同协议范本模板
- 水厂个人工作总结(3篇)
- 2025超市水果采购合同【超市水果等配送合同】
- 混凝土试验员测试题及答案
- 会计上岗证培训心得3篇
- 采购人员工作总结
- 初中毕业晚会流程
- 电气工程师个人年终工作总结(3篇)
- 淘宝运营助理转正述职报告
- 介绍火烈鸟文具
- 2025年教师考试时事政治考点热点题库含完整答案
- 球馆合伙协议合同模板
- 2024年陕西咸阳杨陵区招聘社区专职工作人员考试真题
- 2025中国光伏组件回收技术发展现状与循环经济战略报告
- 家庭宽带服务质量保障流程规范(2024版)
- 2025年法院书记员招聘考试笔试试题附答案
- 学堂在线 战场侦察监视技术与装备 章节测试答案
- 铁路行车事故应急预案范本
- GB/T 18915.2-2002镀膜玻璃第2部分:低辐射镀膜玻璃
- 2022年中小学教师职称评定答辩题
- FZ/T 01057.1-2007纺织纤维鉴别试验方法 第1部分:通用说明
评论
0/150
提交评论