《第7章_函数课件.ppt》由会员分享,可在线阅读,更多相关《第7章_函数课件.ppt(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第7章_函数ppt课件(全)第第7章章 函函 数数第7章_函数ppt课件(全)第第7章章 函函 数数7.1 函数定义和函数调用函数定义和函数调用 7.2 函数的嵌套调用和递归调用函数的嵌套调用和递归调用 7.3 局部变量和全局变量局部变量和全局变量 7.4 变量的存储类别变量的存储类别 7.5 内部函数和外部函数内部函数和外部函数 第7章_函数ppt课件(全)7.1 函数定义和函数调用函数定义和函数调用7.1.1 函数定义函数定义【例【例 7.1】已知五边形各边及对角线的长度,求面积。】已知五边形各边及对角线的长度,求面积。abcdefgs1s2s3#include #include floa
2、t area(float x,float y,float z) float s,a; s=(x+y+z)/2; a=sqrt(s*(s-x)*(s-y)*(s-z); return a;分析:分析:s1= area(a,b,f) ; s2= area(c,g,f) ; s3= area(d,e,g) ;第7章_函数ppt课件(全)void main() float a,b,c,d,e,f,g; float s1,s2,s3,s; scanf(%f%f%f%f%f,&a,&b,&c,&d,&e); scanf(%f%f,&f,&g); s1= area(a,b,f) ; s2= area(c,g
3、,f) ; s3= area(d,e,g) ; s=s1+s2+s3; printf(s=%fn,s);abcdefgs1s2s3第7章_函数ppt课件(全)一般形式:一般形式:类型类型 函数名函数名(类型类型 形参,类型形参,类型 形参,形参,) 定义部分定义部分 语句序列语句序列float area(float x,float y,float z) float s,a; s=(x+y+z)/2; a=sqrt(s*(s-x)*(s-y)*(s-z); return a;第7章_函数ppt课件(全)【例【例7.2】 编写函数,在一行上输出编写函数,在一行上输出10个个 * 字符。字符。#in
4、clude void print() int i; for(i=0;iy?x:y; return (maxvale); void main() float a,b,c,m; scanf(%f%f%f,&a,&b,&c); m=max(max(a,b), c); printf(m=%fn,m); 第7章_函数ppt课件(全)一般形式:一般形式:类型标识符类型标识符 函数名函数名 (类型类型 形参形参,类型,类型 形参形参,);或或类型标识符类型标识符 函数名函数名 (类型类型 ,类型,类型 ,) ;7.1.4 函数声明函数声明例如:例如:float max(float x,float y);或或
5、float max(float,float);第7章_函数ppt课件(全)【例【例7.4】对被调函数声明的例子】对被调函数声明的例子#includevoid main() float add(float x,float y); float a,b,c; scanf(%f,%f,&a,&b); c=add(a,b); printf(sun is %f,c);float add(float x,float y) float z; z=x+y; return(z);第7章_函数ppt课件(全) 函数间的参数传递函数间的参数传递c=max(a,b); /* 在在main函数中调用函数中调用 */int
6、 max(int x, int y) /* 函数定义函数定义 */ int z; z=xy?x:y; return(z); 第7章_函数ppt课件(全)【例【例7.5】 求末尾数非求末尾数非0的正整数的逆序数,如的正整数的逆序数,如 reverse(321)的值是:的值是: 123#include void main() long a, reverse(long); scanf(%ld,&a); printf(%ldn, reverse(a) ) ; printf(a=%ldn,a);第7章_函数ppt课件(全)long reverse(long n) long k=0; while(n) k
7、=k*10+n%10; n/=10; return k;reverse(321);k=0;当当n=321时时k=0*10+321%10=1;n=321/10=32;当当n=32时时k=1*10+32%10=12;n=32/10=3;当当n=3时时k=12*10+3%10=123;n=3/10=0;当当n=0时结束循环时结束循环分析:分析:n=321, k=0k=1; k=k*10+2; k=k*10+3;第7章_函数ppt课件(全)7.2 函数的嵌套调用和递归调用函数的嵌套调用和递归调用7.2.1 函数的嵌套调用函数的嵌套调用第7章_函数ppt课件(全)【例【例7.7】编写程序,输入】编写程序
8、,输入n,m,求,求组合数组合数)!( !nmnmCnm#include void main() int n,m; long cmn(int,int); scanf(%d%d,&n,&m); printf(cmn=%ldn, cmn(n,m) ); long jc(int n) int i; long t=1; for(i=1;i 3!=3*2! - 2!=2*1! - 1!=1*0! - 0!=14!=4*6 - 3!=3*2 - 2!=2*1 - 1!=1*1 - 0!=1 第7章_函数ppt课件(全)【例【例7.8】用递归计算】用递归计算n!。#include long jc(int n
9、) long f; if(n=1|n=0) f=1; else f=n*jc( n-1); return f;void main() long y; int n; scanf(“%d”,&n); y=jc(n); printf(%d!=%ld,n,y); main函数函数y=Jc(3)jc函数函数f=3*Jc(2)jc函数函数f=2*Jc(1)jc函数函数f=1return 1jc函数函数f=2*Jc(1)return 2jc函数函数f=3*Jc(2)return 61n1)!-n(n0,1n1n!第7章_函数ppt课件(全)【例【例7.9】把十进制整数按相反的顺序将各位数字打】把十进制整数按
10、相反的顺序将各位数字打 印出来。如:印出来。如:print(123456); 输出:输出:654321#include void print(long n) if(n=0) return; else printf(%d,n%10); print(n/10); return; void main() long n; scanf(%ld,&n); print(n);运行结果如下:运行结果如下: 123456 654321第7章_函数ppt课件(全)7.3 局部变量和全局变量局部变量和全局变量main() int a; a=10; printf(“%d”,a);内存内存.1020002001第7章_
11、函数ppt课件(全)7.3.1 局部变量(内部变量)局部变量(内部变量)定义:定义:在函数内定义的变量。在函数内定义的变量。作用域:作用域:在本函数内有效。在本函数内有效。说明:说明:(1) main函数中定义的变量只在函数中定义的变量只在main函数函数中有效。中有效。(2) 形参属于形参属于局部局部变量。变量。(3) 不同函数中不同函数中同名同名变量,占不同内存单变量,占不同内存单 元。元。(4) 在在复合语句复合语句中定义的变量,只在本复中定义的变量,只在本复合语句中有效。合语句中有效。float fun( float x ) float a; a=x0?x:-x; return a;v
12、oid main() float m,n; scanf(“%f”,&m); n=fun(m); printf(“%fn”,n);float fun( float x ) float a; a=x0?x:-x; return a;void main() float a, n; scanf(“%f”,&a); n=fun(a); printf(“%fn”,n);void main() int a,b,c; a=1;b=2; c=a+b; int c; c=a-b; printf(“ %dn”,c); printf(“%dn”,c);输出:输出:-13第7章_函数ppt课件(全)7.3.2 全局变量
13、全局变量(外部变量外部变量)l 定义:定义:在函数外在函数外部定义的变量部定义的变量。l 作用域:作用域:从定义从定义的位置到本文件结的位置到本文件结束束。x, i, ja,b,c,dm, nc1,c2a1, a2int a1=1,a2=5; float f1(float x) int i,j; . . char c1,c2; char f2(int a, int b)int c,d; . .void main()int m,n; . .第7章_函数ppt课件(全)【例【例7.10】编写函数求两个数】编写函数求两个数的和与积。的和与积。#include float add, mult; voi
14、d func(float x, float y) add=x+y; mult=x*y;void main() float a,b; scanf(%f%f, &a,&b); func(a,b); printf(%.2f %.2fn,add,mult);注意:注意: (1) 设置全局变量的作设置全局变量的作用是增加了函数间数据用是增加了函数间数据传递的通道。传递的通道。(2) 全局变量定义时未全局变量定义时未初始化,系统为其赋初初始化,系统为其赋初值值0。(3) 若全局变量与局部若全局变量与局部变量同名,则在局部变变量同名,则在局部变量的作用范围内,同名量的作用范围内,同名的全局变量不起作用的全局
15、变量不起作用。 float add,mult; add=x+y; mult=x*y;运行情况如下:运行情况如下:3 8 11.00 24.00运行情况如下:运行情况如下:3 8 00.00 00.00第7章_函数ppt课件(全)【例【例6.13】用】用extern声明外部声明外部变量,扩展它在程序文件中的变量,扩展它在程序文件中的作用域作用域#includeint max(int x, int y) int z; z=xy?x:y; return(z);void main() printf(%d, max(A, B);int A=8, B=2;(4) 当全局变量定义当全局变量定义在后,引用在前
16、时,在后,引用在前时,应在引用它的函数应在引用它的函数中用中用extern 对此全对此全局变量进行声明局变量进行声明(说明)。(说明)。【例【例6.13】用】用extern声明外部声明外部变量,扩展它在程序文件中的变量,扩展它在程序文件中的作用域作用域#includeint max(int x, int y) int z; z=xy?x:y; return(z);void main() extern int A, B; printf(%d, max(A, B);int A=8, B=2;【例【例7.12】用】用extern声明外部变声明外部变量,扩展它在程序文件中的作量,扩展它在程序文件中的作
17、用域用域#includeint max(int x, int y) int z; z=xy?x:y; return(z);void main() extern A, B; printf(%d, max(A, B);int A=8, B=2;第7章_函数ppt课件(全)(5) 当一个程序由多个源当一个程序由多个源文件组成时,如果想在文件组成时,如果想在一个文件中引用另一个一个文件中引用另一个文件中的已定义的外部文件中的已定义的外部变量,要用变量,要用extern对该变对该变量进行声明。量进行声明。【例【例6.13】用】用extern将外部变量将外部变量的作用域扩展到其他文件。的作用域扩展到其他文
18、件。文件文件a2.c中的内容为:中的内容为:extern a; int power(int n) int i,y=1; for(i=1;i=n;i+) y*=a; return(y);文件文件a1.c中的内容为:中的内容为:#include int a; main() int power(int); int d,m; printf(enter a number and its power :n); scanf(%d,%d, &a, &m); d=power(m); printf(%d*%d=%d,a,m,d);计算:计算: a的的m次方,即次方,即 a*m=am运行情况如下:运行情况如下:2,
19、3 2*3=8第7章_函数ppt课件(全)变量的属性:变量的属性:数据类型:如数据类型:如 int, float 等。等。存储类型存储类型:是指数据在内存中:是指数据在内存中 的存储方式。的存储方式。 分两大类:分两大类:动态存储类动态存储类 静态存储类静态存储类 7.4 变量的存储类型变量的存储类型用户内存空间用户内存空间动态存储区动态存储区静态存储区静态存储区程序存储区程序存储区变量定义的形式:变量定义的形式: 存储类型标识符存储类型标识符 类型标识符类型标识符 变量名;变量名;autostaticregisterextern自动的自动的静态的静态的寄存器寄存器外部的外部的第7章_函数pp
20、t课件(全)int i,j,k; char c; . . int i,j,k; char c; . . 等价于等价于 autoauto int i,j,k; int i,j,k; autoauto char c; . . char c; . . 7.4.1 auto(自动)变量(自动)变量 7.4.2 static(静态)变量(静态)变量静态变量分为:静态变量分为: 静态静态局部局部变量变量 静态静态全局全局变量变量静态全局变量只能被所定义静态全局变量只能被所定义的文件中所有函数引用。的文件中所有函数引用。例如在例例如在例7.137.13中将全局变量中将全局变量定义为定义为 static in
21、t a;static int a;第7章_函数ppt课件(全)【例例6.13】考察静态局部变量的值。】考察静态局部变量的值。#includeint func(int a)int b=0; static int c=1; b=b+1; c=c+1; return(a+b+c);void main()int a=2,i; for(i=0;i3;i+) printf( %d,func(a);分析:分析:i=0时:时: b:0 c:1 b:1 c:2a+b+c=2+1+2=5; 运行结果:运行结果: 5 6 7分析:分析:i=1时:时: b:0 c:2 b:1 c:3a+b+c=2+1+3=6; 分析
22、:分析:i=2时:时: b:0 c:3 b:1 c:4a+b+c=2+1+4=7; 第7章_函数ppt课件(全) 寄存器变量被存放在寄存器中,寄存器变量被存放在寄存器中, 比自动变量存取速度快得多。比自动变量存取速度快得多。 7.4.3 register(寄存器)变量(寄存器)变量int fac(int n) register int i, f=1; for(i=1;i=n;i+) f=f*i; return (f);注意:注意:(1) 寄存器的数量有限,因此寄存器变量不能定义太多。寄存器的数量有限,因此寄存器变量不能定义太多。(2) 只有局部自动变量和形式参数可作为寄存器变量。只有局部自动变
23、量和形式参数可作为寄存器变量。第7章_函数ppt课件(全)1. 内部函数内部函数 内部函数内部函数只能被本文件中的其他函数所只能被本文件中的其他函数所调用。调用。 在定义函数时,在前面加在定义函数时,在前面加static。 例如:例如: static float fun(float x, float y) 7.5 内部函数和外部函数内部函数和外部函数第7章_函数ppt课件(全)2 外部函数外部函数 (1) 在定义函数时,在前面加上在定义函数时,在前面加上extern,则表示该函,则表示该函数为数为外部函数外部函数,可供,可供其他文件其他文件调用。调用。 如如 extern float fun(float x, float y) 或或 float fun(float x, float y) (2) 在需要调用此函数的文件中,用在需要调用此函数的文件中,用extern 声明所声明所用函数是外部函数。如用函数是外部函数。如 extern float fun(float x, float y); 或或 float fun(float x, float y);