《C++程序设计教程》电子教案 第4章 函数

上传人:E**** 文档编号:89399625 上传时间:2019-05-24 格式:PPT 页数:43 大小:176.50KB
返回 下载 相关 举报
《C++程序设计教程》电子教案 第4章   函数_第1页
第1页 / 共43页
《C++程序设计教程》电子教案 第4章   函数_第2页
第2页 / 共43页
《C++程序设计教程》电子教案 第4章   函数_第3页
第3页 / 共43页
《C++程序设计教程》电子教案 第4章   函数_第4页
第4页 / 共43页
《C++程序设计教程》电子教案 第4章   函数_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《《C++程序设计教程》电子教案 第4章 函数》由会员分享,可在线阅读,更多相关《《C++程序设计教程》电子教案 第4章 函数(43页珍藏版)》请在金锄头文库上搜索。

1、第4章 函数,4.1 函数概述 4.2 函数的定义与声明 4.3 函数的调用,C+语言认为函数是一个能完成某一独立功能的子程序,也就是程序模块。 函数就是对复杂问题的一种“自顶向下,逐步求精”思想的体现。 编程者可以将一个大而复杂的程序分解为若干个相对独立而且功能单一的小块程序(函数)进行编写,并通过在各个函数之间进行调用,来实现总体的功能。,4.1 函数概述,使用函数的优点: (1)可读性好; (2)易于查错和修改; (3)便于分工编写,分阶段调试; (4)各个函数之间接口清晰,便于相互间交换信息和使用; (5)节省程序代码和存储空间; (6)减少用户总的工作量; (7)成为实现结构程序设计

2、思想的重要工具; (8)扩充语言和计算机的原设计能力; (9)便于验证程序正确性。,设计C+程序的过程,实际上就是编写函数的过程,至少也要编写一个main()函数。 执行C+程序,也就是执行相应的main()函数。即从main()函数的第一个左花括号“”开始,依次执行后面的语句,直到最后一个右花括号“”为止。如果在执行过程中遇到其他的函数,则调用其他函数。调用完后,返回到刚才调用函数的下一条语句继续执行。而其他函数也只有在执行main()函数的过程中被调用时才会执行。,函数可以被一个函数调用,也可以调用另一个函数,它们之间可以存在着调用上的嵌套关系。但是,C+不允许函数的定义嵌套,即在函数定义

3、中再定义一个函数是非法的。 C+函数是一个独立完成某个功能的语句块,函数与函数之间通过输入和输出来联系。,4.2 函数的定义与声明,在C+程序中调用函数之前,首先要对函数进行定义。如果调用此函数在前,函数定义在后,就会产生编译错误。 为了使函数的调用不受函数定义位置的影响,可以在调用函数前进行函数的声明。这样,不管函数是在哪里定义的,只要在调用前进行函数的声明,就可以保证函数调用的合法性。,4.2.1 函数的定义 C+中的每一个函数都是从四个方面来进行定义:类型、函数名、形式参数表、函数体。 定义一个函数的语法格式为: 类型 函数名(形式参数表) 函数体; ,例如: int max(int a

4、,int b) int t; if(ab) t=a; else t=b; return t; ,类型就是该函数的类型,也就是该函数的返回值的类型,此类型可以是C+中除函数、数组类型之外的任何一个合法的数据类型,包括普通类型、指针类型和引用类型等。 函数的返回值通常指明了该函数处理的结果,由函数体中的return语句给出。一个函数可以有返回值,也可以无返回值(称为无返回值函数或无类型函数)。此时需要使用保留字void作为类型名,而且函数体中也不需要再写return语句,或者return的后面什么也没有。 每个函数都有类型,如果在函数定义时没有明确指定类型,则默认类型为int。,函数名是一个有效的

5、C+标识符,遵循一般的命名规则。在函数名后面必须跟一对小括号“()”,用来将函数名与变量名或其他用户自定义的标识符区分开来。在小括号中可以没有任何信息,也可以包含形式参数表。C+程序通过使用这个函数名和实参表可以调用该函数。 主函数的名称规定取编译器默认的名称main()。,形式参数表又称参数表,写在函数名后面的一对圆括号内。它可包含任意多个(含0个,即没有)参数说明项,当多于一个时其前后两个参数说明项之间必须用逗号分开。 每个参数说明项由一种已定义的数据类型和一个变量标识符组成,该变量标识符称为该函数的形式参数,简称形参,形参前面给出的数据类型称为该形参的类型。每个形参的类型可以为任一种数据

6、类型,包括普通类型、指针类型、数组类型、引用类型等。 一个函数定义中的可以被省略,表明该函数为无参函数,若用void取代,则也表明是无参函数,若不为空,同时又不是保留字void,则称为带参函数。,是一条复合语句,它以左花括号开始,到右花括号结束,中间为一条或若干条C+语句,用于实现函数执行的功能。 注意:在一个函数体内允许有一个或多个return语句,一旦执行到其中某一个return语句时,return后面的语句就不再执行,直接返回调用位置继续向下执行。,函数形参也可以在函数体外说明。如下例: func1(int a, int b) 也可写成: func1(a,b) int a; int b;

7、 ,#include “iostream.h“ int func(int n) if(n0) return 1; else if(n=0) return 0; else return -1; ,void main() int n; coutn; cout“nthe result:“func(n)endl; ,例4-1:给出以下程序的运行结果。,此程序的运行结果为: Please input n: 2 the result:1 Please input n: -2 the result:-1,请注意:C+中不允许函数定义嵌套,即在函数定义中再定义一个函数是非法的。一个函数只能定义在别的函数的外部

8、,函数定义之间都是平行的,互相独立的。 例如:下面的代码在主函数中非法嵌套了一个f()函数定义: void main() void f() / ,4.2.2 函数的声明 函数声明也称函数模型(或函数原型)。在主调函数中,如果要调用另一个函数,则须在本函数或本文件中的开头将要被调用的函数事先作一声明。声明函数,就是告诉编译器函数的返回类型、名称和形参表构成,以便编译系统对函数的调用进行检查。 函数声明的一般格式为: 函数类型 函数名(形式参数表); 除了需在函数声明的末尾加上一个分号“;”之外,其他的内容与函数定义中的第一行(称函数头)的内容一样。,例如:设有一函数的定义为: double fu

9、nc1(double a, int b, float c) 函数体 正确完整的函数声明应为: double func1(double x, int y, float z); /末尾要加上分号,也可以写为如下形式: double func1(double,int,float); /函数声明中省略了形参名 或写为如下形式: double func1(double a, int b, float c); /函数声明中的形参名与 /函数定义中的形参名不同,不能写为如下形式: double func1(x,y,z); /函数声明中省略了形参类型 或: func1(double x, int y, flo

10、at z); /函数声明中省略了函数类型 或: double func1(int y, float z, double x); /函数声明中形参顺序调换了,4.3 函数的调用,4.3.1 函数调用的格式: 在C+中,除了主函数main由系统自动调用外,其他函数都是由主函数直接或间接调用的。函数调用的语法格式为: 函数名 (实际参数表); 实参应该与函数定义中的形参表中的形参一一对应,即个数相等、次序一致且对应参数的数据类型相同或相容 。每个实参是一个表达式,并且必须有确定的值。,如: g1(25) /实参是一个整数 g2(x) /实参是一个变量 g3(a,2*b+3) /第一个为变量,第二个运

11、算表 /达式 g4(sin(x),) /第一个为函数调用表达式,第二 /个为字符常量 g5(&d,*p,x/y-1) /分别为取地址运算、间接访问和 /一般运算表达式,常见的函数调用方式有下列两种: 方式一:将函数调用作为一条表达式语句使用,只要求函数完成一定的操作,而不使用其返回值。若函数调用带有返回值,则这个值将会自动丢失。例如: max(3,5); 方式二:对于具有返回值的函数来说,把函数调用语句看作语句一部分,使用函数的返回值参与相应的运算或执行相应的操作。例如: int a=max(3,5); int a=max(3,5)+1; coutmax(3,5)endl; if(f1(a,b

12、) cout”true”endl; int a=2; a=max(max(a,3),5);,#include int max(int a,int b,int c) int t; t=a; if(bt) t=b; if(ct) t=c; return t; ,void main() int x,y,z; coutxyz; int m=max(x,y,z); cout”The max is:”m endl; ,例:函数调用。,4.3.2 函数调用的过程 当调用一个函数时,整个调用过程分为三步进行,第一步是参数传递,第二步是函数体执行,第三步是返回,即返回到函数调用表达式的位置。,4.3.3 函数调

13、用时的参数传递 参数传递称为“实虚结合”,即实参向形参传递信息,使形参具有确切地含义(即具有对应的存储空间和初值)。这种传递又分为两种不同的方式,一种是按值传递,另一种是地址传递或引用传递。,1. 按值传递 以按值传递方式进行参数传递的过程为:首先计算出实参表达式的值,接着给对应的形参变量分配一个存储空间,该空间的大小等于该形参类型的长度,然后把已求出的实参表达式的值一一存入到为形参变量分配的存储空间中,成为形参变量的初值,供被调用函数执行时使用。这种传递是把实参表达式的值传送给对应的形参变量,故称这种传递方式为“按值传递”。这种方式被调用函数本身不对实参进行操作,也就是说,即使形参的值在函数

14、中发生了变化,实参的值也完全不会受到影响,仍为调用前的值。,#include “iostream.h“ void swap(int,int); void main() int a=3,b=4; cout“a=“a“,b=“ bendl; swap(a,b); cout“a=“a“,b=“ b endl; ,void swap(int x,int y) int t=x; x=y; y=t; 此程序的运行结果为: a=3,b=4 a=3,b=4,例4-3:按值传递。,2. 地址传递 如果在函数定义时将形参的类型说明成指针,对这样的函数进行调用时就需要指定地址值形式的实参。这时的参数传递方式即为地址

15、传递方式。这种地址传递与上述的按值传递不同,它把实参的存储地址传送给对应的形参,从而使得形参指针和实参指针指向同一个地址。因此,被调用函数中对形参指针所指向的地址中内容的任何改变都会影响到实参。,#include “iostream.h“ void swap(int *,int *); void main() int a=3,b=4; cout“a=“a“,b=“ bendl; swap( ,void swap(int *x,int *y) int t=*x; *x=*y; *y=t; 此程序的运行结果为: a=3,b=4 a=4,b=3,例4-4:地址传递。,3. 引用传递 按值传递方式容易

16、理解,但形参值的改变不能对实参产生影响;地址传递方式虽然可以使得形参的改变对相应的实参有效,但如果在函数中反复利用指针进行间接访问,会使程序容易产生错误且难以阅读。如果以引用作为参数,则既可以使得对形参的任何操作都能改变相应的实参的数据,又使函数调用显得方便、自然。引用传递方式是在函数定义时在形参前面加上引用运算符“&”。,#include “iostream.h“ void swap(int ,void swap(int 此程序的运行结果为: a=3,b=4 a=4,b=3,例4-5:引用传递。,4.3.4 内联函数 内联扩展(inline expansion)简称为内联(inline),内联函数也称为内嵌函数。当在

展开阅读全文
相关资源
相关搜索

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

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