![[理学]C语言第6章.ppt_第1页](http://file.renrendoc.com/FileRoot1/2018-12/23/88f8b141-8c10-459c-84e9-289ba977fef9/88f8b141-8c10-459c-84e9-289ba977fef91.gif)
![[理学]C语言第6章.ppt_第2页](http://file.renrendoc.com/FileRoot1/2018-12/23/88f8b141-8c10-459c-84e9-289ba977fef9/88f8b141-8c10-459c-84e9-289ba977fef92.gif)
![[理学]C语言第6章.ppt_第3页](http://file.renrendoc.com/FileRoot1/2018-12/23/88f8b141-8c10-459c-84e9-289ba977fef9/88f8b141-8c10-459c-84e9-289ba977fef93.gif)
![[理学]C语言第6章.ppt_第4页](http://file.renrendoc.com/FileRoot1/2018-12/23/88f8b141-8c10-459c-84e9-289ba977fef9/88f8b141-8c10-459c-84e9-289ba977fef94.gif)
![[理学]C语言第6章.ppt_第5页](http://file.renrendoc.com/FileRoot1/2018-12/23/88f8b141-8c10-459c-84e9-289ba977fef9/88f8b141-8c10-459c-84e9-289ba977fef95.gif)
已阅读5页,还剩52页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,C程序设计,6.1库函数 6.2函数定义和说明 6.3函数调用 6.4函数参数 6.5函数的嵌套调用和递归调用 6.6变量的存储类型 6.7内部函数、外部函数 6.8编译预处理命令,第6章 函数与编译预处理,函数的调用 函数的嵌套调用 函数的递归调用 局部变量和全局变量 变量的存储类别 编译预处理命令,本章重点,第6章 函数与编译预处理,第6章 函数与编译预处理,常用方法: #include void main() printf(“Hello world”); ,例:在屏幕上打印 Hello world,#include void main() void print_message(); print_message(); void print_message() printf(“Hello world”); ,第6章 函数与编译预处理,1、一个较大的程序分成几个功能较为单一的子程序模块,用函数完成每个子程序的作用。 2、一个C程序由一个主函数和若干个其它函数构成。 3、由主函数调用其它函数,其他函数也可以相互调用。 4、同一函数可以被一个或多个函数调用任意次。,第6章 函数与编译预处理,函数常识,1、功能模块:求解较小问题的算法和程序称作“功能模块”, 各功能模块可以先单独设计,然后将求解所有子问题的模块组合成求解原问题的程序。 2、一个解决大问题的程序,可以分解成多个解决小问题的模块,这就是“自顶向下”的模块化程序设计方法。 3、用一个或多个函数来实现这些功能模块。,第6章 函数与编译预处理,函数常识,4、一个原程序文件由一个或多个函数组成。一个源程序文件是一个编译单位,即以源文件为单位进行编译,而不是以函数为单位进行编译。 5、程序的执行从main函数开始,在main函数中结束整个程序的运行。main函数是系统定义的。 6、所有的函数都是平行的,不能嵌套定义,但可以互相调用,但不能调用main 函数。,第6章 函数与编译预处理,函数:完成相对独立功能的程序. 标准函数:由系统提供的库函数,不必 从使用角度分 定义直接引用,如fabs()等。 用户自定义函数:用以解决用户专门需要。 无参函数:如printsar(); 从函数形式分 有参函数:如 sin(x), sqrt(x); 不传递数据 主调函数 被调用函数 传递数据,6.1 库函数,1、定义在不同的头文件中 2、用户使用时,必须用#include“头文件”把相应的头文件包含到程序中来。,例:数学库函数调用举例,#include #include main() double a, b;scanf (“%lf “,6.1 库函数,注意: include命令必须以#开头,文件名用一对双引号“ ”或一对尖括号括起来,二者的区别是:用表示编译时只按系统标准方式检索文件目录,而用“ math.h”形式,则编译系统先从目标文件所在的子目录中找math.h文件,若找不到再按尖括号包围时的办法重新搜索一次。include是命令,不是语句,结尾没有分号。,6.2 函数的定义和说明,无参函数定义的一般形式:,类型标识符 函数名() 声明部分 语句部分 ,void print_message( ) printf(“Hello world”); ,#include void printstar() printf(“*n”); ,例:输出图案,* Very Good! *,main() void printstar(); ,函数定义和功能实现,函数名();,printstar();,printf(“ Very Good!”);,printstar();,有参函数定义的一般形式:,6.2 函数的定义和说明,类型标识符 函数名(形式参数表列) 声明部分 语句部分 ,int max(int x,int y) int z; if(xy) z=x; else z=y; return (z); ,6.2 函数的定义和说明,空函数,类型说明符 函数名() ,例:void dummy() ,6.2 函数的定义和说明,注意:,(1)函数名和形式参数都是用户命名的标识符。在同一程序中,函数名必须唯一;形式参数只要在同一函数中唯一即可,可以与其它函数中的变量同名。 (2)语言规定,不能在一个函数的内部再定义函数。 (3)对函数类型的说明,必须与return语句中返回值表达式的类型一致。如果不一致,则以函数类型为准,由系统自动进行转换。如果缺省函数类型,则系统一律按int类型处理。 (4)带参数的形式参数表中类型和变量必须成对出现,如下面的定义是错误的: double add(double x,y),6.2 函数的定义和说明,函数的返回值,在函数定义的语句部分,常常有个return返回语句,函数的返回值也就是return语句中的表达式的值。函数类型应与return语句中的表达式类型一致。 return 语句的格式: return(表达式);或 return 表达式; 或 return; 功能:1、把return后面“表达式”的值带给调用 函数; 2、把控制转向调用函数;,#include main( ) c=max(a,b); printf(“Max is %d”,c); ,int max(int x,int y) int z; z=xy?x:y; return(z); ,没有返回值的函数就没有return语句,6.2 函数的定义和说明,6.2 函数的定义和说明,(1) 声明为void型的函数中不能包括带值的return 语句;主函数体内不能出现return语句。 (2)当函数没有return语句时,以结束函数的大括号 作为返回点。但这时并不表明函数没有返回值,这时的返回值是系统给的不确定值。 (3)除了空值函数以外的所有函数都返回一个值,那么我们是不是非得去使用这个返回值呢?答案是否定的。如果没有用它赋值,那它就被丢弃了。 (4)在同一函数内,可用根据需要在多处出现return语句,但函数第一次遇到return时就立即停止执行,并返回到主调函数,注意:,练习: 1、定义一个打印三行星的函数。 2、定义一个函数求两个数的和。 3、定义一个函数判断一个数的奇偶性。 4、输入一个年份,用函数判断是否是闰年。,6.2 函数的定义和说明,函数说明和函数原型,6.2 函数的定义和说明,在一个函数中调用另一个函数,即被调用函数。 需具备以下条件: (1)被调用的函数必须是已存在的函数。 (2)如果使用库函数,应用#include命令将相关的库函数”包含”到本文件中来。 (3)如果使用用户自定义函数,而该函数在调用它的函数(即主调函数)后面,应在主调函数中对被调函数作声明。,#include main() float add(float x,float y); float a,b,c; scanf(“%f %f”, ,函数的声明: 把函数的名字、函数类型以及形参的类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查。,float add(float x,float y) float z; z=x+y; return(z); ,函数的定义和声明区别,float add(float x,float y);,函数的定义: 对函数功能的确定。包括指定函数名、函数值类型、形参及其类型、函数体等,它是一个完整的,独立的函数单位。,说明,1.如果被调用函数的定义出现在主调函数之前, 可以不必加以声明。 2.如果已在文件的开头,已对本文件中所调用的 函数进行了声明,则在各函数中不必对其所调 用的函数再作声明。 3.声明的时候可以省略形参的变量名。,6.2 函数的定义和说明,用函数原型声明函数,练习:把下面的题补充完整,在主函数中调用。 1、定义一个打印三行星的函数。 2、定义一个函数求两个数的和。 3、定义一个函数判断一个数的奇偶性。,6.2 函数的定义和说明,6.3 函数的调用,一、函数调用的一般形式:,函数名(实参表列);,void printstar( ) printf(“*n”); ,如果调用无参函数,则“实参表列”可省略,但括号不能省略,如printstar( ),printstar( );,6.3 函数的调用,6.3 函数的调用,如果实参表列包含多个实参,则各参数间用逗号间隔,如max(2,3),c=max(a,b);,int max(int x,int y) int z; z=xy?x:y; return(z); ,6.3 函数的调用,1.函数语句 把函数调用作为一个语句,如printstar(); 2.函数表达式 函数出现在表达式中,如:c=2*max(a,b); 3.函数参数 函数调用作为一个函数的实参,如: m=max(a,max(b,c);,6.4 函数的参数,一、形式参数和实际参数:,在定义函数时,函数名后面括号中的变量名为“形式参数”(简称“形参”) 在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”(简称“实参”),#include main() int max(int x,int y); /*对max函数的声明*/ int a,b,c; scanf(“%d%d”, ,程序结果:7,8 Max is 8,关于形参与实参的说明: 1、在定义函数中指定的形参,在未出现函数调用时,不占内存。调用结束后,所占的内存被释放。,#include main( ) int max(int x,int y); int a,b,c; scanf(“%d%d”, ,int max(int x,int y) ,x,y,int z; z=xy?x:y; return(z);,2、实参可以是常量,变量或表达式。,c=max(a,b);,int max(int x,int y) int z; z=xy?x:y; return(z); ,c=max(3,4);,c=max(a+3,b*4);,6.4 函数的参数,3、被定义的函数必须指定形参的类型。,int max(int x,int y) int z; z=xy?x:y; return(z); ,4、实参与形参的类型应相同或赋值兼容。,c=max( a , b );,6.4 函数的参数,6.4 函数的参数,5、实参向形参的数据传递是“值传递”,单向传递,只由实参传给形参。,c=change(a,b);,void change(int x,int y) int t; t=x ; x=y ; y=z; ,3,2,6.5函数的嵌套调用,C语言中的嵌套调用函数,main函数,a函数,b函数,调用a函数,调用b函数,结束,6.5函数的嵌套调用,#include main() int f(int ,int); int x=36,y=16,z; z=f(x,y); printf(“%d“,z); ,int f(int a,int b) int ff(int); int m,n,k; m=ff(a); n=ff(b); if(m%2=0) k=m; else k=n; return k; ,int ff(int d) return(d*3); ,6.5函数的嵌套调用,函数的嵌套注意事项:,C语言不能嵌套定义函数,但可以嵌套调用函数 被调用函数的定义位置在调用它的函数之前,不必对该函数进行声明。 程序从main函数开始执行,6.5函数的递归调用,定义:在调用一个函数的过程中,又出现直接或间接地调用该函数本身,称为函数的递归调用,直接调用,间接调用,6.5函数的递归调用,用递归法求n!,问题分析:,假设n=5,5!=5X4!,4!=4X3!,3!=3X2!,2!=2X1!,可用下面的公式来表示:,6.5函数的递归调用,形参x接收实参n的值,是,否,x=0|x=1?,fac(x-1)递归调用自身,输出结果n和s,main函数,fac函数,f=1,f=fac(x-1)*x,return(f),求n!, 调用fac函数,开始,输入n,s=fac(n),结束,6.5函数的递归调用,float fac(int n); /* 函数声明 */,#include main() int n; float y; printf(“请输入一个整数:“); scanf(“%d“, ,源程序如下:,float fac(int n) /* 定义计算n!的函数 */ float f; if (n=0|n=1) f=1; else f=fac(n-1)*n; return(f);,运行结果: 请输入一个整数: 10 10!= 3628800,6.5函数的递归调用,例: 有5个人,第5个人说他比第4个人大2岁,第4个人说他比第3个人大2岁,第3个人说他比第2个人大2岁,第2个人说他比第1个人大2岁,第1个人说他10岁。求第5个人多少岁?,分析: 10 (n=1) age(n)= age(n-1)+2 (n1),6.5函数的递归调用,程序如下:,结果:18,#include main() int age(int); printf(“%d“,age(5); ,int age(int n) int c; if(n=1)c=10; else c=age(n-1)+2; return c;,6.6变量的存储类型,从变量的作用域 (即从空间),从变量值存在的时间 (即生存期),6.6变量的存储类型,变量的作用域 变量的作用域是指变量的作用范围,在C语言中分为在全局有效、局部有效和复合语句内有效三种。 语言中所有的变量都有自己的作用域。变量说明的位置不同,其作用域也不同,据此可将语言中的变量分为局部变量(内部变量)和全局变量(外部变量)。,6.6变量的存储类型,局部变量,定义: 在一个函数内部定义的变量是内部变量 作用范围: 只在本函数内有效,在此函数以外不能使用这些变量。,6.6变量的存储类型,char f2(int x,int y) /* 函数f2 */ int i,j; ,float f1(int a) /* 函数f1 */ int b,c; ,void main() /* 主函数 */ int m,n; ,6.6变量的存储类型,局部变量 主函数中定义的变量只在主函数中有效。主函数不能使用其他函数中定义的变量。 不同函数中可使用相同名字的变量。 形式参数也是局部变量。 在一个函数内部,可在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称“分程序”或“程序块”。,说明,6.6变量的存储类型,全局变量,定义: 在函数之外定义的变量称为“外部变量”。(或称“全局变量”或“全程变量”)。 有效范围: 从定义变量的位置开始到本源文件结束。,6.6变量的存储类型,int p=1,q=5; /* 全局变量 */ float f1(int a) int b,c; char c1,c2; /* 全局变量 */ char f2(int x,int y) int i,j; void main() int m,n; ,全局变量c1、c2的作用范围,全局变量p、q的作用范围,例:#include int a=3,b=5; /* a、b为全局变量 */ void main() int max(int a,int b); /*函数声明,a、b为形参名*/ int a=8; /* a为局部变量 */ printf(“%dn“,max(a,b); int max(int a,int b) /*a、b为形参局部变量*/ int c; c=ab?a:b; return(c); ,6.6变量的存储类型,6.6变量的存储类型,auto变量,自动变量用关键字auto作存储类别的声明。,例如: int f(int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 茂名职业技术学院《互联网+医疗》2023-2024学年第一学期期末试卷
- 手术室与病房交接流程
- 教育培训机构宣传规范与风险防范
- 2025地暖系统安装合同范本
- 2025年上海市果木种植购买合同范本
- 2025煤炭供应合同
- 2025物业管理有限公司合同协议书
- 2025经济师道路运输行业合同管理与纠纷预防备考资料
- 2025标准实习生劳动合同模板
- 2025翡翠首饰买卖合同
- 临床医学(专科)毕业综合考复习题
- 石家庄市存量房买卖合同
- 思想道德与法治2023版教学设计第六章 学习法治思想 提升法治素养
- 高一离子方程式书写专题训练及答案
- 张元鹏《微观经济学》(中级教程)笔记和课后习题详解
- 如何有效管理90-00后新员工技巧方法-123课件
- 第十三讲 全面贯彻落实总体国家安全观PPT习概论2023优化版教学课件
- 人教版语文能力层级-·-教材-·-中考
- 2022年湖北省高中学业水平考试真题-音乐学科
- 浙江省公安民警心理测验考试题目
- OEE记录表格(设备综合效率)
评论
0/150
提交评论