《C语言程序设计》PPT电子教案课件-第7章_函数.ppt_第1页
《C语言程序设计》PPT电子教案课件-第7章_函数.ppt_第2页
《C语言程序设计》PPT电子教案课件-第7章_函数.ppt_第3页
《C语言程序设计》PPT电子教案课件-第7章_函数.ppt_第4页
《C语言程序设计》PPT电子教案课件-第7章_函数.ppt_第5页
免费预览已结束,剩余33页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

c语言程序设计,第七章 函数,最常用的几个库函数,7.1 c的库函数简介,第7章 函数,最常用的几个库函数,7.1 c的库函数简介,第7章 函数,使用库函数应注意: 1、函数功能 2、函数参数的数目和顺序,及各参数意义和类型 3、函数返回值意义和类型 4、需要使用的包含文件,7.1 c的库函数简介,第7章 函数,7.2.1 函数定义的一般形式,函数返回值类型缺省int型,合法标识符,函数体,函数的参数,例 有参函数(现代风格) int max(int x,int y) int z; z=xy?x:y; return(z); ,例 无参函数 printstar( ) printf(“*n”); 或 printstar(void ) printf(“*n”); ,例 空函数 dummy( ) ,第7章 函数,形式参数:在定义函数时函数名后面圆括号中的变量名 实际参数 :在主调用函数中调用一个函数时,函数名后面圆括号中的表达式 例 比较两个数并输出大者,7.3.1形式参数和实际参数,main() int a,b,c; scanf(“%d,%d“, ,第7章 函数,返回语句: 形式: return(表达式); 或 return 表达式; 或 return; 功能:使程序控制从被调用函数返回到调用函数中,同时把返值带给调用函数 说明: 若无return语句,遇时,自动返回调用函数 若函数类型与return语句中表达式值的类型不一致,按前者为准,自动转换-函数调用转换,7.3.2函数的返回值,第7章 函数,7.3.1形式参数和实际参数,形式参数:在定义函数时函数名后面圆括号中的变量名 实际参数 :在主调用函数中调用一个函数时,函数名后面圆括号中的表达式 说明: 实参必须有确定的值,以传值给形参 形参必须指定类型 形参与实参类型一致,个数相同 若形参与实参类型不一致,自动按形参类型转换函数调用转换 形参在函数被调用前不占内存;函数调用时为形参分配内存;调用结束,内存释放,第7章 函数,调用形式: 函数名(实参表); 说明: 实参与形参个数相等,类型一致,按顺序一一对应 无参函数调用时,圆括号不可省略 函数定义与函数调用的区别: 函数的定义中有“类型标识符”而函数的调用中没有。 函数的定义中的参数为“形参”,而函数的调用中参数为“实参”。 函数的定义后没有“;”,而函数的调用中有“;”(函数作为实参外)。,7.2.2函数调用的一般形式,第7章 函数,函数调用方式 函数语句: 例 printf(“i love china!n“); 函数表达式: 例 c=max(a,b); 函数参数: 例 printf(“%dn“,max(a,b); putchar(getchar(); 实参表求值顺序,因系统而定(turbo c 自右向左),7.2.2函数调用的一般形式,第7章 函数,main() int i=2,p; p=f(i,+i); printf(“%d“,p); int f(int a, int b) int c; if(ab) c=1; else if(a=b) c=0; else c=-1; return(c); ,main() int i=2,p; p=f(i, i+); printf(“%d“,p); int f(int a, int b) int c; if(ab) c=1; else if(a=b) c=0; else c=-1; return(c); ,运行结果:0,运行结果:1,7.2.2函数调用的一般形式,第7章 函数,调用函数时,对被调函数的要求: 必须是已存在的函数 库函数: #include 用户自定义函数: 函数类型声明 函数声明: 一般形式: 函数类型 函数名(形参类型 形参名, ); 作用: 告诉编译系统函数类型、参数个数及类型,以便检验 函数定义与函数声明不同 函数声明位置:程序的数据说明部分(函数内或外) 下列情况下,可不作函数声明 1、若函数返值是char或int型,系统自动按int型处理 2、被调用函数定义出现在主调函数之前 3、在所有函数的定义之前,在文件的开头已经作了函数声明,7.2.3对被调用函数的声明,第7章 函数,7.2.3对被调用函数的声明,main() float add(float,float); /*函数原型声明 */ float a,b,c; scanf(“%f,%f“, ,第7章 函数,例 交换两个数,7.3.1形式参数和实际参数,main() int x=7,y=11; printf(“x=%d,ty=%dn“,x,y); printf(“swapped:n“); swap(x,y); printf(“x=%d,ty=%dn“,x,y); swap(int a,int b) int temp; temp=a; a=b; b=temp; ,第7章 函数,例 函数返回值类型转换,7.3.2 函数的返回值,main() int max(float,float) float a,b; int c; scanf(“%f,%f“, ,max(float x, float y) float z; z=xy?x:y; return(z); ,第7章 函数,7.2.1 函数定义的一般形式,合法标识符,函数体,函数的参数,第7章 函数,形式参数:在定义函数时函数名后面圆括号中的变量名 实际参数 :在主调用函数中调用一个函数时,函数名后面圆括号中的表达式 例 比较两个数并输出大者,7.3.1形式参数和实际参数,main() int a,b,c; scanf(“%d,%d“, ,第7章 函数,模块化程序设计 基本思想:将一个大的程序按功能分割成一些小模块 开发方法: 自上向下,逐步分解,分而治之,概述,第7章 函数,概述,c程序结构,第7章 函数,函数是程序的基本组成单位 必须有且只能有一个名为main的主函数 c程序的执行总是从main函数开始,在main中结束 函数与函数之间是平行的独立的,不能嵌套定义,可以嵌套调用,概述,第7章 函数,c规定:函数定义不可嵌套,但可以嵌套调用函数,7.4.1函数的嵌套调用,第7章 函数,例 求三个数中最大数和最小数的差值,7.4.1函数的嵌套调用,int dif(int x,int y,int z); int max(int x,int y,int z); int min(int x,int y,int z); main() int a,b,c,d; scanf(“%d%d%d“, ,int max(int x,int y,int z) int r; r=xy?x:y; return(rz?r:z); int min(int x,int y,int z) int r; r=xy?x:y; return(rz?r:z); ,第7章 函数,例 求三个数中最大数和最小数的差值,7.4.1函数的嵌套调用,main() d=dif(a,b,c); int dif(int x,int y,int z) return max(x,y,z)-min(x,y,z); int max(int x,int y,int z) int min(int x,int y,int z) ,第7章 函数,定义:函数直接或间接的调用自身叫函数的递归调用,7.4.2函数的递归调用,int f(int x) int y,z; z=f(y); . return(2*z); ,第7章 函数,说明: c编译系统对递归函数的自调用次数没有限制 必须有一个明确的结束递归的条件。,7.4.2函数的递归调用,第7章 函数,例 求n的阶乘,7.4.2函数的递归调用,int fac(int n) int f; if(n0) printf(“n0,data error!“); else if(n=0|n=1) f=1; else f=fac(n-1)*n; return(f); main() int n, y; printf(“input a integer number:“); scanf(“%d“, ,第7章 函数,作用域 : 若某个标识符仅能在源程序正文的某个范围内被使用,则称源程序正文的这个范围为该标识符的作用域。 分程序作用域: 指该复合语句的左括弧“”和右括弧“”之间的源程序正文。 文件作用域: 指一个编译单位内的所有程序正文。 根据作用域的不同,将变量分类: 局部变量、全局变量,7.5.1 作用域,第7章 函数,局部变量-内部变量 在函数内定义,只在本函数内有效 说明: 动态分配内存单元 main中定义的变量只在main中有效 不同函数中同名变量,占不同内存单元 形参属于局部变量 可定义在复合语句中有效的变量 有包含关系的两个作用域中的同名变量,外层同名变量被屏蔽。,7.5.2局部变量,第7章 函数,有包含关系的两个作用域中的同名变量,7.5.2局部变量,main() int a,b,c; int c; c=a+b; ,第7章 函数,全局变量-外部变量 说明: 有效范围:从定义变量的位置开始到本源文件结束,及有extern说明的其它源文件 静态分配全局变量的内存单元 减少函数调用时实参与形参之间的数据传递 若外部变量与局部变量同名,则外部变量被屏蔽 不足: 全局变量在程序全部执行过程中占用存储单元 降低程序的可读性,降低函数的通用性,7.5.3 全局变量,第7章 函数,不同作用域中的同名变量,7.5.3 全局变量,int k=5; main() int k=7; printf(“k=%dn“,k); int k=11; printf(“k=%dn“,k); k+=1; printf(“k=%dn“,k); printf(“k=%dn“,k); printf(“k=%dn“,k); ,/*全局变量k*/,/*同名局部变量k*/,/*同名局部变量k*/,运行结果: k=7 k=11 k=12 k=12 k=7,第7章 函数,例 外部变量与局部变量,7.5.3 全局变量,int a=3,b=5; max(int a, int b) int c; c=ab?a:b; return(c); main() int a=8; printf(“max=%d“,max(a,b); ,运行结果:max=8,第7章 函数,静态存储方式 : 程序运行期间,始终占有固定的存储空间。 动态存储方式 : 程序运行期间,根据需要动态的分配存储空间。 变量的存储类型: auto -自动型 register-寄存器型 static -静态型 extern -外部型 变量的定义格式:存储类型 数据类型 变量表;,7.6.1 动态存储方式与静态存储方式,第7章 函数,内存用户区:,7.6.1 动态存储方式与静态存储方式,生存期 静态变量:从程序开始执行到程序结束 动态变量:从包含该变量定义的函数开始执行至函数执行结束,第7章 函数,局部变量默认为auto型 静态局部变量具有全局寿命和可继承性 寄存器变量个数受限,且不能为long, double, float型 extern不是变量定义,可扩展外部变量作用域,7.6.1 动态存储方式与静态存储方式,第7章 函数,例 auto 变量的作用域,7.6.2局部变量的存储方式,main() void prt(void); int x=1; prt(); printf(“1st x=%dn”,x); void prt(void) int x=5; printf(“2nd x=%dn”,x); ,运行结果: 2nd x=5 1st x=1,第7章 函数,考察静态局部变量的值,7.6.2局部变量的存储方式,int fun(int a) auto int b=0; static int c=3; b+; c+; return a+b+c; main() int a=2,i; for(i=1;i=3;i+) printf(“ %d“,fu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论