![[理学]C语言第6章课件_第1页](http://file4.renrendoc.com/view/0575564d47ede48a3da4153b6869735a/0575564d47ede48a3da4153b6869735a1.gif)
![[理学]C语言第6章课件_第2页](http://file4.renrendoc.com/view/0575564d47ede48a3da4153b6869735a/0575564d47ede48a3da4153b6869735a2.gif)
![[理学]C语言第6章课件_第3页](http://file4.renrendoc.com/view/0575564d47ede48a3da4153b6869735a/0575564d47ede48a3da4153b6869735a3.gif)
![[理学]C语言第6章课件_第4页](http://file4.renrendoc.com/view/0575564d47ede48a3da4153b6869735a/0575564d47ede48a3da4153b6869735a4.gif)
![[理学]C语言第6章课件_第5页](http://file4.renrendoc.com/view/0575564d47ede48a3da4153b6869735a/0575564d47ede48a3da4153b6869735a5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C程序设计6.1库函数6.2函数定义和说明6.3函数调用6.4函数参数6.5函数的嵌套调用和递归调用6.6变量的存储类型6.7内部函数、外部函数6.8编译预处理命令第6章 函数与编译预处理函数的调用函数的嵌套调用函数的递归调用局部变量和全局变量变量的存储类别编译预处理命令本章重点第6章 函数与编译预处理第6章 函数与编译预处理常用方法:#includevoid main()printf(“Hello world”);例:在屏幕上打印 Hello world#includevoid main()void print_message();print_message();void print_mes
2、sage()printf(“Hello world”);第6章 函数与编译预处理1、一个较大的程序分成几个功能较为单一的子程序模块,用函数完成每个子程序的作用。2、一个C程序由一个主函数和若干个其它函数构成。3、由主函数调用其它函数,其他函数也可以相互调用。4、同一函数可以被一个或多个函数调用任意次。第6章 函数与编译预处理函数常识1、功能模块:求解较小问题的算法和程序称作“功能模块”, 各功能模块可以先单独设计,然后将求解所有子问题的模块组合成求解原问题的程序。 2、一个解决大问题的程序,可以分解成多个解决小问题的模块,这就是“自顶向下”的模块化程序设计方法。3、用一个或多个函数来实现这些功
3、能模块。第6章 函数与编译预处理函数常识4、一个原程序文件由一个或多个函数组成。一个源程序文件是一个编译单位,即以源文件为单位进行编译,而不是以函数为单位进行编译。5、程序的执行从main函数开始,在main函数中结束整个程序的运行。main函数是系统定义的。6、所有的函数都是平行的,不能嵌套定义,但可以互相调用,但不能调用main 函数。第6章 函数与编译预处理函数:完成相对独立功能的程序. 标准函数:由系统提供的库函数,不必从使用角度分定义直接引用,如fabs()等。 用户自定义函数:用以解决用户专门需要。 无参函数:如printsar();从函数形式分 有参函数:如 sin(x), sq
4、rt(x); 不传递数据 主调函数被调用函数 传递数据 6.1 库函数1、定义在不同的头文件中2、用户使用时,必须用#include“头文件”把相应的头文件包含到程序中来。例:数学库函数调用举例#include#includemain() double a, b;scanf (“%lf “,&a); b = sin (a); printf( “%6.4lf”, b);6.1 库函数 注意: include命令必须以#开头,文件名用一对双引号“ ”或一对尖括号括起来,二者的区别是:用表示编译时只按系统标准方式检索文件目录,而用“ math.h”形式,则编译系统先从目标文件所在的子目录中找math
5、.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、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语句中返回值表达式的类型一致。如果不一致,则以函数类型为准,由系统自动进行转
7、换。如果缺省函数类型,则系统一律按int类型处理。(4)带参数的形式参数表中类型和变量必须成对出现,如下面的定义是错误的: double add(double x,y)6.2 函数的定义和说明函数的返回值 在函数定义的语句部分,常常有个return返回语句,函数的返回值也就是return语句中的表达式的值。函数类型应与return语句中的表达式类型一致。 return 语句的格式: return(表达式);或 return 表达式; 或 return; 功能:1、把return后面“表达式”的值带给调用 函数; 2、把控制转向调用函数;#includemain( )c=max(a,b);pri
8、ntf(“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)在同一函数内,可
9、用根据需要在多处出现return语句,但函数第一次遇到return时就立即停止执行,并返回到主调函数 注意:练习:1、定义一个打印三行星的函数。2、定义一个函数求两个数的和。3、定义一个函数判断一个数的奇偶性。4、输入一个年份,用函数判断是否是闰年。6.2 函数的定义和说明函数说明和函数原型6.2 函数的定义和说明在一个函数中调用另一个函数,即被调用函数。需具备以下条件:(1)被调用的函数必须是已存在的函数。(2)如果使用库函数,应用#include命令将相关的库函数”包含”到本文件中来。(3)如果使用用户自定义函数,而该函数在调用它的函数(即主调函数)后面,应在主调函数中对被调函数作声明。#
10、includemain()float add(float x,float y);float a,b,c;scanf(“%f %f”,&a,&b);c=add(a,b);printf(“sum is %fn”,c);float add(float x,float y)float z;z=x+y;return(z);函数的声明函数的调用函数的定义函数的声明:把函数的名字、函数类型以及形参的类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查。float add(float x,float y)float z;z=x+y;return(z);函数的定义和声明区别float add(f
11、loat x,float y);函数的定义:对函数功能的确定。包括指定函数名、函数值类型、形参及其类型、函数体等,它是一个完整的,独立的函数单位。说明1.如果被调用函数的定义出现在主调函数之前,可以不必加以声明。2.如果已在文件的开头,已对本文件中所调用的函数进行了声明,则在各函数中不必对其所调用的函数再作声明。3.声明的时候可以省略形参的变量名。6.2 函数的定义和说明 用函数原型声明函数练习:把下面的题补充完整,在主函数中调用。1、定义一个打印三行星的函数。2、定义一个函数求两个数的和。3、定义一个函数判断一个数的奇偶性。6.2 函数的定义和说明6.3 函数的调用一、函数调用的一般形式:函
12、数名(实参表列);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=ma
13、x(a,max(b,c);6.4 函数的参数一、形式参数和实际参数:在定义函数时,函数名后面括号中的变量名为“形式参数”(简称“形参”)在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”(简称“实参”)#includemain()int max(int x,int y);/*对max函数的声明*/int a,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);/*a,b作为实参*/printf(“Max is %d”,c);int max(int x,int y)/*定义有参函数max*/*x,y作为形参*/int z;z=xy?x:y;return(z);程
14、序结果:7,8 Max is 8 关于形参与实参的说明:1、在定义函数中指定的形参,在未出现函数调用时,不占内存。调用结束后,所占的内存被释放。#includemain( )int max(int x,int y);int a,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf(“Max is %d”,c);int max(int x,int y) xyint 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,
15、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;2a3b2x3y326.5函数的嵌套调用 C语言中的嵌套调用函数main函数a函数b函数调用a函数调用b函数结束6.5函数的嵌套调
16、用#includemain()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函数的递归调用 定义:在调用一个函数的过程中,又出现直接或间
17、接地调用该函数本身,称为函数的递归调用直接调用间接调用6.5函数的递归调用用递归法求n! 问题分析:假设n=55!=5X4!4!=4X3!3!=3X2!2!=2X1!可用下面的公式来表示: 1 (n=0,1)n!= n*(n-1)! (n1)6.5函数的递归调用形参x接收实参n的值是否x=0|x=1?fac(x-1)递归调用自身输出结果n和smain函数fac函数f=1f=fac(x-1)*xreturn(f)求n!,调用fac函数开始输入ns=fac(n)结束6.5函数的递归调用float fac(int n); /* 函数声明 */#include main() int n; float
18、y; printf(请输入一个整数:); scanf(%d,&n); y=fac(n); printf(%d!=%10.0f,n,y); 源程序如下:float fac(int n) /* 定义计算n!的函数 */ float f; if (n=0|n=1) f=1; else f=fac(n-1)*n; return(f); 运行结果:请输入一个整数: 1010!= 36288006.5函数的递归调用例: 有5个人,第5个人说他比第4个人大2岁,第4个人说他比第3个人大2岁,第3个人说他比第2个人大2岁,第2个人说他比第1个人大2岁,第1个人说他10岁。求第5个人多少岁?分析: 10 (n=
19、1)age(n)= age(n-1)+2 (n1)6.5函数的递归调用程序如下:结果:18#includemain()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语言中分为在全局有效、局部有效和复合语句内有效三种。 语言中所有的变量都有自己的作用域。变量说明的位置不同,其作用域
20、也不同,据此可将语言中的变量分为局部变量(内部变量)和全局变量(外部变量)。6.6变量的存储类型局部变量定义:在一个函数内部定义的变量是内部变量作用范围:只在本函数内有效,在此函数以外不能使用这些变量。6.6变量的存储类型char f2(int x,int y) /* 函数f2 */ int i,j; float f1(int a) /* 函数f1 */ int b,c; a、b、c有效x、y、i、j有效m、n有效void main() /* 主函数 */ int m,n; 6.6变量的存储类型 局部变量主函数中定义的变量只在主函数中有效。主函数不能使用其他函数中定义的变量。不同函数中可使用相
21、同名字的变量。形式参数也是局部变量。在一个函数内部,可在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称“分程序”或“程序块”。说明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变量的存储类型
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度保密技术合作保密费及保密期限协议
- 二零二五年度养老服务业劳动合同违约赔偿及服务质量标准合同
- 2025年度购房合同签订及后续房产增值服务协议
- 2025年法拍房屋拍卖议价及成交保障合同
- 二零二五年度大型光伏发电站项目设备安装合同
- 二零二五年度青少年辅导班退费条款及辅导效果承诺协议
- 二零二五年度智慧医疗合同-严格责任原则下的远程医疗服务协议
- 2025年度离婚抚养协议书:子女抚养、教育支持与财产分割协议
- 2025年度特色饮品餐饮特许经营协议
- 2025年景德镇货运从业资格证在哪里练题
- GB/T 30797-2014食品用洗涤剂试验方法总砷的测定
- GB/T 20057-2012滚动轴承圆柱滚子轴承平挡圈和套圈无挡边端倒角尺寸
- GB/T 19808-2005塑料管材和管件公称外径大于或等于90mm的聚乙烯电熔组件的拉伸剥离试验
- GB/T 10051.1-2010起重吊钩第1部分:力学性能、起重量、应力及材料
- 2022年人民交通出版社股份有限公司招聘笔试试题及答案解析
- 班组建设工作体系课件
- 第章交通调查与数据分析课件
- 穆斯林太巴热咳庆念词文
- 软硬结合板的设计制作与品质要求课件
- 中医院情志养生共64张课件
- 慢性心功能不全护理查房
评论
0/150
提交评论