C语言程序设计函数课件.ppt

上传人(卖家):三亚风情 文档编号:3021311 上传时间:2022-06-23 格式:PPT 页数:49 大小:654KB
下载 相关 举报
C语言程序设计函数课件.ppt_第1页
第1页 / 共49页
C语言程序设计函数课件.ppt_第2页
第2页 / 共49页
C语言程序设计函数课件.ppt_第3页
第3页 / 共49页
C语言程序设计函数课件.ppt_第4页
第4页 / 共49页
C语言程序设计函数课件.ppt_第5页
第5页 / 共49页
点击查看更多>>
资源描述

1、主讲教师:李艺主讲教师:李艺C语言程序设计第八章函数8-28-3概述p函数函数函数是函数是C语言程序的基本结构。语言程序的基本结构。C语言提供了许多函数。语言提供了许多函数。 它包它包括:括:nI/O函数函数n数学函数数学函数n字符串函数、字符函数函数字符串函数、字符函数函数n时间时间(转换和操作转换和操作)函数函数n接口函数接口函数n动态地址分配函数动态地址分配函数n目录函数目录函数n过程控制函数过程控制函数n字符屏幕和图形功能函数等。字符屏幕和图形功能函数等。用户可以根据需要选择使用。这一类函数称为库函数。库函数用户可以根据需要选择使用。这一类函数称为库函数。库函数函数的引用的方法很简单,

2、这里不赘述。函数的引用的方法很简单,这里不赘述。8-4概述8-5概述8-6p函数的定义函数的定义函数的定义就是创造、编制函数。函数的定义过程就是编制函函数的定义就是创造、编制函数。函数的定义过程就是编制函数的过程。数的过程。p函数定义的格式函数定义的格式数据类型数据类型 函数名函数名( 形参类型形参类型1 形参形参1,形参类型形参类型n 形参形参n) 说明语句;说明语句; 可执行语句;可执行语句; return(表达式表达式) ;例如:例如:int myfun(int x, int y) int z; if(xy)z=x; z=y; return(z); 8-7p函数定义的说明函数定义的说明n

3、函数返回类型:函数返回类型:若函数无返回值若函数无返回值,或返回整型值或返回整型值, 可省略数据类型可省略数据类型说明。说明。n形参:形参:l形参是函数接收外部数据的单向通道。函数调用时形参是函数接收外部数据的单向通道。函数调用时, 调用函调用函数的实参将其数据传递给形参。数的实参将其数据传递给形参。l函数可以有多个或函数可以有多个或0个形参,各形参之间用逗号隔开。个形参,各形参之间用逗号隔开。l形参可以是变量、指针或数组等;形参可以是变量、指针或数组等;l形参不能是常量和表达式。形式参数是局部变量。作用域、形参不能是常量和表达式。形式参数是局部变量。作用域、生命期为函数体内。生命期为函数体内

4、。n函数名:函数名:函数名的命名规则同标识符的命名规则函数名的命名规则同标识符的命名规则8-8nreturn语句语句:如果函数有返回值,则函数的最后一条语句就是:如果函数有返回值,则函数的最后一条语句就是 return语句语句。返回的意义是:。返回的意义是:l使流程返回主调函数,宣告函数的一次执行结束,使流程返回主调函数,宣告函数的一次执行结束,在调用期间所分配的变量单元被撤消。在调用期间所分配的变量单元被撤消。l送函数值到调用表达式中。有些函数有返回值,有送函数值到调用表达式中。有些函数有返回值,有些函数没有返回值。些函数没有返回值。preturn语句的使用格式是:语句的使用格式是: ret

5、urn;或者或者 return (表达式表达式);或者或者 return 表达式;表达式;8-9p注意注意1.return后的表达式的值类型必须与函数类型相同;后的表达式的值类型必须与函数类型相同;2.如果函数类型为空(如果函数类型为空(void)类型,则函数体中可以不使用)类型,则函数体中可以不使用return语句,或使用不带参数的语句,或使用不带参数的return。3.一个函数允许有一个或多个一个函数允许有一个或多个return语句,流程执行到其中一个语句,流程执行到其中一个 return时即返回主调函数。如果有多个时即返回主调函数。如果有多个return语句,每个语句,每个return后

6、面的表达式的类型应相同。后面的表达式的类型应相同。4.如果函数值的类型和如果函数值的类型和return语句中表达式的值不一致,则以函数语句中表达式的值不一致,则以函数类型为准。对数值型数据自动进行类型转换。类型为准。对数值型数据自动进行类型转换。5.被调用函数中没有被调用函数中没有return语句,则函数带回一个不确定的值。建语句,则函数带回一个不确定的值。建议用议用void标记函数的类型,则系统可保证函数不带回任何值,即标记函数的类型,则系统可保证函数不带回任何值,即禁止在调用函数中使用被调用函数的返回值。禁止在调用函数中使用被调用函数的返回值。8-10pC语言准许定义语言准许定义“空函数空

7、函数”。例如:例如: dummy( ) 调用此函数调用此函数, 什么工作也不做。它表明有一个函数什么工作也不做。它表明有一个函数, 尚未有具体的内容尚未有具体的内容, 待以后将功能补充上去。一般在系统待以后将功能补充上去。一般在系统开发初期开发初期, 一些没开发出来的部分用此方法。一些没开发出来的部分用此方法。8-11p函数的引用函数的引用函数定义好后,便可以在表达式中使用。函数定义好后,便可以在表达式中使用。p函数引用的格式函数引用的格式函数名(实参表列)函数名(实参表列)n实参的作用是在程序发生函数调用时实参的作用是在程序发生函数调用时, 将其数据传递给函数的形参将其数据传递给函数的形参,

8、 即即向函数传送数据。向函数传送数据。int fun1(x1,y1) int z; z = x1 +y1; return( z );void main( ) int s,x=2,y=6; s = fun1(x,y); printf (“%d”, s); 运行结果:运行结果: 88-128-138-14p函数调用的形式函数调用的形式在在C语言中语言中, 凡是能调用变量或表达式的地方凡是能调用变量或表达式的地方, 均可调用函数。均可调用函数。假设已定义了一个函数,即:假设已定义了一个函数,即:我们有如下三种形式调用:我们有如下三种形式调用:1.函数函数调调用语句形式,如:用语句形式,如:a=max

9、(s1,s2);这就是函数这就是函数调调用语句用语句, 简称函数语句。简称函数语句。2.在表达式中引用,如:在表达式中引用,如:例:例: y=max(x1,x2) / max(y1,y2);3.函数调用函数,如:函数调用函数,如:y=abs(max(rand( ),rand( ); /其中其中rand( ) 为随机函为随机函数。数。int max(x,y)int x,y; int z; z=(xy)? x:y; return(z);8-15如果定义的函数在使用之后,则函数必须在使用前先声明。目如果定义的函数在使用之后,则函数必须在使用前先声明。目的是告诉编译程序该函数返回值的数据类型的是告诉编

10、译程序该函数返回值的数据类型, 以便编译程序能够检查以便编译程序能够检查对函数的调用是否正确对函数的调用是否正确,会不会发生错误的类型转换等。会不会发生错误的类型转换等。p函数说明的格式函数说明的格式数据类型数据类型 函数名(函数名( 形参类型形参类型 形参,形参,););p函数声明注意的问题函数声明注意的问题n被调用函数的声明放在源文件头被调用函数的声明放在源文件头, 则该声明对整个源文件都有效则该声明对整个源文件都有效int f1( ); int f2( );main( ) f1( ); f2( ); int f1( ) . f2( ); int f2( ) 函数函数f1中没有对函中没有对

11、函数数f2进行说明,其进行说明,其引用是错误的。引用是错误的。main( ) int f1( ); int f2( ); f1( ); f2( ); 8-16n如果被调用函数在调用函数内部声明如果被调用函数在调用函数内部声明, 则该声明仅对则该声明仅对该调用函数有效。如果被调用函数是在函数外声明该调用函数有效。如果被调用函数是在函数外声明, 则该声明对以后的所有调用都有效。则该声明对以后的所有调用都有效。void main( ) float max(float a, float b, float c ); float x,y,z,m; scanf(“%f %f %f”,&x,&y,&z); m

12、=max(x,y,z); printf(“n%f:”,m); float max(float a, float b, float c) float result; result=a; if(resultb) result=b; if(resultc) result=c; return(result); 函数声明函数声明float max(float a, float b, float c ); 函数函数max( )定义定义 float max(float a, float b, float c) float result; result=a; if(resultb) result=b; if(

13、resultc) result=c; return(result); 函数使用函数使用m=max(x,y,z);8-17n如果调用函数和被调用函数是在同一个源文件中如果调用函数和被调用函数是在同一个源文件中, 而而且程序中被调用函数是在调用函数之前已定义且程序中被调用函数是在调用函数之前已定义, 此时此时可以省略被调用函数的声明。可以省略被调用函数的声明。float max(float a, float b, float c) /先定义先定义 float result; result=a; if(resultb) result=b; if(resultc) result=c; return(r

14、esult); void main( ) float x,y,z,m; scanf(“%f %f %f”,&x,&y,&z); m=max(x,y,z); /后使用,所以不用声明后使用,所以不用声明 printf(“n%f:”,m); 8-18n如果所有被调用函数的说明都是在源文件开头如果所有被调用函数的说明都是在源文件开头, 则在该源文件内则在该源文件内的所有调用函数中不必再对被调用函数声明。的所有调用函数中不必再对被调用函数声明。float f1( );float f2( );main( ) f1( ); f2( ); float f1( ) float f2( ) 声明函数声明函数 f1

15、、f2定义函数定义函数 f1定义函数定义函数 f28-19n如果被调用函数的声明在源文件中间且在所有函数之如果被调用函数的声明在源文件中间且在所有函数之外某处被说明时外某处被说明时, 则在被说明之后引用它时则在被说明之后引用它时, 不必再声不必再声说明说明; 但在被说明之前调用它时但在被说明之前调用它时, 需对其进行说明。需对其进行说明。n如果函数的返回值是整型或字符型时如果函数的返回值是整型或字符型时, 可省略说明。可省略说明。8-20p例例1 编制求两数最大值的程序。编制求两数最大值的程序。#includevoid main( ) float max( ); /函数声明函数声明 float

16、 a, b; scanf(“%f, %f ”,&a,&b); printf(“max is %f ”, max(a,b) ); /函数使用函数使用float max(float x, float y) / 函数定义函数定义 if (xy) return x; else return y;运行结果:运行结果: 5.8 3.2 max is 5.88-21p例例2 编程编程 计算任一输入整数的各位数字之和,请用函数的方法处理。计算任一输入整数的各位数字之和,请用函数的方法处理。思路:对输入的整数思路:对输入的整数, 先求其绝对值先求其绝对值, 然后分解各位上的数字,边分然后分解各位上的数字,边分解

17、边累加解边累加, 直到完毕。直到完毕。#include#include “math.h”int func(int num);void main( ) int n; printf(“请输入一个整数请输入一个整数: ); scanf(%d,&n); printf(“result:%dn,func(n);int func(int num) int s=0; num=abs(num); do s=s+num%10; num=num/10; while(num); return s;请输入一个整数请输入一个整数:456result: 158-22#includefloat factorial(int n

18、) float product; for( product=1;n0;n-) product*=n; return(product);void main() int n; printf(“请输入一个整数请输入一个整数:); scanf(%d,&n); printf(n! = %en,factorial(n);运行结果:运行结果: 请输入一个整数:请输入一个整数:6 n! = 7.200000e+0028-23void main() int i; i = num1(); int num2() int num1() int j; j = num2(); 8-24#includevoid main(

19、) double sum(int n) ; printf(s = %-12.5len, sum(20) );double sum(int n) double fa(int k) , s=0; int i; for (i=1; i=n; +i) s = s + fa(i) ; return s;double fa ( int k ) int i; double t; t = 1; for ( i = 1; i=k; +i) t*=i ; return t;运行结果:运行结果:S = 2.56133e+0188-258-26#includefloat fa(int n) float t; if (

20、n= 1 | n=0) t =1 ;else t= n* fa(n-1) ;return t ;void main() int i ;scanf(”%d” , &i );if (i0) printf(”Data error !”) ;else printf(”%d ! = %-16.0f”, i, fa(i) ) ;说明说明: :递归包括递归包括“回推回推”和和“递归递归”需有结束递归过程的条件需有结束递归过程的条件8-27 4 * fa(3)3 * fa(2)2* fa(1)1 2*1(3* 2*1)(4* 3* 2*1)输出输出 (4* 3* 2*1)递推回归 计算计算 fa(4)8-28

21、对变量的访问就是对内存的访问。在对变量的访问就是对内存的访问。在C语言中变量的存储是有语言中变量的存储是有规定和区别的。规定和区别的。C语言将不同的变量存放在不同类型的存储区,存储区域的类语言将不同的变量存放在不同类型的存储区,存储区域的类型决定了变量的作用域和生命期。型决定了变量的作用域和生命期。pC语言存储类型语言存储类型nauto :自动型或堆栈型。:自动型或堆栈型。nregister:寄存器型。:寄存器型。nstatic:静态型。:静态型。nextern:外部型或全局型。:外部型或全局型。例如:例如:auto int x; x 为自动变量。为自动变量。 static float y;

22、y 为静态变量。为静态变量。8-29pC 语言的存储空间语言的存储空间一般包括三部分:一般包括三部分:n程序区:程序区:存放执行程序的代码和存放执行程序的代码和static 静态变量;静态变量;n静态存储区:静态存储区:存放程序的存放程序的extern 外部变量、外部变量、static 静态变量,静态变量,其其存放的数据在程序执行的过程中不释放存放的数据在程序执行的过程中不释放,所对应变量值是不变的。所对应变量值是不变的。n动态存储区动态存储区(运行栈运行栈):程序运行时,程序运行时,存放数据的空间所对应变量存放数据的空间所对应变量是变化的是变化的。C语言程序在运行时语言程序在运行时,系统分配

23、一个运行栈系统分配一个运行栈,存放以下数存放以下数据:据:l函数调用时函数调用时,保存调用现场的数据保存调用现场的数据, 如返回点、寄存器中的值如返回点、寄存器中的值等。等。l函数调用时函数调用时,存放被调用函数的形参。在函数调用时存放被调用函数的形参。在函数调用时, 给形参给形参分配存储空间分配存储空间, 以存放调用时传送给被调用的实参数据。以存放调用时传送给被调用的实参数据。l存放函数的返回值等。存放函数的返回值等。 l为为auto自动变量自动变量(register寄存器变量寄存器变量)分配存储空间。分配存储空间。8-30 程序区程序区 静态存储区静态存储区 动态存储区动态存储区 用户区用

24、户区存放存放auto变量变量( register变量变量) 函数的返回值、函数的返回值、被调用函数的形参、保存调用现场的数据。被调用函数的形参、保存调用现场的数据。存放存放 static变量、变量、 extern变量变量存放执行程序的代码和静态变量存放执行程序的代码和静态变量存储器存储器8-31p几个名词几个名词n静态变量:静态变量:存储在静态存储区存储在静态存储区, 程序执行中始终不释放程序执行中始终不释放n动态变量:动态变量:存储在动态存储区存储在动态存储区, 程序执行时程序执行时 根据需要释放根据需要释放n内部变量:内部变量:在函数或分程序内定义的变量。作用区域是整个函数在函数或分程序内

25、定义的变量。作用区域是整个函数或分程序或分程序n局部变量:局部变量:内部变量都是局部变量。内部变量都是局部变量。n外部变量:外部变量:在函数或分程序外部定义的变量在函数或分程序外部定义的变量n全局变量:全局变量:在程序开始定义的外部变量。作用区域是整个程序。在程序开始定义的外部变量。作用区域是整个程序。n变量的作用域:变量的作用域:变量在程序中的使用范围。变量在程序中的使用范围。n变量的生命期:变量的生命期:程序中给变量分配的存储空间所保存数据的时间程序中给变量分配的存储空间所保存数据的时间段段n变量的可见性:变量的可见性:存储器数据可操作时为可见的存储器数据可操作时为可见的, 否则为不可见。

26、否则为不可见。8-328-33#includefloat x,y; int i,j; char c1,c2; double d1,d2; int m,n; int u,v; auto int k; K的作用域的作用域d1,d2,m,n,u,v的作用域的作用域x,y的作用域的作用域 对于这一对花括号对于这一对花括号 i,j,c1,c2是内部变量是内部变量i,j,c1,c2的作用域的作用域 对于这一对花括号对于这一对花括号 i,j,c1,c2是外部变量是外部变量8-34例:例:float factorial(int n ) float product; for(product=1;n0;n-) p

27、roduct*=n; return(product);void main( ) float factorial( ); int k; float sum; for(k=1,sum=0;k=10;k+) sum=sum+factorial(k); 10 printf(“ n!=%en”,sum); n=1变量变量 n和变量和变量 product是自动变量是自动变量它们的作用域、生命期是整个它们的作用域、生命期是整个factorial函数函数当函数调用结束,函数返回值带回主函数后,当函数调用结束,函数返回值带回主函数后,释放其存储空间,变量释放其存储空间,变量 n和变量和变量product的数据消

28、失。的数据消失。此函数说明可以省略,因为定义在先,使用在后此函数说明可以省略,因为定义在先,使用在后8-358-36 x例例5 求求 n3 =13+23+33+43+. .+n3 的值。的值。 n=1main( ) int n; register int i,sum; printf(“Enter n:”); scanf(“%d”,&n); sum=0; for(i=1;i=n;i+) sum=sum+i*i*i; printf(“sum=%d”,sum);运行结果:运行结果:Enter n: 10sum=3025变量变量i、sum、n的作用域的作用域变量变量n是自动型变量是自动型变量变量变量i

29、,sum是寄存器变量是寄存器变量8-378-38p请看下面示例:请看下面示例:float add(x,y)float x,y; static float z; z=z+x+y; return(z);main( ) float s,x=2,y=3; s=add(x,y); s=add(x,y); 变量变量 z在函数结束时,并不释放,保留原值在函数结束时,并不释放,保留原值S=5S=10static 型变量在程序编译时,自动赋初值型变量在程序编译时,自动赋初值08-398-40/* file1.c */static int x,y;main( ) . fun( ) ./* file2.c */st

30、atic int x,y;fun1( ) . fun2( ) . 文件文件file1.c和文件和文件file2.c中的同名外部静态变量中的同名外部静态变量 x, y互不干扰。互不干扰。8-41#includevoid main() int k=1; static int x=10; void other(); printf(n-main-n); printf(k=%d x=%dn,k,x); other(); printf(-main-n); printf(k=%d x=%dn,k,x); other();void other() int k=100; static int x=200; x+

31、=100; printf(-other-n); printf(k=%d x=%dn,k,x);8-428-43extern int x,y; f1( ) y=x*x+1; .f2( ) . printf(%d %d”,x,y); .int x,y; main( ) .fun( ) .file1.cfile2.c定义外部变量定义外部变量x,yx,y是文件是文件file1.c中定义的变量。在文中定义的变量。在文件件file2.c中必须对变量中必须对变量x,y用用extern int x,y进行说明,进行说明, 然后然后file2.c中的各函中的各函数才可以使用他们。数才可以使用他们。8-448-45运行结果:运行结果: j=10 j=208-468-478-488-49

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(C语言程序设计函数课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|