版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、关于函数与模块设计第1页,共30页,2022年,5月20日,10点59分,星期四第七章 函数与模块设计学习目标理解模块化是程序设计的重要原则,函数是 C 语言实现模块化的途径掌握 C 语言中函数的定义形式,能够实现自定义函数理解函数调用过程中函数原型的作用掌握函数调用过程中实际参数与形式参数的值传递规则理解函数返回值的和函数类型之间的关系理解 C 语言中函数调用机制理解 C 语言中的作用域规则,理解变量的存储类型第2页,共30页,2022年,5月20日,10点59分,星期四7.1 函数概述函数是模块化的基本单位主调函数与被调函数程序、源文件与函数关系程序中各模块关系第3页,共30页,2022年
2、,5月20日,10点59分,星期四7.1 函数概述模块在C语言中主要是通过函数实现。模块的组织是通过函数间的调用而完成。一个可实际运行的程序可由一个或多个源程序文件组成,其中有且只能有一个源程序文件中包含main函数。第4页,共30页,2022年,5月20日,10点59分,星期四7.2 函数分类函数按用户使用的角度来分可分为标准函数:系统定义提供的函数,无需用户定义,直接使用。自定义函数:用户根据自己解决问题的需要定义的函数。函数的返回值可分为有返回值无返回值函数的参数形式来分可分为无参函数:函数定义时无需给出任何参数,引用时也不用指定参数。有参函数:函数定义时需要给出参数,这个参数参与函数体
3、中的数值运算。从是否可被其他编译单位调用的角度函数可分为外部函数内部函数第5页,共30页,2022年,5月20日,10点59分,星期四7.2 函数的声明、定义与调用函数声明函数定义函数调用第6页,共30页,2022年,5月20日,10点59分,星期四函数声明函数声明格式格式:函数返回值类型名 函数名(形式参数表);示例一:int Inc( int x );示例二:int Add( int x, int y );示例三:void Swap( int x, int y );示例四:void Compute();函数声明的目的将函数的具体形式呈现给使用它的函数或模块一般出现在头文件中第7页,共30页
4、,2022年,5月20日,10点59分,星期四注意:1、函数一般会有一个返回值,如果没有值函数没有返回值,可以用无值型(void)来表示函数的返回值类型。2、函数声明的列表中也可以省略形参名称,但不建议这样定义。如:int add(int , int ); void swap(int , int );3、函数如果没有形参,函数声明时可以只有括号,但括号不能省略,也可以用void来表示该函数没有参数。 如: int copmute( ); 或 int compute(void);4、在编程中,一般会先定义头文件,将该程序用到的所有函数都声明在该头文件中,如果没有放在头文件中,那么可以直接放在in
5、clude之后,也可以直接放在被调函数中。5、函数声明后应该加分号。 第8页,共30页,2022年,5月20日,10点59分,星期四函数定义函数定义:实现该函数函数的定义格式: 数据类型 函数名(形参表) 函数体; 说明:函数体是一个程序段,也可以是一个复合语句,函数可长可短。函数的定义类型必须和函数声明的完全一致,函数声明后不加分号。形参表可以没有参数,称无参函数,否则为有参函数,如果出现多个参数应该用;隔开。第9页,共30页,2022年,5月20日,10点59分,星期四函数定义有些情况下,我们需要先定义一个空的函数待以后实现其具体功能,这样的函数定义格式如下: 类型说明 函数名() ;自定
6、义函数名和变量名相似,一旦定义函数,主函数就可以通过函数名调用该函数了。函数的数据类型主要是指函数有返回值的数据类型,对于无确切返回值的函数通常用void来定义。函数的返回值:被调函数向主函数通过return语句返回一个值,且只能返回一个值。Return语句的格式为: Return(表达式); 或return 表达式; Return语句的作用有两个:一个结束函数的运行,而是带着返回值返回主函数。第10页,共30页,2022年,5月20日,10点59分,星期四函数定义示例一自定义函数 Add() 求两个整数之和int Add( int x, int y ) int z; z = x + y; r
7、eturn z;第11页,共30页,2022年,5月20日,10点59分,星期四函数定义示例二自定义函数 Cmp() 比较两个整型数据 x、y 的大小,如果 x 等于 y 函数返回 0,如果 x 大于 y 返回 1,如果 x 小于 y 返回 1int Cmp( int x, int y ) int z; if( x = y ) z = 0; else if( x y ) z = 1; else z = 1; return z;第12页,共30页,2022年,5月20日,10点59分,星期四函数定义示例三编写函数实现交换两个整型数据值并将交换前和交换后的值输出void Swap( int x,
8、int y ) int temp; printf( ”x=%d, y=%dn”, x, y ); temp = x; x = y; y = temp; printf( ”x=%d, y=%dn”, x, y ); return; /* 此语句可以省略 */第13页,共30页,2022年,5月20日,10点59分,星期四函数调用函数调用的一般格式为: 函数名(实参列表)按函数在程序中出现的位置来分,有两种函数调用方式: 1、函数语句 把函数作为一条语句,主函数不要求被调函数返回值,只要求被调函数完成一步操作。 如:printfstar( ) ; 2、函数表达式 函数出现在一个表达式中,要求函数返
9、回一个确定的值以参加表达式的运算。 如:z = 2 *max(x, y);第14页,共30页,2022年,5月20日,10点59分,星期四函数调用注意:当C语言只有一个源程序时,函数的位置会影响编译系统对源文件的编译。被调函数放在调用函数之前时,调用函数中可以不加被调函数的申明;被调函数放在调用函数之后时,调用函数中要申明被调函数,或者直接在函数的外部做函数申明,则各个主调函数中不必对被调函数再做申明了。第15页,共30页,2022年,5月20日,10点59分,星期四函数参数与返回值形参和实参形参:在函数定义时写在函数名的后面的参数。实参:在调用函数时写在函数名后面的参数。形式函数与实际参数形
10、式参数在函数调用发生时获得内存空间,进而接受相应实际参数的值函数调用发生前计算每个实际参数的值实际参数与形式参数在数目、类型、顺序上保持一致或赋值兼容实际参数仅将值拷贝给形式参数,这是一个单向值传递过程,函数内部对形式参数值的改变不会对实际参数产生任何影响返回值使用return语句返回值,没有返回值则可以省略第16页,共30页,2022年,5月20日,10点59分,星期四函数调用示例编写程序,在 main() 函数中使用 Add() 函数将从键盘输入的两个整数相加并打印和#include int Add( int x, int y ); 注意申明语句的位置void main() int a,
11、b, sum; printf( ”Input a and b : ” ); scanf( ”%d%d”, &a, &b ); sum = Add( a, b ); printf( ”a=%d, b=%d, a+b=%d”, a, b, sum );int Add( int x, int y ) int z; z = x + y; return z; 第17页,共30页,2022年,5月20日,10点59分,星期四函数的嵌套调用 一个程序可能由一个主函数和多个子函数组成,主函数调用某个函数,该函数又调用其他的函数,函数之间的调用形成一层一层的关系。在一个被调用的函数中再调用其他函数称为函数的嵌套
12、。第18页,共30页,2022年,5月20日,10点59分,星期四嵌套调用举例求1!2!3!n!,n由键盘输入。 #include double fac(int n) double j=1.0; int i; for(i=1;i=n;i+) j*=i; return j;double Sfac(int n) double s=0; int i; for(i=1;i=n;i+) s+=fac(i); /fac函数在本函数之前定义,不需声明return s;第19页,共30页,2022年,5月20日,10点59分,星期四嵌套调用举例main() double s; int n; printf(ni
13、nput n:); scanf(%d,&n); s=Sfac(n); /*Sfac函数在本函数之前定义,不需声明*/ printf(n1!+2!+.+%d!=%f,n,s);第20页,共30页,2022年,5月20日,10点59分,星期四变量的作用域和存储类型变量定义的三种地方函数内部函数外部函数形参形式第21页,共30页,2022年,5月20日,10点59分,星期四变量的作用域和存储类型内部变量定义只能出现在函数的开始的位置作用范围(即生存期)从定义到该函数的结束外部变量定义出现在所有函数外作用范围从定义到程序结束 float a,b; /外部变量 sub1(int x) int i; in
14、t a1,b1; /外部变量 sub2(int y) int j; main() 第22页,共30页,2022年,5月20日,10点59分,星期四变量的作用域和存储类型内部变量和外部变量区别#include int a=1,b=2; /外部变量a,bvoid fac() int a=3; /内部变量a与外部变量a同名 printf(nfac: a=%d,b=%dn,a,b);main() int b=4; /内部变量b与外部变量b同名 fac(); printf(main: a=%d,b=%dn,a,b);第23页,共30页,2022年,5月20日,10点59分,星期四变量的存储类型自动型(a
15、uto)寄存器类型(register)静态变量类型(static)外部变量类型(extern)第24页,共30页,2022年,5月20日,10点59分,星期四应用举例编写函数LeapYear,判断参数y是否为闰年,若是返回1,否则返回0。int LeapYear(int y) if(y%4=0 & y%100!=0 | y%400=0) return 1; else return 0;第25页,共30页,2022年,5月20日,10点59分,星期四应用举例编程求S=a+aa+aaa+aaaa(最后一项含n个a)的值,其中a是一个数字。例如,若a=2,n=5时,S=2+22+222+2222+2
16、2222,其值应为24690。long sub(int a,int n) long m=0; int i;for(i=1;i=n;i+) m=m*10+a; /循环n次,每次增加1位a值, return m; main() int A,N,i; long s=0; printf(ninput A,N:); scanf(%d%d,&A,&N); for(i=1;i=N;i+) s+=sub(A,i); printf(S=%ldn,s); 第26页,共30页,2022年,5月20日,10点59分,星期四应用举例编写两个函数,分别用来求两个正整数的最大公约数和最小公倍数,主函数中,输入这两个正整数,
17、通过函数调用求出结果并输出。#include int gcd(int x,int y);int gcm(int x,int y);main() int m,n; printf(input data:); scanf(%d,%d,&m,&n); if(mn) m=m+n,n=m-n,m=m-n; /若m比n小,则将m,n的值互换 printf(ngcd=%d,gcd(m,n); printf(ngcm=%d,gcm(m,n); 第27页,共30页,2022年,5月20日,10点59分,星期四应用举例#include int gcd(int x,int y) /用展转相除法求最大公约数 int t; while(y!=0) t=x%y; x=y; y=t; return x; int gcm(int x,int y) /求最小公倍数 int t; t=x*y/gcd(x,y); /最小公倍数等于两数乘积除以它们的最大公约数 return t;第28页,共30页,2022年,5月20日,10点59分,星期四应用举例求e1+1/1!+1/2!
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度医疗设备研发与应用合同3篇
- 二零二五版私募股权投资基金股权收购合同2篇
- 二零二五版企业股权激励项目执行与改进合同2篇
- 二零二五年度房产投资分期付款合同模板3篇
- 二零二五年蔬菜种子进口合同2篇
- 二零二五年度酒楼市场拓展与股权激励方案合同2篇
- 二零二五年模具生产项目质量保证合同3篇
- 二零二五版智能家居货款担保合同范本3篇
- 二零二五年船舶抵押借款合同范本修订版3篇
- 二零二五年户外活动用安全护栏租赁合同3篇
- 财务尽职调查资料清单-立信
- 2024至2030年中国柔性电路板(FPC)行业市场深度分析及发展趋势预测报告
- IGCSE考试练习册附答案
- 小学三年级下一字多义(答案)
- Unit 6 同步练习人教版2024七年级英语上册
- 农耕研学活动方案种小麦
- 九三学社申请入社人员简历表
- 非诺贝特酸胆碱缓释胶囊-临床用药解读
- 设备管理:设备管理的维护与保养
- 土特产行业现状分析
- 苏教版五年级上册数学简便计算大全500题及答案
评论
0/150
提交评论