第3章 过程抽象——函数.ppt
《第3章 过程抽象——函数.ppt》由会员分享,可在线阅读,更多相关《第3章 过程抽象——函数.ppt(73页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、SEI第三章第三章 过程抽象函数过程抽象函数高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季2学习目标学习目标n掌握函数调用的方法,会使用函数原型;掌握函数调用的方法,会使用函数原型;n掌握函数定义的方法,理解函数返回值的意义;掌握函数定义的方法,理解函数返回值的意义;n熟练掌握函数调用的值传递规则。熟练掌握函数调用的值传递规则。n掌握递归函数掌握递归函数高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季3n 3.1 函数函数n3.1.1 函数概述函数概述n3.1.2 函数定义函数定义n3.1.3 函数调用函数调用n3.1.4 函数传递机制函数传递机制n 3.2
2、递归函数递归函数n 3.3 程序的结构化与模块化程序的结构化与模块化n 3.4 程序测试与代码优化程序测试与代码优化第三章第三章 过程抽象函数过程抽象函数高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季4C函数的概念函数的概念n函数是函数是C提供的用于实现子模块的语言成分。提供的用于实现子模块的语言成分。n函数的概念源于数学,是一个集合到另一个集合函数的概念源于数学,是一个集合到另一个集合的映射。例如对于数学中的函数的映射。例如对于数学中的函数y=f(x)=x2:0140 1-12xyx2用用C函数表示就是:函数表示就是:int f(int x)return x*x;函数函数函
3、数函数函数函数函数概述函数概述高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季5n在前面学习的在前面学习的C C程序中,都有一个名称为程序中,都有一个名称为mainmain的函的函数,每个完整的数,每个完整的C C程序从该函数开始运行。程序从该函数开始运行。n在前面编写的程序中,很多处理在前面编写的程序中,很多处理(运算运算)都是通过使都是通过使用库函数完成的。用库函数完成的。如数学函数如数学函数:fabsfabs()()、sqrtsqrt()()、powpow()()、sin().sin().C函数概述函数概述函数概述函数概述高级语言程序设计SEIC+C+C+C+程序设计基础
4、 2009秋季6函数的基本要素函数的基本要素n一个函数由函数首部和函数体两部分构成一个函数由函数首部和函数体两部分构成函数首部包括函数首部包括:函数名、函数的返回值类型、函数的参数:函数名、函数的返回值类型、函数的参数函数体包括函数体包括:声明部分:声明部分(数据说明数据说明)、语句部分、语句部分(运算运算)intint main(void)main(void)intint inches,feet,fathoms;inches,feet,fathoms;printf(printf(inputinput fathoms:);fathoms:);scanfscanf (%d,&fathoms)(%
5、d,&fathoms);feet=6*fathoms;feet=6*fathoms;inches=12*feet;inches=12*feet;return 0;return 0;声明部分:声明部分:三个整形变量三个整形变量语句部分:语句部分:输入一个英寻数,输入一个英寻数,进行单位换算进行单位换算函函数数体体函数首部函数首部函数概述函数概述高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季7函数定义和函数调用的概念函数定义和函数调用的概念n编写编写函数首部和函数体的内容就是进行函数首部和函数体的内容就是进行函数定义函数定义n按照函数定义时给定的函数名按照函数定义时给定的函数名使
6、用使用函数称为函数称为函数调函数调用用n库函数库函数是已经编写好的函数,编写程序时可直接调是已经编写好的函数,编写程序时可直接调用用n在本章我们要学习自己编写函数,并了解更多的库在本章我们要学习自己编写函数,并了解更多的库函数的使用方法函数的使用方法函数概述函数概述高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季8n 3.1 函数函数n3.1.1 函数概述函数概述n3.1.2 函数定义函数定义n3.1.3 函数调用函数调用n3.1.4 函数传递机制函数传递机制n 3.2 递归函数递归函数n 3.3 程序的结构化与模块化程序的结构化与模块化n 3.4 程序测试与代码优化程序测试与
7、代码优化第三章第三章 过程抽象函数过程抽象函数高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季9函数定义函数定义n函数定义的一般形式是:返回值类型返回值类型 函数名函数名(形式参数表形式参数表)声明部分;声明部分;语句部分;语句部分;n例如,定义一个函数,将给定一个摄氏温度转换为例如,定义一个函数,将给定一个摄氏温度转换为华氏温度,并将华氏温度返回。华氏温度,并将华氏温度返回。void main(void)int x;double y;printf(Celsius to Fahrenheit table:n);for(x=0;x=100;x+=5)y=CelsToFahr(x)
8、;printf(%d%lfn,x,y);double CelsToFahr(int c)double t;t=9.0/5*c+32;return t;函数定义函数定义高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季10函数参数函数参数n形式参数和实际参数返回值类型返回值类型 函数名函数名(形式参数表形式参数表)声明部分;声明部分;语句部分;语句部分;double CelsToFahr(int c)double t;t=9.0/5*c+32;return t;调用函数时的参数是实际参数调用函数时的参数是实际参数x=35;x=35;y=CelsToFahr(x);y=CelsToF
9、ahr(50);函数定义中函数首部的参数称为形式参数函数定义中函数首部的参数称为形式参数形参形参说明的格式为:说明的格式为:函数定义函数定义高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季11函数的返回值和函数的返回值和returnreturn语句语句n函数的返回值由return语句带回,return语句使被调用函数的执行过程终止n定义一个函数,判断给定义一个函数,判断给定的一个十进制正整数定的一个十进制正整数是否为素数。是否为素数。/*判断正整数判断正整数d是否为素数,若是返回是否为素数,若是返回1,否则返回,否则返回0*/int isPrime(int d)int i;if
10、(d 2)return 0;for(i=2;i y)z=x;else z=y;return(z);void main()int a,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf(“最大值为:最大值为:%d”,c);函数定义函数定义高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季13函数定义小结函数定义小结n函数定义的一般形式:返回值类型返回值类型 函数名函数名(形式参数表形式参数表)声明部分;声明部分;语句部分;语句部分;n函数没有形式参数表时,可用函数没有形式参数表时,可用“void”void”表示,函数调用时无表示,函数调用时无须指定实
11、际参数。须指定实际参数。n函数没有返回值时,返回值类型用函数没有返回值时,返回值类型用“void”void”表示,此时函数表示,此时函数中可不写中可不写returnreturn语句。语句。n函数的返回值由函数的返回值由returnreturn语句带回,在函数体中,语句带回,在函数体中,returnreturn语句语句可出现多次,但执行到某一条可出现多次,但执行到某一条returnreturn语句时,函数即结束。语句时,函数即结束。函数定义函数定义高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季14n 3.1 函数函数n3.1.1 函数概述函数概述n3.1.2 函数定义函数定义n
12、3.1.3 函数调用函数调用n3.1.4 函数传递机制函数传递机制n 3.2 递归函数递归函数n 3.3 程序的结构化与模块化程序的结构化与模块化n 3.4 程序测试与代码优化程序测试与代码优化第三章第三章 过程抽象函数过程抽象函数高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季15函数调用函数调用n函数调用的基本格式:函数调用的基本格式:函数名函数名(实际参数表实际参数表)n主调函数和被调用函数主调函数和被调用函数调用函数时,表达式调用函数时,表达式(语句语句)所在的函数称为主调函数所在的函数称为主调函数实际参数实际参数(实参实参)在主调函数中在主调函数中形式参数形式参数(形
13、参形参)在被调用函数中在被调用函数中n实参实参由零个、一个或多个表达式表达式构成(逗号分割),其个数和类型应与相应函数的形参相同。个数和类型应与相应函数的形参相同。函数调用函数调用高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季16函数调用的执行过程函数调用的执行过程n当一个函数被调用时,执行以下步骤:当一个函数被调用时,执行以下步骤:1)1)计算每个实际参数的值;计算每个实际参数的值;2)2)将每个实参的值拷贝至对应的形参变量将每个实参的值拷贝至对应的形参变量3)3)执行被调用函数的语句,直到遇到一条执行被调用函数的语句,直到遇到一条returnreturn语语句或语句结束;
14、句或语句结束;4)4)计算计算returnreturn语句中表达式的值语句中表达式的值5)5)返回主调函数,用返回的值替换函数调用,然后返回主调函数,用返回的值替换函数调用,然后继续执行主调函数的后续语句继续执行主调函数的后续语句函数调用函数调用高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季17函数调用的执行过程函数调用的执行过程n例:求两数之和例:求两数之和#includefloat add(float x,float y)float z;z=x+y;return(z);void main()float a,b,c;scanf(“%f%f”,&a,&b);c=add(a,b
15、);printf(“sum is%fn”,c);程序的入口,执行程序的入口,执行main()调用调用add()函数,计算实参的函数,计算实参的值值a和和b将实参将实参a、b的值传给形参的值传给形参x、y执行函数体执行函数体调用点调用点执行完执行完return语句将结果返回到调语句将结果返回到调用点用点函数调用函数调用高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季18n程序要对被调用的函数进行声明。程序要对被调用的函数进行声明。n如果函数定义在本源文件调用点之前,则无需声明;如果函数定义在本源文件调用点之前,则无需声明;n如如果果函函数数定定义义在在本本源源文文件件调调用用点点
16、之之后后,或或者者在在其其它它文文件件中定义,则在调用前需要对被调用的函数进行声明。中定义,则在调用前需要对被调用的函数进行声明。n函数声明的格式如下:函数声明的格式如下:n返回值类型 函数名();/函数原型n在函数声明中,在函数声明中,中可以只列出形参中可以只列出形参的类型而不写形参名。的类型而不写形参名。n函数原型即可以出现在函数原型即可以出现在main函数之前,也可以像函数之前,也可以像标准库一样将它们单独列在头文件中,并在源文件标准库一样将它们单独列在头文件中,并在源文件中包含该头文件。中包含该头文件。函数声明(函数原型)函数声明(函数原型)函数调用函数调用高级语言程序设计SEIC+C
17、+C+C+程序设计基础 2009秋季19例:求两数之和例:求两数之和#includefloat add(float,float);/函数原型函数原型void main()float a,b,c;scanf(“%f%f”,&a,&b);c=add(a,b);printf(“sum is%fn”,c);float add(float x,float y)float z;z=x+y;return(z);函数调用函数调用高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季20举例举例n定义一个求定义一个求n n的阶乘的函数。函数返回的阶乘的函数。函数返回n n!void main()int
18、 i=1;for(i=1;i=10;i+)printf(“%d!=%dn”,i,fact(i);long fact(int n)long t=1,i=1;for(i=1;i=n;i+)t=t *i;return(t);n不同函数中的变量是互不干扰、相互独立的不同函数中的变量是互不干扰、相互独立的高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季21举例举例l书架上有书架上有n n本不同的书,从中本不同的书,从中任取任取k k本,有多少种取法?本,有多少种取法?long combinations(int n,int k)return(fact(n)/(fact(k)*fact(n-
19、k);高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季22举例举例n定义一个函数,对于给定一个位数不超过定义一个函数,对于给定一个位数不超过5 5位的十进制位的十进制整数整数n n,求解并返回其从右边数第,求解并返回其从右边数第k k位上的数字位上的数字(0k5)(0k5),若,若k k大于大于n n的位数,则返回的位数,则返回0 0。高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季23 被除数 除数 商 余数123451012345第第1位位高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季24 被除数 除数 商 余数12341234510123
20、45101234第第2位位高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季25 被除数 除数 商 余数123412345101234510123412310123第第3位位高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季26 被除数 除数 商 余数123412345101234510123412310123121012第第4位位高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季27 被除数 除数 商 余数12341234510123451012341231012312101211001第第5位位高级语言程序设计SEIC+C+C+C+程序设计基础 2
21、009秋季28 被除数 除数 商 余数123412345101234510123412310123121012110010高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季29举例举例n定义一个函数,对于给定一定义一个函数,对于给定一个位数不超过个位数不超过5 5位的十进制位的十进制整数整数n n,求解并返回其从右,求解并返回其从右边数第边数第k k位上的数字位上的数字(0k5)(0k 0&i k)t=d%10;d=d/10;i=i+1;if(i=k)return(t);return 0;高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季30n编制一个函数编制一个函
22、数ucos,利用下式计算给定实数,利用下式计算给定实数x的近似余弦函的近似余弦函数值,直到最后一项的绝对值小于数值,直到最后一项的绝对值小于10-6.举例举例高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季31#include#include double ucos(double x)double ucos=0,ai=1;int i=0,sign=1;int k,fib;while(ai=1e-6)ucos+=sign*ai;i+;fib=1;for(k=1;k=2*i;k+)fib*=k;ai=pow(x,2*i)/fib;sign=-sign;return ucos;int
23、 main()double x;printf(请输入请输入x:n);scanf(%lf,&x);printf(ucos(%lf)=%lfn,x,ucos(x);return 0;高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季32n 3.1 函数函数n3.1.1 函数概述函数概述n3.1.2 函数定义函数定义n3.1.3 函数调用函数调用n3.1.4 函数传递机制函数传递机制n 3.2 递归函数递归函数n 3.3 程序的结构化与模块化程序的结构化与模块化n 3.4 程序测试与代码优化程序测试与代码优化第三章第三章 过程抽象函数过程抽象函数高级语言程序设计SEIC+C+C+C+程
24、序设计基础 2009秋季33形式参数和实际参数形式参数和实际参数n函数未被调用时,形式参数不占用存储空间函数未被调用时,形式参数不占用存储空间n参数较多时,实际参数值逐一赋给形参,它们必须参数较多时,实际参数值逐一赋给形参,它们必须保持数目、类型、顺序的一致保持数目、类型、顺序的一致n实参向形参传递值,形参不能向实参传递值实参向形参传递值,形参不能向实参传递值n实参可以是常量、变量或表达式实参可以是常量、变量或表达式函数传递机制函数传递机制高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季34nC函数的参数传递机制只有一种,即值传递。函数的参数传递机制只有一种,即值传递。n值传递
25、值传递n是指在函数调用时,采用类似赋值操作的形式把实参值是指在函数调用时,采用类似赋值操作的形式把实参值复制给形参。复制给形参。n这种复制操作是单向的,不可逆的。这种复制操作是单向的,不可逆的。n形参变化,实参不变。形参变化,实参不变。函数的参数传递函数的参数传递函数传递机制函数传递机制高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季35n编写程序将用户输入的两个整数相加,要求尽可能使用函数将程编写程序将用户输入的两个整数相加,要求尽可能使用函数将程序中的操作独立出来序中的操作独立出来#include#include zylib.hvoid PrintWelcomeInfo()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第3章 过程抽象函数 过程 抽象 函数
限制150内