版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
关于函数与模块设计第1页,课件共30页,创作于2023年2月第七章函数与模块设计学习目标理解模块化是程序设计的重要原则,函数是C语言实现模块化的途径掌握C语言中函数的定义形式,能够实现自定义函数理解函数调用过程中函数原型的作用掌握函数调用过程中实际参数与形式参数的值传递规则理解函数返回值的和函数类型之间的关系理解C语言中函数调用机制理解C语言中的作用域规则,理解变量的存储类型第2页,课件共30页,创作于2023年2月7.1函数概述函数是模块化的基本单位主调函数与被调函数程序、源文件与函数关系程序中各模块关系第3页,课件共30页,创作于2023年2月7.1函数概述模块在C语言中主要是通过函数实现。模块的组织是通过函数间的调用而完成。一个可实际运行的程序可由一个或多个源程序文件组成,其中有且只能有一个源程序文件中包含main函数。第4页,课件共30页,创作于2023年2月7.2函数分类函数按用户使用的角度来分可分为标准函数:系统定义提供的函数,无需用户定义,直接使用。自定义函数:用户根据自己解决问题的需要定义的函数。函数的返回值可分为有返回值无返回值函数的参数形式来分可分为无参函数:函数定义时无需给出任何参数,引用时也不用指定参数。有参函数:函数定义时需要给出参数,这个参数参与函数体中的数值运算。从是否可被其他编译单位调用的角度函数可分为外部函数内部函数第5页,课件共30页,创作于2023年2月7.2函数的声明、定义与调用函数声明函数定义函数调用第6页,课件共30页,创作于2023年2月函数声明函数声明格式格式:函数返回值类型名函数名(形式参数表);示例一:intInc(intx);示例二:intAdd(intx,inty);示例三:voidSwap(intx,inty);示例四:voidCompute();函数声明的目的将函数的具体形式呈现给使用它的函数或模块一般出现在头文件中第7页,课件共30页,创作于2023年2月注意:1、函数一般会有一个返回值,如果没有值函数没有返回值,可以用无值型(void)来表示函数的返回值类型。2、函数声明的列表中也可以省略形参名称,但不建议这样定义。如:intadd(int,int);
voidswap(int,int);3、函数如果没有形参,函数声明时可以只有括号,但括号不能省略,也可以用void来表示该函数没有参数。如:intcopmute();或intcompute(void);4、在编程中,一般会先定义头文件,将该程序用到的所有函数都声明在该头文件中,如果没有放在头文件中,那么可以直接放在#include之后,也可以直接放在被调函数中。5、函数声明后应该加分号。第8页,课件共30页,创作于2023年2月函数定义函数定义:实现该函数函数的定义格式:数据类型函数名([形参表]){
函数体;}说明:函数体是一个程序段,也可以是一个复合语句,函数可长可短。函数的定义类型必须和函数声明的完全一致,函数声明后不加分号。形参表可以没有参数,称无参函数,否则为有参函数,如果出现多个参数应该用;隔开。第9页,课件共30页,创作于2023年2月函数定义有些情况下,我们需要先定义一个空的函数待以后实现其具体功能,这样的函数定义格式如下:类型说明函数名(){};自定义函数名和变量名相似,一旦定义函数,主函数就可以通过函数名调用该函数了。函数的数据类型主要是指函数有返回值的数据类型,对于无确切返回值的函数通常用void来定义。函数的返回值:被调函数向主函数通过return语句返回一个值,且只能返回一个值。Return语句的格式为:
Return(表达式);或return表达式;
Return语句的作用有两个:一个结束函数的运行,而是带着返回值返回主函数。第10页,课件共30页,创作于2023年2月函数定义示例一自定义函数Add()
求两个整数之和intAdd(intx,inty){intz;
z=x+y;returnz;}第11页,课件共30页,创作于2023年2月函数定义示例二自定义函数
Cmp()比较两个整型数据x、y的大小,如果x等于y函数返回0,如果x大于y返回1,如果x小于y返回–1intCmp(intx,inty){intz;if(x==y)z=0;elseif(x>y)z=1;elsez=–1;returnz;}第12页,课件共30页,创作于2023年2月函数定义示例三编写函数实现交换两个整型数据值并将交换前和交换后的值输出voidSwap(intx,inty){inttemp;
printf(”x=%d,y=%d\n”,x,y);
temp=x;
x=y;
y=temp;
printf(”x=%d,y=%d\n”,x,y);return;/*此语句可以省略*/}第13页,课件共30页,创作于2023年2月函数调用函数调用的一般格式为:函数名([实参列表])按函数在程序中出现的位置来分,有两种函数调用方式:
1、函数语句把函数作为一条语句,主函数不要求被调函数返回值,只要求被调函数完成一步操作。如:printfstar();2、函数表达式函数出现在一个表达式中,要求函数返回一个确定的值以参加表达式的运算。如:z=2*max(x,y);第14页,课件共30页,创作于2023年2月函数调用注意:当C语言只有一个源程序时,函数的位置会影响编译系统对源文件的编译。被调函数放在调用函数之前时,调用函数中可以不加被调函数的申明;被调函数放在调用函数之后时,调用函数中要申明被调函数,或者直接在函数的外部做函数申明,则各个主调函数中不必对被调函数再做申明了。第15页,课件共30页,创作于2023年2月函数参数与返回值形参和实参形参:在函数定义时写在函数名的后面的参数。实参:在调用函数时写在函数名后面的参数。形式函数与实际参数形式参数在函数调用发生时获得内存空间,进而接受相应实际参数的值函数调用发生前计算每个实际参数的值实际参数与形式参数在数目、类型、顺序上保持一致或赋值兼容实际参数仅将值拷贝给形式参数,这是一个单向值传递过程,函数内部对形式参数值的改变不会对实际参数产生任何影响返回值使用return语句返回值,没有返回值则可以省略第16页,课件共30页,创作于2023年2月函数调用示例编写程序,在main()
函数中使用
Add()函数将从键盘输入的两个整数相加并打印和#include<stdio.h>intAdd(intx,inty);注意申明语句的位置voidmain(){inta,b,sum;
printf(”Inputaandb:”);scanf(”%d%d”,&a,&b);
sum=Add(a,b);
printf(”a=%d,b=%d,a+b=%d”,a,b,sum);}intAdd(intx,inty){intz;z=x+y;returnz;}第17页,课件共30页,创作于2023年2月函数的嵌套调用
一个程序可能由一个主函数和多个子函数组成,主函数调用某个函数,该函数又调用其他的函数,函数之间的调用形成一层一层的关系。在一个被调用的函数中再调用其他函数称为函数的嵌套。第18页,课件共30页,创作于2023年2月嵌套调用举例求1!+2!+3!+…+n!,n由键盘输入。#include<stdio.h>doublefac(intn){doublej=1.0;inti;for(i=1;i<=n;i++)j*=i;returnj;}doubleSfac(intn){doubles=0;inti;for(i=1;i<=n;i++)s+=fac(i);//fac函数在本函数之前定义,不需声明returns;}第19页,课件共30页,创作于2023年2月嵌套调用举例main(){doubles;intn;printf("\ninputn:");scanf("%d",&n);s=Sfac(n);/*Sfac函数在本函数之前定义,不需声明*/printf("\n1!+2!+...+%d!=%f",n,s);}第20页,课件共30页,创作于2023年2月变量的作用域和存储类型变量定义的三种地方函数内部函数外部函数形参形式第21页,课件共30页,创作于2023年2月变量的作用域和存储类型内部变量定义只能出现在函数的开始的位置作用范围(即生存期)从定义到该函数的结束外部变量定义出现在所有函数外作用范围从定义到程序结束
floata,b;//外部变量
sub1(intx){inti;…}inta1,b1;//外部变量
sub2(inty){intj;…}main(){…}第22页,课件共30页,创作于2023年2月变量的作用域和存储类型内部变量和外部变量区别#include<stdio.h>inta=1,b=2;//外部变量a,bvoidfac(){inta=3;//内部变量a与外部变量a同名
printf("\nfac:a=%d,b=%d\n",a,b);}main(){intb=4;//内部变量b与外部变量b同名
fac();printf("main:a=%d,b=%d\n",a,b);}第23页,课件共30页,创作于2023年2月变量的存储类型自动型(auto)寄存器类型(register)静态变量类型(static)外部变量类型(extern)第24页,课件共30页,创作于2023年2月应用举例编写函数LeapYear,判断参数y是否为闰年,若是返回1,否则返回0。intLeapYear(inty){if(y%4==0&&y%100!=0||y%400==0)return1;elsereturn0;}第25页,课件共30页,创作于2023年2月应用举例编程求S=a+aa+aaa+……+aa…aa(最后一项含n个a)的值,其中a是一个数字。例如,若a=2,n=5时,S=2+22+222+2222+22222,其值应为24690。longsub(inta,intn){longm=0;inti;for(i=1;i<=n;i++)m=m*10+a;//循环n次,每次增加1位a值,
returnm;}main(){intA,N,i;longs=0;printf("\ninputA,N:");scanf("%d%d",&A,&N);for(i=1;i<=N;i++)s+=sub(A,i);printf("S=%ld\n",s);}第26页,课件共30页,创作于2023年2月应用举例编写两个函数,分别用来求两个正整数的最大公约数和最小公倍数,主函数中,输入这两个正整数,通过函数调用求出结果并输出。#include<stdio.h>intgcd(intx,inty);intgcm(intx,inty);main(){intm,n;printf("inputdata:");scanf("%d,%d",&m,&n);if(m<n)
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));}
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026山东聊城市教育和体育局直属学校招聘48人考试参考题库及答案解析
- 2026四川长虹电器股份有限公司招聘比价审计主管岗位1人考试备考题库及答案解析
- 2026年及未来5年市场数据中国玉米塑料行业发展监测及投资策略研究报告
- 2026浙江台州银行丽水分行招聘笔试备考题库及答案解析
- 2026年及未来5年市场数据中国平价连锁酒店行业发展监测及行业市场深度研究报告
- 2026年度河南省地震局事业单位公开招聘9人笔试模拟试题及答案解析
- 2026浙江稠州商业银行绍兴分行诚聘金融英才考试备考题库及答案解析
- 2026山东青岛市农业农村局所属部分事业单位紧缺急需专业人才招聘7人笔试备考题库及答案解析
- 2026湖南怀化市溆浦县社会保险服务中心公益性岗位招聘1人笔试参考题库及答案解析
- 2026春季江西省交通投资集团有限责任公司校园招聘21人(第二批)考试参考题库及答案解析
- 2026安徽合肥市产业投资控股(集团)有限公司第二批校园招聘19人笔试备考题库及答案解析
- 2026年北京市海淀区初三一模英语试卷(含答案)
- (三诊)2026年4月德阳市高三年级适应性练习地理试卷(含答案)
- 广东省阳江市阳东区2024-2025学年七年级下学期期中地理试卷(含答案)
- 2025年消防文员笔试试题(100题及答案)
- 2026年初中英语阅读技巧
- 江西省人才发展集团有限公司2026年春季集中招聘专题【11人】建设笔试备考试题及答案解析
- 2026江苏镇江丹阳市自然资源和规划局招聘编外工作人员2人建设笔试备考试题及答案解析
- 2026年中国江西国际经济技术合作公司校园招聘笔试备考题库及答案解析
- Unit6-Howdowemeasuretime-(课件)-沪教版英语四年级下册
- 毕业设计(论文)-中药粉碎机设计
评论
0/150
提交评论