第5章函数75页

上传人:小** 文档编号:45551628 上传时间:2018-06-17 格式:PPT 页数:75 大小:224.02KB
返回 下载 相关 举报
第5章函数75页_第1页
第1页 / 共75页
第5章函数75页_第2页
第2页 / 共75页
第5章函数75页_第3页
第3页 / 共75页
第5章函数75页_第4页
第4页 / 共75页
第5章函数75页_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《第5章函数75页》由会员分享,可在线阅读,更多相关《第5章函数75页(75页珍藏版)》请在金锄头文库上搜索。

1、第5章 函数能完成一定功能的语句组织在一起,并有相应的名称。这种 形式的语句结合体称为函数。函数也称为例程或过程。从用户使用的角度函数分为标准函数和用户自定义函数。(标 准函数是C+提供的可以在任何程序中使用的公共函数。)函数与函数之间是互相独立的。任何一个函数并不从属于另一 个函数。函数可以互相调用,甚至可以自己调用自己,但任何时候 都不允许调用main函数。51 函数概述 main()func1 func2 func3func3 func4上面是函数与被调用函数的层次关系。函数可以是有参数的,也可以是无参数的。返回值可以有 也可以没有。特别地,C+不允许函数定义的嵌套。521 函数定义的一

2、般形式函数定义的一般形式为类型标识符 函数名(形式参数表列)声明部分语句体52 函数的定义和调用 函数定义的一般形式为类型标识符 函数名(形式参数表列)声明部分语句体类型标识符说明函数返回值的数据类型。通常把函数返回 值的类型称为函数的类型,即函数定义时由类型标识符所 指出的类型。函数在返回前要先将表达式的值转换为所定 义的类型,返回到主调函数中的调用表达式。对无返回值 的函数,其函数类型标识为void,称为“空类型函数”,即此 函数不向主调用函数返回值,主调用函数也禁止使用此函 数的返回值。函数定义的一般形式为类型标识符 函数名(形式参数表列)声明部分语句体形式参数写在函数名后面的一对圆括号

3、内,它有两个作用: (1)表示将从主调函数中接收哪些类型的信息。形式参数之间应以逗号 相隔。 函数可以没有形式参数。这时,函数名后面的圆括号内写上void,也可 以为空(但最好不要省略void)。即定义无参函数的一般形式为:类型标识符 函数名(void)声明部分语句体函数定义的一般形式为类型标识符 函数名(形式参数表列)声明部分语句体(2)在函数体中形式参数是可以被引用的,可以输入、输出、被赋以新 值或参与运算。 程序进行编译时,并不为形式参数分配存储空间。只有在被调用时,形式 参数才临时地占有存储空间,从调用函数中获得值,这称为“虚实结合”, 形参从相应的实参得到值。 函数定义的一般形式为类

4、型标识符 函数名(形式参数表列)声明部分语句体函数体是一个分程序结构,由变量定义部分和语句组成。在函数体 中定义的变量只有在执行该函数时才存在。函数体中也可以不定义变量 而只有语句,也可以二者皆无。如: void null(void) 这是一个空函数,调用它不产生任何有效操作,但却是一个C+语言的 合法函数。在程序设计中,往往先把main函数写好,并预先确定需要调 用的函数,有时一些函数还未编写好,可以用这样的空函数(函数名用 将来使用的实际函数名如max,average,)放在程序中,以便调试 程序的其它部分,以后再逐步补上。 例如: int max(int x,int y) / 函数首部i

5、nt z;if (xy) z=x; / 函数体else z=y;return z;void print_star(int n) / 无返回值int i;for(i=1;i using namespace std; void print_star(int n) int i;for(i=1;i using namespace std; int max(int a,int b,int c) int x;x=a;if (xabc;x=max(a,b,c);cout #include using namespace std; int IsPrime(int n) int i;if (nn;s= IsPr

6、ime(n);if (s= =1) cout using namespace std; void swap(int,int); int main() int a=3,b=5;cout using namespace std; int f(int m,int n); int main() int a,b,h;cinab;h=f(a,b);cout using namespace std; int large(int,int); int main() int a10,b10,i,flag,m=0,n=0;for (i=0;iai; cout bi;for (i=0;in) cout y) flag

7、=1;else if (x= =y) flag=0;else flag=-1;return flag; 数组元素作为实参 2向函数传递数组当数组作为函数参数时,传递给函数的是数组的首地址, 此时形参数组与实参数组共占一组地址单元。(数组名永远代 表数组的首地址) 例5-7 编写函数,将整数数组元素逆序存放。 #include using namespace std; void fun(int b ,int n); int main() int a10,i;for (i=0;iai;fun(a,10);for (i=0;iai;3)问题需要判断10个小孩的糖果数是否相等,显然是 一个操作序列,其

8、判断结果是while循环的条件,因此将问题 抽象成一个函数AllEqual,该函数用来判断数组中所有元 素的值是否都相等,如果都相等则返回1,否则返回0。其函 数原型为:int AllEqual(int x);而为判断一个数组中所有元素的值是否全相等,最简单 的办法为将数组中的第2个数至最后一个数与第1个数相比较 ,只要它们中有一个不相等,就返回0(不全相等),如果比 较完后,没有返回0,则它们全相等,返回1。程序描述为: int AllEqual(int x10) int i; for (i=1;i0;i-) ai=ai/2+ai-1/2; a0=a0/2+temp/2;问题我们同样将它写成

9、一个函数,函数定义为: void exchange(int x10) int temp,i;temp=x9; for (i=9;i0;i-) xi=xi/2+xi-1/2; x0=x0/2+temp/2; #include using namespace std; int AllEqual(int x); void exchange(int x); void supply(int x); int main() int a10,i,count=0;cout ai;while (AllEqual(a)!=1) count+;supply(a); exchange(a); cout 0;i-) xi

10、=xi/2+xi-1/2; x0=x0/2+temp/2; void supply(int x10) int i; for (i=0;i using namespace std; int max(int x4); / 多维数组作为函数参数 int main() int a34=3,5,8,6,2,9,6,3,12,5,4,9;cout num) num=xij;return num; 例5-10 编写程序,找出一个二维数组中的鞍点(也可能没 有鞍点),即该位置上的元素在该行上最大,在该列上最小 。 #include using namespace std; #define M 5 #defin

11、e N 4 int IsRowMax(int aMN,int i,int j); int IsColMin(int aMN,int i,int j); int main() int aMN,i,j,count=0;for (i=0;iaij; for (i=0;iaij) s=0; break; return s; int IsColMin(int aMN,int i,int j) / 判断是否为列最小 int k,s=1;for (k=0;k using namespace std; const int num_1=10; const int num_2=20; int max(int i=

12、num_1,int j=num_2); int add(int a=5,int b=max(); int main() cout y?x:y; return z; int add(int x,int y) return (x+y); 注意,默认参数只能出现一次。当程序中进行了函数声 明时,默认参数只能在函数声明中给出。如果在函数声明中没有指定参数的默认值,而在定义中 为参数给出了默认值,则调用时默认值不能使用。因为编译 程序在建立调用时,使用的是函数的原型信息,而不是函数 的定义。如果在函数声明和定义时都对形参给出了默认值,则 VC+编译系统会给出“重复指定默认值”的出错信息。当函数的定义在函

13、数调用之前,程序中没有进行函数声 明时,则在函数定义中给出的默认值是有效的。如果一个函数中有多个参数,则默认参数应从右至左逐 个定义。 例如,下面的写法是正确的: int func1(int a,int b,int c,int d=4); int func2(int a,int b,int c=3,int d=4); int func3(int a,int b=2,int c=3,int d=4); int func4(int a=1,int b=2,int c=3,int d=4);而下面的写法是错误的: int func1(int a,int b,int c=3,int d); int f

14、unc2(int a,int b=2,int c,int d=4); int func3(int a=1,int b=2,int c,int d);如果调用int func4(int a=1,int b=2,int c=3,int d=4);函数, 可以采取下面的形式:func4(10,20,30,40) / 形参的值全部从实参得到 func4(10,20,30) / 最后一个形参的值取默认值4 func4(10,20) / 最后两个形参的值分别取默认值3和4 func4() / 四个形参的值都取默认值531 函数的嵌套调用在C+中,不允许将一个函数定义在另一个函数体中,但 允许在调用一个函数的过程中又调用另一个函数。这种调用称 为函数的嵌套调用。53 函数的嵌套和递归 例5-12 函数的嵌套调用示例 #include using namespace std; void f1(void); void f2(void); int main()

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

最新文档


当前位置:首页 > 商业/管理/HR > 经营企划

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