第7章_用函数实现模块化程序设计.ppt
《第7章_用函数实现模块化程序设计.ppt》由会员分享,可在线阅读,更多相关《第7章_用函数实现模块化程序设计.ppt(72页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C 程序设计函 数1C语言程序设计-第5章 函数第第7章章 函函 数数1.1.函数概述函数概述2.2.函数定义的一般形式函数定义的一般形式3.3.函数的调用、参数和返回值函数的调用、参数和返回值4.4.局部变量和全局变量局部变量和全局变量5.5.变量的存储类型变量的存储类型6.6.内部函数和外部函数内部函数和外部函数2C语言程序设计-第5章 函数dmainabcgkfhjiel模块化程序示意图:1.1.函数概述函数概述3C语言程序设计-第5章 函数函数调用程序实例#include#include#include#include intintintint main()main()main()ma
2、in()printstarprintstarprintstarprintstar()()()();print_messageprint_messageprint_messageprint_message()()()();printstarprintstarprintstarprintstar();();();();void void void void printstarprintstarprintstarprintstar()()()()printfprintfprintfprintf(“*n*n*n*n”););););void void void void print_messagepr
3、int_messageprint_messageprint_message()()()()printf(printf(printf(printf(“howhowhowhow do you do!n do you do!n do you do!n do you do!n”););););调用函数调用函数用户自定义函数用户自定义函数4C语言程序设计-第5章 函数1 函数概述函数概述(Function)n nC语言用函数实现程序模块化n n一个程序由一个或多个源程序文件组成n n一个源程序文件由一个或多个函数组成n nC程序的执行从main函数开始,并回到main函数结束n n函数之间可以相互调用,
4、或调用自身n n不能调用main函数n n函数之间相互独立,不存在从属关系5C语言程序设计-第5章 函数函数的分类(1)从使用角度分:从使用角度分:标准库函数标准库函数:以程序库的形式直接提供给以程序库的形式直接提供给用户使用。用户使用。stdio.hstdio.h:gets():gets()、printfprintf()()math.hmath.h:sin():sin()、sqrtsqrt()()用户自定义函数用户自定义函数:由用户自己建立定义。:由用户自己建立定义。6C语言程序设计-第5章 函数函数的分类(2)从函数形式分:从函数形式分:vv无参函数无参函数:调用函数时主函数不将数:调用函
5、数时主函数不将数据传送给被调函数。用于完成特定功据传送给被调函数。用于完成特定功能的操作。能的操作。如:如:c=c=getchargetchar()()vv有参函数有参函数:调用函数时在主调函数和:调用函数时在主调函数和被调函数之间有参数传递。被调函数之间有参数传递。如:如:putchar(cputchar(c)、puts(strputs(str)、7C语言程序设计-第5章 函数7.2 函数定义的一般形式函数定义的一般形式n n函数定义形式n n返回类型返回类型 函数名函数名(参数声明参数声明)声明部分声明部分 语句语句 n n返回类型、参数、函数体内容都可省略n ndummy()dummy(
6、)/*does nothing&returns nothing*/*does nothing&returns nothing*/8C语言程序设计-第5章 函数函数定义形式的说明函数定义形式的说明n n关于“返回类型”n n指函数返回值的类型指函数返回值的类型n n若省略此项,则认为返回类型是若省略此项,则认为返回类型是intintn n若无返回值,则定义返回类型为若无返回值,则定义返回类型为voidvoidn n关于“参数声明”n n类型类型 形参名形参名,类型类型 形参名形参名,.n n关于“声明部分”n n指变量、函数的声明指变量、函数的声明9C语言程序设计-第5章 函数函数定义举例函数定
7、义举例int max(int x,int y)int z;z=xy?x:y;return z;int min(int x,int y)return xy?x:y;10C语言程序设计-第5章 函数7.3 函数的参数和函数的值函数的参数和函数的值n n形式参数和实际参数n n形参:形参:定义定义函数时,函数名后函数时,函数名后()()中的参数中的参数n n实参:实参:调用调用函数时,函数名后函数时,函数名后()()中的参数中的参数n n实参可以是常量、变量、表达式、函数调用实参可以是常量、变量、表达式、函数调用n n实参和形参必须类型相同或赋值兼容实参和形参必须类型相同或赋值兼容11C语言程序设计
8、-第5章 函数#include#include intint max(intmax(int x,intx,int y)y)/*/*函数定义函数定义*/intint z;z;z=(x z=(xy)?x:yy)?x:y;return(zreturn(z););main()main()intint a,b,ca,b,c;scanf(%d%d,&a,&bscanf(%d%d,&a,&b););c=c=max(a,bmax(a,b););/*/*函数调用函数调用*/printf(maxprintf(max=%=%dn,cdn,c););【例】求两数的最大值。注意函数的定义形式。实际参数实际参数形式参数形
9、式参数12C语言程序设计-第5章 函数参数传递参数传递n n值传递n n实参对形参的数据传递是实参对形参的数据传递是“值传递值传递”n n单向传递n n只能把实参的值传递给形参只能把实参的值传递给形参n n不能把形参的值传递给实参不能把形参的值传递给实参n n对形参的值所作的改变不能带回给实参对形参的值所作的改变不能带回给实参n n实参和形参是不同的变量n n具有不同的存储空间具有不同的存储空间n n具有不同的生存期和作用域具有不同的生存期和作用域13C语言程序设计-第5章 函数参数传递举例参数传递举例void swap(int x,int y)int t;t=x,x=y,y=t;int ma
10、in()int a=1,b=4;swap(a,b);printf(“%d%d”,a,b);1a4b1x4y41结果:1 414C语言程序设计-第5章 函数参数传递举例参数传递举例int main()int n=100;printf(input numbern);s(n);printf(“main函数:函数:n=%dn,n);int s(int n)int i;for(i=n-1;i=1;i-)n=n+i;printf(“s函数:函数:n=%dn,n);输出:s函数:n=5050main函数:n=10015C语言程序设计-第5章 函数return语句语句n n形式n n形式一:形式一:retur
11、nreturn;n n形式二:形式二:returnreturn expressionexpression;n n功能n n函数返回语句函数返回语句n n结束函数调用结束函数调用n n如果需要,还可以带回函数返回值如果需要,还可以带回函数返回值16C语言程序设计-第5章 函数return语句执行图示:语句执行图示:main()main()intint a,b,ca,b,c;scanf(“%d%d”,&a,&bscanf(“%d%d”,&a,&b););c=c=max(a,bmax(a,b);printf(“maxprintf(“max=%=%dn”,cdn”,c););intint max(x,
12、ymax(x,y)intint x,yx,y;intint z;z;z=(x z=(xy)?x:yy)?x:y;return(zreturn(z););主调函数被调函数17C语言程序设计-第5章 函数函数的返回值函数的返回值(Return Value)n n返回值的说明返回值的说明1.1.函数返回值的类型在函数定义中指定函数返回值的类型在函数定义中指定2.2.函数返回值通过函数中的函数返回值通过函数中的returnreturn语句获得语句获得3.3.若函数无返回值,则可以没有若函数无返回值,则可以没有returnreturn语句语句4.4.returnreturn语句后的表达式类型,应与函数返
13、回值语句后的表达式类型,应与函数返回值类型相同,或可以兼容赋值;两者类型不同时,类型相同,或可以兼容赋值;两者类型不同时,自动做类型转换自动做类型转换5.5.函数需要返回值时,若缺少函数需要返回值时,若缺少returnreturn语句,或语句,或returnreturn语句未带返回值,则返回一个不确定值语句未带返回值,则返回一个不确定值18C语言程序设计-第5章 函数7.4 函数的调用函数的调用n n一般形式n n函数名函数名(实参表列实参表列)n n说明n n即使没有实参,即使没有实参,()()也不能省略也不能省略n n多个实参之间用逗号分隔多个实参之间用逗号分隔n n实参与形参按顺序一一对
14、应,类型应匹配实参与形参按顺序一一对应,类型应匹配n n实参的求值顺序不唯一,应避免对此敏感的调实参的求值顺序不唯一,应避免对此敏感的调用形式用形式printf(%d,%dprintf(%d,%d,i,i+);,i,i+);19C语言程序设计-第5章 函数函数调用的方式:函数调用的方式:1.1.函数语句函数语句n nprintf(%dnprintf(%dn,i);,i);2.2.函数表达式函数表达式n n(c+d*(c+d*max(a,bmax(a,b)%e)%e3.3.函数参数函数参数n ngcd(max(a,bgcd(max(a,b),),min(cmin(c,d),d)n n说明说明n
15、n函数调用可以看作同返回类型的表达式使用函数调用可以看作同返回类型的表达式使用n n同时,函数调用还完成了函数中定义的操作同时,函数调用还完成了函数中定义的操作20C语言程序设计-第5章 函数函数原型函数原型(Prototype)n n一般形式n n类型类型 函数名函数名(类型类型1,1,类型类型2,.);2,.);n n类型类型 函数名函数名(类型类型1 1 形参形参1,1,类型类型2 2 形参形参2,.);2,.);n n举例n nintint max(intmax(int,intint););n nintint max(intmax(int x,x,intint y);y);n nvoi
16、d dummy();void dummy();/*/*无参函数原型无参函数原型*/n nvoid void dummy(voiddummy(void););/*/*同上同上*/21C语言程序设计-第5章 函数函数的声明函数的声明(Declaration)n n函数声明的形式即函数原型n n在函数调用之前,应对函数进行声明n n函数声明可以在主调函数的声明部分,也可以在函数外部n n函数外部的声明,对所有主调函数都起作用,不需要在主调函数内再次声明n n函数的定义也具有声明的作用n n库函数的声明包括在头文件(*.h)里,不需在源程序里声明22C语言程序设计-第5章 函数int max(int
17、x,int y);/*函数声明*/函数声明举例函数声明举例(1)int main()_int a,b,c;c=max(a,b);int max(int x,int y)return xy?x:y;23C语言程序设计-第5章 函数函数声明举例函数声明举例(2)int max(int x,int y);/*函数声明*/int main()/*不需要再次声明int max(int,int)*/int a,b,c;c=max(a,b);int max(int x,int y)return xy?x:y;24C语言程序设计-第5章 函数函数声明举例函数声明举例(3)int max(int x,int y
18、)/*函数定义具有声明作用*/return xy?x:y;int main()/*不需要再次声明int max(int,int)*/int a,b,c;c=max(a,b);25C语言程序设计-第5章 函数7.5 函数的嵌套调用函数的嵌套调用n n调用一个函数的过程中,调用另一函数。调用一个函数的过程中,调用另一函数。main函数函数结束结束调用调用a函数函数b函数函数a函数函数调用调用b函数函数26C语言程序设计-第5章 函数函数嵌套调用的例子函数嵌套调用的例子int sum_class(int class);int sum_dept(int dept);int main()int i,dn
19、,sum;printf(“输入学院数输入学院数:”);scanf(“%d”,&dn);for(sum=0,i=1;i=dn;i+)sum=sum+sumdept(i);printf(“全校学费总金额全校学费总金额%dn”,sum);int sum_dept(int dept)int i,cn,s=0;printf(“输输%d学院班级学院班级数数”,dept);scanf(“%d”,&cn);for(i=1;i=cn;i+)s=s+sum_calss(i);return(s);int sum_class(int class)int i,student,s=0;printf(“输输%d班级人数班级
20、人数”,class);scanf(“%d”,&student);for(i=1;i1)(n1)29C语言程序设计-第5章 函数n n例例例例:用递归方法求用递归方法求用递归方法求用递归方法求n n!。!。!。!。n n!=1 n=0=1 n=0,1 1 n*(n-1)!n1 n*(n-1)!n1 6!-5!-4!-3!-2!-1!=1 (6!-5!-4!-3!-2!-1!=1 (已知条件已知条件已知条件已知条件)1!*2-2!*3-3!*4-4!*5-5!*6=720 1!*2-2!*3-3!*4-4!*5-5!*6=720 float float fac(intfac(int n)n)flo
21、at f;float f;if(nif(n=0|n=1)f=1;=0|n=1)f=1;else f=fac(n-1)*n;else f=fac(n-1)*n;return(freturn(f););main()main()intint n;float y;n;float y;scanf(“%d”,&nscanf(“%d”,&n););y=y=fac(nfac(n););printf(“%dprintf(“%d!=%10.2fn”,n,y);!=%10.2fn”,n,y);30C语言程序设计-第5章 函数【例例5】求最大公约数(递归)求最大公约数(递归)#include stdio.hint m
22、ain()int a,b,x;printf(“输入两个正整数输入两个正整数:);scanf(%d%d,&a,&b);if(a=0|b%-%cncn,x,z);,x,z);else else move(n-1,x,z,y);move(n-1,x,z,y);printf(%cprintf(%c-%-%cncn,x,z);,x,z);move(n-1,y,x,z);move(n-1,y,x,z);main()main()intint h;h;printf(ninputprintf(ninput number:n);number:n);scanf(%d,&hscanf(%d,&h););printf(
23、theprintf(the step to moving%2d step to moving%2d diskes:n,hdiskes:n,h););move(h,a,b,cmove(h,a,b,c););33C语言程序设计-第5章 函数7.7 数组与函数参数数组与函数参数l数组元素作为函数的实参数组元素作为函数的实参n n数数组组元元素素的的引引用用与与一一般般变变量量的的引引用用是是一一样样的的,传递的是数组元素的值,属于传递的是数组元素的值,属于“值传递值传递”方式。方式。n n例例:设设a8a8和和b8b8分分别别保保存存了了A A班班和和B B班班八八门门课课程程的的平平均均成成绩绩,
24、现现要要统统计计出出A A班班有有几几门门课课程程的的平平均成绩高于均成绩高于B B班班34C语言程序设计-第5章 函数intintintint better(floatbetter(floatbetter(floatbetter(float ave1,float ave2)ave1,float ave2)ave1,float ave2)ave1,float ave2)if(ave1ave2)if(ave1ave2)if(ave1ave2)if(ave1ave2)return(1);return(1);return(1);return(1);else return(-1);else retur
25、n(-1);else return(-1);else return(-1);main()main()intintintint i,ki,ki,ki,k=0;float=0;float=0;float=0;float a8=65,78,67,90,84,63,58,76,b8=6a8=65,78,67,90,84,63,58,76,b8=6a8=65,78,67,90,84,63,58,76,b8=6a8=65,78,67,90,84,63,58,76,b8=62,79,65,88,80,65,60,74;2,79,65,88,80,65,60,74;2,79,65,88,80,65,60,74
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 实现 模块化 程序设计
限制150内