C语言程序设计第4章函数与编译预处理

上传人:tia****g98 文档编号:246242152 上传时间:2024-10-13 格式:PPT 页数:43 大小:352.50KB
返回 下载 相关 举报
C语言程序设计第4章函数与编译预处理_第1页
第1页 / 共43页
C语言程序设计第4章函数与编译预处理_第2页
第2页 / 共43页
C语言程序设计第4章函数与编译预处理_第3页
第3页 / 共43页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,*,页,琼 州 学 院,第,4,章 函数与编译预处理,C,语言程序设计,1,第,4,章 函数与编译预处理,4.1,函数概述,4.2,函数定义与调用,4.3,局部变量和全局变量,4.4,变量的生存期和存储类别,4.5,编译预处理,2005年1月,2,4.1,函数概述,C,程序,源程序文件,n,函数,1,函数,m,源程序文件,1,函数,1,函数,n,4.1.1,函数简介,2005年1月,3,【,例,】,#include,void print_line()/*,函数定义*,/,printf(*n);,void print_text()/*,函数定义*,/,printf(Welcome to Beijing n);,void main(),print_line();/*,函数调用,*/,print_text();/*,函数调用,*/,print_line();/*,函数调用,*/,程序的执行总是,从,main,函数开始,2005年1月,4,void main,函数,调用函数,print_line();,函数,print_line(),2005年1月,5,一个,C,源程序可以由一个或多个源程序文件组成。,C,编译系统在对,C,源程序进行编译时是以文件为单位进行的。,一个,C,源程序文件可以由一个或多个函数组成。所有函数都是独立的。主函数可以调用其它函数,其它函数可以相互调用。,在一个,C,程序中,有且仅有一个主函数,main,。,C,程序的执行总是从,main,函数开始,调用其它函数后最终回到,main,函数,在,main,函数中结束整个程序的运行。,说明,2005年1月,6,函数的种类,从使用的角度看:,标准函数(库函数),库函数是由系统提供的。如:,getchar(),、,sin(x),等。在程序中可以直接调用它们。附录,B,列出了,C,的部分库函数。,用户自定义函数。如,:,例中的,print_line(),函数。,2005年1月,7,由,C,编译系统定义的一种函数,存放在系统函数库中,用户可以根据需要随时调用,常用函数,如:,fabs、sqrt、sin,、,pow,、,rand,(常用数学函数参见教材,P100,表,4-1,和附录,B,),函数调用形式:,函数名(参数表),例如:,sqrt(x),4.1.2,数学库函数,2024/10/13,8,例,#include,#include,void main(),float x=4.5;,printf(%f,%f,%fn,sqrt(x),pow(x,2),fabs(-x);,输出结果:,2.121320,20.250000,4.500000,2024/10/13,9,4.2.1,函数的定义,函数定义的一般形式,函数类型 函数名,(,类型名 形式参数,1,,,),说明语句,执行语句,例如:求两个数的最大值。,int,max,(,int x,int y,),int z;,z=x y?x:y;,return(z);,4.2,函数定义及调用,2005年1月,10,#include,int,cube,(int y);,/*,函数原型声明*,/,void,main,(),int x,last,nowcb;,last=1;,printf(15,之间,相邻两数的立方差是:,n);,for(x=2;x,max)max=,iabs(a);,/*,函数调用构成表达式*,/,m=max(c,max(a,b),),;,/*,函数调用作为函数参数*,/,4.2.2,函数的调用,函数调用的一般形式:,2005年1月,12,void swap(,int x,int y,),int z;,z=x;x=y;y=z;,printf(nx=%d,y=%d,x,y);,main(),int a=10,b=20;,swap(,a,b,);,printf(na=%d,b=%dn,a,b);,4.2.3,函数参数传递与返回值,1,函数的参数传递(值传递),程序输出结果:,x=20,y=10,a=10,b=20,形式参数(形参),实际参数(实参),【,例,】,编一程序,将主函数中的两个变量的值传递给,swap,函数中的两个形参,交换两个形参的值。,单向值传递,2005年1月,13,有关形参和实参的说明:,当函数被调用时才给形参分配内存单元。调用结束,所占内存被释放。,实参可以是常量、变量或表达式,但要求它们有确定的值。,实参与形参类型要一致,字符型与整型兼容。,实参与形参的个数必须相等。在函数调用时,实参的值赋给与之相对应的形参。,“单向值传递”,。,2024/10/13,14,函数的返回值是通过,return,语句带回到主调函数的,功能:,终止函数的运行,返回主调函数,若有返回值,将返回值带回主调函数。,说明:,若函数没有返回值,,return,语句可以省略。,return,语句中的表达式类型一般应和函数的类型一致,,如果不一致,系统自动将表达式类型转换为函数类型。,2.,函数的返回值,return,语句格式:,return;,或,return,表达式,;,2005年1月,15,【,例,】,计算并输出圆的面积。,#include,s(int r),return 3.14*r*r;,void main(),int r;,scanf(%d,printf(%dn,s(r);,自动转换为,int,型,程序运行情况如下:,2,12,说明:,函数的类型决定了函数返回值的类型。若省略函数的类型,系统默认其为,int,型。,无返回值的函数应将其类型定义为,void,(空)类型。,2005年1月,16,【,例,4-8】,编写函数实现两组变量的显示,定义,2,组,共,8,个整型变量,a1a4,,,b1b4,,要求:输入字符,a,和整数,1,,显示,a1,变量的值,输入字符,b,和整数,1,,显示,b1,变量的值,2024/10/13,17,#include,int ArrayOperating(int i,char ch),int a1=1,a2=0,a3=3,a4=5;,int b1=2,b2=0,b3=4,b4=3;,switch(i),case 1:,switch(ch),case a:return a1;,case b:return b1;,case 2:,case 3:,case 4:,void main(),int i;char ch;,printf(,输入显示的变量,形式如:,a1,或,b4,:,);,scanf(%c%d,printf(%c%d=%dn,ch,i,ArrayOperating(i,ch);,2024/10/13,18,4.2.4,函数的嵌套调用,main,函数,调用函数,A,;,函数,A,调用函数,B,;,函数,B,2005年1月,19,【,例,】,函数的嵌套调用,main(),int n=3;,printf(%dn,sub1(n);,sub1(int n),int i,a=0;,for(i=n;i0;i-),a+=sub2(i);,return a;,sub2(int n),return n+1;,程序输出结果:,9,2005年1月,20,4.2.5,对被调函数的声明和函数原型,变量要,先定义后使用,,函数也如此,。即,被调函数的定义要出现在主调函数的定义之前,。如,swap,函数,.,void swap(int x,int y),main(),swap(a,b);,main(),c=max(a,b);,max(int x,int y),允许整型函数(且参数也是整型)的定义出现在主调函数之后。如,max,函数,.,2005年1月,21,对被调函数进行声明的一般形式,函数类型 函数名(,参数类型,1,参数名,1,,,),;,或 函数类型 函数名(,参数类型,1,,,参数类型,2,,,),;,第二种形式省略了参数名,此种形式也称为,函数的原型,。,如果非整型函数在主调函数之后定义,则应在主调函数中或主调函数之前对被调函数进行声明。,2005年1月,22,#include,void main(),float calc(float x,float y,char opr);,float a,b;char opr;,printf(n,输入四则运算表达式,:);,scanf(%f%c%f,if(opr=+|opr=-|opr=*|opr=/),printf(%5.2f%c%5.2f=%6.2fn,a,opr,b,calc(a,b,opr);,else printf(,非法运算符,!n);,float calc(float x,float y,char opr),switch(opr),case+:return(x+y);,case -:return(x-y);,case *:return(x*y);,case /:return(x/y);,对被调函数的声明,【,例,4-12】,计算并输出两个数的和、差、积、商。,2005年1月,23,4.3,局部变量和全局变量,变量的作用域,:变量在程序中可以被使用的范围。,根据变量的作用域可以将变量分为,局部变量和全局变量,。,局部变量,(,内部变量,),:在函数内或复合语句,内,定义的变量以及,形参,。,作用域,:,函数内或复合语句内,。,4.3.1,局部作用域和局部变量,【,例,】,分析下面程序的运行结果及变量的作用域。,2005年1月,24,void sub(int,a,int,b,),int,c,;,a=a+b;b=b+a;c=b-a;,printf(sub:ta=%d b=%d c=%dn,a,b,c);,局部变量,void main(),int,a,=1,b,=1,c,=1;,printf(main:ta=%d b=%d c=%dn,a,b,c);,sub(a,b);,printf(main:ta=%d b=%d c=%dn,a,b,c);,int,a,=2,b,=2;,printf(comp:ta=%d b=%d c=%dn,a,b,c);,printf(main:ta=%d b=%d c=%dn,a,b,c);,局部变量,局部变量,“分程序”或“程序块”,程序输出结果:,main:a=1 b=1 c=1,sub:a=2 b=3 c=1,main:a=1 b=1 c=1,comp:a=2 b=2 c=1,main:a=1 b=1 c=1,2005年1月,25,4.3.2,全局作用域和全局变量,全局变量,(,外部变量,):在,函数外部,定义的变量。,作用域,:,从定义变量的位置开始到本源文件结束,。,如在其作用域内的函数或分程序中定义了同名局部变量,则在局部变量的作用域内,同名全局变量暂时不起作用,。,【,例,】,全局变量和局部变量的作用域。,2005年1月,26,int,a,=5;,void f(int,x,int,y,),int,b,c,;,b=a+x;,c=a-y;,printf(%dt%dt%dn,a,b,c);,局部变量,main(),int,b=6,c=7,;,f(b,c);,printf(%dt%dt%dn,a,b,c);,int,a=9,b=8,;,printf(%dt%dt%dn,a,b,c);,c,=10;,printf(%dt%dt%dn,a,b,c);,printf(%dt%dt%dn,a,b,c);,printf(%dt%dt%dn,a,b,c);,局部变量,局部变量,程序输出结果:,5 11 -2,5 6 7,9 8 7,9 8 10,9 8 10,5 6 10,全局变量,“分程序”或“程序块”,int,2005年1月,27,4.4,变量的生存期和存储类别,4.4.1,变量的生存期,变量的生存期,:变量在内存中占据存储空间的时间。,程序代码区,静态存储区,动态存储区,存储分配,动态存储变量,静态存储变量,2005年1月,28,4.4.2,变量的存
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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