C语言课件第六章函数.ppt

上传人:tia****nde 文档编号:11495486 上传时间:2020-04-25 格式:PPT 页数:39 大小:1.74MB
返回 下载 相关 举报
C语言课件第六章函数.ppt_第1页
第1页 / 共39页
C语言课件第六章函数.ppt_第2页
第2页 / 共39页
C语言课件第六章函数.ppt_第3页
第3页 / 共39页
点击查看更多>>
资源描述
第六章函数,结构化程序设计基础,结构化程序设计概述,结构化程序设计要求一种自顶向下的设计方法,也就是将复杂的系统划分为相对独立的,功能较为单一功能的子系统的组合。,每个子系统称为模块,在C语言中表现为函数。,复杂问题,main(),a,b,c,a1,a2,b1,b2,c1,c2,各模块之间的关系称之为接口。,优点:,函数实现的功能单一完整,可以独立设计,单独调试。易于维护,通用性强。,6.1函数的定义和调用,函数的基本结构,#includevoidmain(void)inta,b,c;scanf(“%d,%d”,主函数,函数体,函数的类型,返回值的类型。,函数名(用标识符命名),引用函数的标志,并得到结果。,函数参数说明表。,定义!,引用!,函数定义是要确定函数的名称、函数的类型、函数的参数及函数的功能。,函数的定义,格式:type函数名(参数说明表)内部说明语句;功能语句;,如果函数有返回值,应含有return语句。,intmax(intx,inty)intz;z=x=y?x:y;return(z);,说明:,函数不能嵌套定义,但可以嵌套引用,包括引用自己。,intmax(intx,inty)intcx(intc,intd)/*Error!*/,函数如果无返回值,type应说明为空类型void。函数无参数应定义成void。,voidBell(void)printf(“007”);,函数的调用,调用方式:函数名(实参表),一般调用方式有三种:语句形式:max(a,b);表达式形式:c=max(a,b)*2;函数参数:c=max(a,max(b,d);,调用过程,voidmain(void)inta,b,c;scanf(“%d,%d”,先计算实参的值,从右向左向函数传递调赋值给形参。,2,3,ab,Xy,2,3,转移在函数中运行,执行到一个return语句,将返回表达式的值。由函数名带回给调用函数。,z,3,函数如果没有return语句,由最后一个返回一个不确定的值!,关于返回值的几点说明:,函数可以通过一个return语句返回一个值,也可以不返回值,此时应在定义函数时用void类型加以说明。,函数中可以出现多个return语句,遇到一个return语句,则返回值,且返回调用函数,继续执行。,intmax(intx,inty)if(x=y)returnx;returny;,返回值的类型应与函数的类型一致,如不一致,以函数类型为准,先转换为函数类型后,再返回。,intmax(void)floatz;returnz;/*z先转化为整型*/,为了确保参数和返回值类型正确,一般须在函数调用前对其类型和参数的类型加以说明,该说明称之为原型声明。,intimax(int,int);voidmain(void)intx,y,z;z=imax(x,y);,原型声明语句,加;,举例:通过函数求xn。,#includedoublepow(float,int);voidmain(void)inti;for(i=1;i=9;i+)printf(“%d,%fn”,i,pow(2.5,i);doublepow(floatx,intn)inti;doublep=1;for(i=1;i=n;i+)p=p*x;return(p);,原型声明。,定义函数,调用函数。,chp6ex1,6.2变量的存储类型及作用域,变量是内存数据的抽象,即将内存地址、数据表示抽象成一个符号。此外,变量还有存储类型,存储类型确定了变量在时间上的生存期和空间上的作用域。,变量的存储类型有以下四种:,自动类型auto,寄存器类型register,静态类型static,外部类型extern,变量的说明格式:,存储类型类型变量名表;,确定变量在内存中的表示方法。,确定变量的生存期和作用域。该项省略表示auto存储类型。,auto存储类型,定义在复合语句的开始处。块内生存块内有效。,#includevoidmain(void)autointa,b;scanf(“%d,%d”,ab的作用域,iTemp的作用域。,生存期:,执行到复合语句建立内存变量。执行出复合语句变量消亡。,iTemp,register存储类型,作用域和生存期和auto相同,差别在于,如果CPU内部的寄存器空闲,则使用寄存器作为变量的存储单元,以提高速度。主要用于循环变量。,static(静态)存储类型,作用域:在定义的复合语句内引用,出了复合语句不可见。,生存期:从定义直到程序结束,执行出时,原值并不消失,只是不能引用。,voidrow(void);voidmain(void)intb;for(b=1;b=9;b+)row();voidrow(void)inta=1;intb;for(b=1;b=9;b+)printf(“%5d”,a*b);printf(“n”);a+;,chp6ex6,static,chp6ex5,说明静态变量。,a的作用域,生存期从第一次调用到程序结束。,外部变量(extern存储类型),外部变量是定义在任何模块之外的变量。也称为全局变量。,作用域:从定义直到文件结束。,生存期:在程序的整个执行过程中。任何函数对外部变量的修改都会影响其他函数对外部变量引用时的值。,#includevoidadd(void);inta,b,c;voidmain(void)scanf(“%d,%d”,外部变量。,作用域,关于外部变量的几点说明:,外部变量可以通过说明改变其作用域。,voidmain()inti;/*i为外部变量*/voidmax(inta,intb),作用域,externi;,新的作用域,外部变量可以被不同的文件共享。,file1.cfile2.cinta;externinta;,文件1定义的外部变量。,文件2通过说明使用文件1的外部变量。,如果只希望在本文件中使用,可以加static说明。,static,关于外部变量的几点说明:,模块设计的原则:内聚性强,耦合性弱。外部变量的使用占用内存且增加模块的耦合性,因此,应尽量不使用外部变量。,当模块中出现和全局变量同名的局部变量时,局部变量在模块中优先。,inta;voidmain(void)a=5;voidfun()inta;a=5;,外部变量应用举例:用外部变量交换两个变量的值。,#includeinta,b;voidmain(void)scanf(“%d,%d”,a、b外部变量。,a,b,外部变量的副作用,#includeinti;voidprt(void);voidmain(void)for(i=0;i5;i+)prt();voidprt(void)for(i=0;i1,f(n)=,1n=0或n=1,nf(n-1)n1,#includelonglfac(long);voidmain(void)longi,x;scanf(“%ld”,lfac(4),4*lfac(3),3*lfac(2),2*flac(1),2*1,3*2*1,4*3*2*1,递推,回归,chp6ex7,6.8命令行参数,如DOS命令:COPYA:S.DOCC:,命令。,命令对象,命令参数。,C支持由主函数main(),在程序执行时,从操作系统接收传递的参数。并记录参数供程序处理。主函数一般有两个参数。,voidmain(intargc,char*argv),整型变量,记录包括命令行在内的字符串个数。,指向字符的指针数组。记录所有参数字符串的地址。,举例:回显命令行参数。,#includevoidmain(intargc,char*argv)inti;for(i=1;iargc;i+)printf(“%s%c”,argvi,(i,argc4,chp6ex8,6.9编译预处理,C语言除了说明语句、执行语句及控制语句外,还有一类编译预处理语句。该类语句的作用是在编译时对程序作一定的处理,满足特定的处理要求。编译预处理时C语言的重要特征。,编译预处理语句的语法形式:,#关键词参数表,编译预处理语句不用;作为结束标志!,宏定义预处理,不带参数的宏定义,作用:定义常量名,提高程序的可读性,便于修改。,格式:#define宏名字符串,#definePI3.1415926voidmain(void)flaotr;scanf(“%f”,编译时用字符串替代宏名。,3.1415926,说明:,宏名一般用大写;编译时用字符串无条件替代宏名;,#definePI3.1415926;PI*r*r,3.1415926;*r*r,宏名的有效范围,从定义到程序尾。也可以通过#undef修改定义范围。,#defineG9.8voidmain(void)#undefG,G的范围,可以在宏定义的字符串中使用已定义的宏名。,”字符串中的宏名不替换。,#defineR3.0#definePI3.14159#defineSPI*R*R,printf(“S=%f”,S);,不替换。,带参数的宏定义,格式:#define宏名(参数表)含参数的字符串,#defineS(a,b)a*barea=S(4,3);,替换过程:,将实际参数替换宏定义的参数。,替换字符串中的参数。,替换整个宏。,4*3,带参的宏与函数的区别:,带参宏不分配内存单元,不返回值,只是在编译时按规则替换。,关于带参宏的说明:,要严格按格式书写,否则会造成错误。,#defineS(a,b)a*bS(3,4)被替换成:(a,b)a*b(3,4),参数有可能用到表达式时,参数字符要加()。,#defineS(r)PI*r*rS(a+b)替换为:PI*a+b*a+b,#defineS(r)PI*(r)*(r)S(a+b)替换为:PI*(a+b)*(a+b),文件包含,格式:#include#include”被包含的文件名”,表示编译系统定义路径;“”表示用户指明路径。,作用:将指定的文件的内容和当前文件一起编译。,说明:,一个#include只能包含一个文件。,被包含文件可以嵌套包含文件。,一般将宏定义及函数的原型声明放在包含文件中。,被包含的文件一般扩展名为.h,称为头文件。,文件包含举例:求半径为r的园面积、园周长。,#include“my.h”voidmain(void)floatr,fArea,fLen;scanf(“%f”,#include#definePI3.1415926floatS(float);floatL(float);,条件编译,C语言可以通过条件控制,让编译系统编译不同的程序段,从而提高程序的移植性并方便调试。,条件编译有三种形式:,#ifdef标识符programseg1#elseprogramseg2#endif,#ifndef标识符programseg1#elseprogramseg2#endif,1,2,3,#if表达式programseg1#elseprogramseg2#endif,条件?,满足,编译程序段1,不满足,编译程序段2,举例:通过条件编译选择求最大值或最小值,#includevoidmain(void)inta,b;scanf(“%d,%d”,#endif,#defineMAX,#includevoidmain(void)inta,b;scanf(“%d,%d”,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!