C课件21复件第8章

上传人:E**** 文档编号:91242751 上传时间:2019-06-26 格式:PPT 页数:42 大小:543.50KB
返回 下载 相关 举报
C课件21复件第8章_第1页
第1页 / 共42页
C课件21复件第8章_第2页
第2页 / 共42页
C课件21复件第8章_第3页
第3页 / 共42页
C课件21复件第8章_第4页
第4页 / 共42页
C课件21复件第8章_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《C课件21复件第8章》由会员分享,可在线阅读,更多相关《C课件21复件第8章(42页珍藏版)》请在金锄头文库上搜索。

1、第八章 函数 标准函数(库函数) 函数 自定义函数(本章介绍),为什么要使用函数? 1.将大问题化小,便于编程; 2.每一个函数是一个独立的程序块, 便于调试; 3.每个程序块中的问题不易扩散,便 于程序维护。,函数使用说明: 1.一个C程序由若干个函数组成,其中 只有一个、而且必须有一个main(), 程序执行都是从main()开始。 2.函数使用之前要先定义。 3.函数有两种:有参函数和无参函数。,一、函数定义 一般形式:类型 函数名(形式参数表) 形参类型说明 : : return; 有参函数,类型 函数名()无参函数 : : return; ,说明: 1.类型:函数调用后返回值的类型,

2、 没有可不写或写void(void表示没 有返回类型)。 2.形参:变量名或数组名。 3.函数体内与main()相同,先声明, 后语句部分,函数体内可以使用C的 任何语句。,4.return语句的使用 形式: return(表达式); 或: return; 作用:返回到调用函数,同时带回 一个值,若return出现在函 数体的最后且没有返回值, 可省略。,例:编写一个函数求xn。 函数名 int power(int x,int n) int i,p; 参数 p=1; 函数 for(i=1;i=n;+i) 函数体 类型 p=p*x; return(p); ,该函数也可以写成: int power

3、(x,n) int x,n; int i,p; p=1; for(i=1;i=n;+i) 函数体 p=p*x; return(p); ,例:无参函数 void pir() printf (“*”); ,二、函数的调用 函数调用可以: 1.在一个函数体内调用另一个函数; 2.定义本函数体内自己调用自己(递归)。,例:调用power()函数,求y=x5。 #include void main( ) long int x, y; scanf (“%d”, ,函数调用过程: 1.实参的值传递给形参:例如 xa 5n 2.执行函数体(使用形参的值) 3.当遇到return时,函数结束, 返回到调用函数处

4、。 4.调用函数继续往下执行。,说明: 1.将实参传递给形参时,以位置对 应,与名称无关; 2.实参可以是:常数、变量、表达 式等; 3.实参的类型应与形参的类型一致; 4.在C语言中,实参和形参分别分配 存储单元,实际是将实参的值拷 贝到形参。,x a 5 n main() power() 传递后形参的值与实参相同,12,12,5,调用形式: 根据调用在调用程序中出现的 位置,分为: 表达式调用 语句调用 参数调用,表达式调用调用出现在表达式中,此时被调用函数必须有返回值。 例如:求a3+b5+c7。,#include float power( float x, int n) float p

5、=1.0; int i; for ( i=1; i=n; +i) p=p*x; return(p); void main() float a,b,c,s; scanf (“%f%f%f”, 三次调用power()函数, 调用出现在赋值语句中,语句调用调用单独作为一个语句出现,此时被调用函数没有返回值。 例如:求三个数的最大值。,#include void smax ( int a, int b, int c) int m; m=ab?a:b; m=mc?m:c; printf ( “max=%dn”, m); void main() int x, y, z; scanf( “%d%d%d”,

6、调用单独作为一条语句 此时smax()函数没有返回值,参数调用调用作为另一个函数的参数,此时被调用函数必须有返回值。 例如:求(x)5)n,#include float power ( float x, int n) float p=1.0; int i; for ( i=1; i=n; +i) p=p*x; return(p); void main() float x, s; int a, b; scanf( “%f%d%d”, 二次调用power()函数 此时称为调用的嵌套,该main()函数也可以写成: void main() float x; int a, b; scanf( “%f%

7、d%d”, ,三、关于函数的类型声明 以下两种情况可以不作声明: 1.被调用函数的返回类型为int 或char时(Turbo C2.0)。 2.被调用函数在main()之前, main()调用时可以不声明。 (如上例),除以上外,需在调用前声明: 1.函数的返回类型 2.函数名 3.参数的类型 (声明被调用函数可以在函数体内, 也可以在函数体外),以下程序需要声明: #include float power( float x, int n);声明 void main() float a,b,s; scanf (“%f%f”, ,以下程序不需声明: void main() int a, b, s

8、; a=4; b=5; s=fun(a, b); printf(“%d”,s); int fun(int a, int b) return(a*a+b*b); ,#include float power( float x, int n) float p=1.0; int i; for ( i=1; i=n; +i) p=p*x; return(p); void main() float a,b,c,s; scanf (“%f%f%f”, ,int fun(int a, int b) return(a*a+b*b); void main() int a, b, s; a=4; b=5; s=fu

9、n(a, b); printf(“%d”,s); ,四、递归函数 在定义函数体内又调用自己。(直 接递归) 在调用另一个函数体内又间接调用 自己。(间接递归),例:n! long int f(int n) n=5 long int h; 5*f(4) if(n1) 4*f(3) h=n*f(n-1); 3*f(2) else h=1; 2*f(1) return(h); 1 2*1 void main() 3*2*1 int n,p; 4*3*2*1 n=5; 1205*4*3*2*1 p=f(n); printf(“n!=%d”,p); 递归注意:要有结束的条件,五、数组作为函数参数 数组元

10、素作为函数参 数。(与变量相同) 两种 情况 数组名作为函数参数。 (调用与被调用函数处 理的是同一个数组),以下分别举例说明: 1、数组元素作为函数参数。 2、一维数组名作为函数参数。 (形参的几种形式),例1:对a数组中的每个元素,求平方、3次方、平方根并输出。 #include #include void ss(float x) float s1,s2,s3; s1=x*x; s2=x*x*x; s3=sqrt(x); printf(“%f,%f,%fn”,s1,s2,s3); ,void main() float a10; int i; for(i=0;i10;i+) scanf(“%

11、f”,循环中多次调用ss函数 ,例2:将一维数组a中每一个元素求平方值后,仍存入该数组。 #include void pp(int x); void main() void pp(int x) int a=1,2,3,4,5,6; int k; int i; for(k=0;k6;k+) pp(a); xk=xk*xk; for(i=0;i6;i+) return; printf(“%d ”,ai); 输出结果:1 4 9 16 25 36,注意: 1.数组名作为函数参数,调用函数和被调用函数处理的是同一个数组,若被调用函数改变其中元素的值,相应调用函数元素的值也变。 2.实参只写数组名,而形

12、参要写数组的定义形式。,例如: #include void fx(int a) int i; for(i=0;i10;i+) ai=i*2; void main() int x10,i=-1; fx(x); while(i+9) printf(“%4d”,xi); 程序输出结果:0 2 4 6 8 10 12 14 16 18,六、变量作用域和生存期 作用域:变量使用的范围。 生存期:变量存在的时间。 局部变量与全局变量。(变量的作用域),局部变量: 在一个函数体内(或复合语句内)定义 的变量。(又称自动变量) 特点: 1.只允许在定义的范围内使用。 2.形式参数也是局部变量。 3.局部变量若

13、没赋值,为一个随机值。,局部变量声明形式: auto int a, b; 或: int a, b; (省略auto) (前面程序中遇到的所有变量都是局部变量),全局变量: 在函数体之外定义的变量。 特点: 1.全局变量可以为本程序文件中的所有函 数使用,其作用范围由定义的位置开始 到本文件结束。 2.使用全局变量起到各函数间传递参数的 作用。 3.全局变量若没有赋值,是0值。,例如: #include int x,y; /*x,y为全局变量*/ void ftr() int a=40,b=20; /*a,b为局部变量*/ x=a-b; y=a+b; return; void main() int a=5,b=10; /*为局部变量*/ x=a+b; y=a-b; ftr(); printf(“%d %dn”,x,y); /*输出的是:20 60*/ ,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号